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
00067 CallState callState() const;
00068 CallFlags callFlags() const;
00069 CallStateReason callStateReason() const;
00070 QVariantMap callStateDetails() const;
00071
00072
00073 Contacts remoteMembers() const;
00074 CallMemberFlags remoteMemberFlags(const ContactPtr &member) const;
00075
00076
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
00084 LocalHoldState localHoldState() const;
00085 LocalHoldStateReason localHoldStateReason() const;
00086 PendingOperation *requestHold(bool hold);
00087
00088 Q_SIGNALS:
00089
00090 void callStateChanged(Tp::CallState state);
00091 void callFlagsChanged(Tp::CallFlags flags);
00092
00093
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
00101 void contentAdded(const Tp::CallContentPtr &content);
00102 void contentRemoved(const Tp::CallContentPtr &content, const Tp::CallStateReason &reason);
00103
00104
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 }
00147
00148 #endif