aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-06-05 12:36:55 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-06-05 12:36:55 +0000
commitae2decb4e461d01759f0709552ba37c61f75822f (patch)
treed5331babdc9d4d4eacd59733fc5a29317174705d /src
parentb6f639c39e33743b71561113fa006dae1738a674 (diff)
downloadqxmpp-ae2decb4e461d01759f0709552ba37c61f75822f.tar.gz
improve QXmppCallManager scripting support
Diffstat (limited to 'src')
-rw-r--r--src/QXmppCallManager.cpp34
-rw-r--r--src/QXmppCallManager.h16
2 files changed, 49 insertions, 1 deletions
diff --git a/src/QXmppCallManager.cpp b/src/QXmppCallManager.cpp
index 87d77fd6..30a7d209 100644
--- a/src/QXmppCallManager.cpp
+++ b/src/QXmppCallManager.cpp
@@ -504,6 +504,9 @@ void QXmppCall::accept()
d->sendRequest(iq);
+ // notify user
+ d->manager->callStarted(this);
+
// check for call establishment
d->setState(QXmppCall::ActiveState);
}
@@ -524,6 +527,13 @@ QXmppRtpAudioChannel *QXmppCall::audioChannel() const
return 0;
}
+/// Returns the audio mode.
+
+QIODevice::OpenMode QXmppCall::audioMode() const
+{
+ return d->audioMode;
+}
+
/// Returns the RTP channel for the video data.
///
@@ -536,6 +546,13 @@ QXmppRtpVideoChannel *QXmppCall::videoChannel() const
return 0;
}
+/// Returns the video mode.
+
+QIODevice::OpenMode QXmppCall::videoMode() const
+{
+ return d->videoMode;
+}
+
void QXmppCall::terminated()
{
// close streams
@@ -653,6 +670,8 @@ QXmppCall::State QXmppCall::state() const
return d->state;
}
+/// Starts sending video to the remote party.
+
void QXmppCall::startVideo()
{
if (d->state != QXmppCall::ActiveState) {
@@ -697,6 +716,19 @@ void QXmppCall::startVideo()
d->sendRequest(iq);
}
+/// Stops sending video to the remote party.
+
+void QXmppCall::stopVideo()
+{
+ if (!d->sendVideo)
+ return;
+
+ d->sendVideo = false;
+ QXmppCallPrivate::Stream *stream = d->findStreamByMedia(VIDEO_MEDIA);
+ if (stream)
+ updateOpenMode();
+}
+
QXmppCallManagerPrivate::QXmppCallManagerPrivate(QXmppCallManager *qq)
: stunPort(0),
turnPort(0),
@@ -791,8 +823,10 @@ QXmppCall *QXmppCallManager::call(const QString &jid)
d->calls << call;
connect(call, SIGNAL(destroyed(QObject*)),
this, SLOT(callDestroyed(QObject*)));
+ emit callStarted(call);
call->d->sendInvite();
+
return call;
}
diff --git a/src/QXmppCallManager.h b/src/QXmppCallManager.h
index 97e77855..7ece91b2 100644
--- a/src/QXmppCallManager.h
+++ b/src/QXmppCallManager.h
@@ -52,6 +52,13 @@ class QXmppRtpVideoChannel;
class QXmppCall : public QXmppLoggable
{
Q_OBJECT
+ Q_ENUMS(Direction State)
+ Q_FLAGS(QIODevice::OpenModeFlag QIODevice::OpenMode)
+ Q_PROPERTY(Direction direction READ direction CONSTANT)
+ Q_PROPERTY(QString jid READ jid CONSTANT)
+ Q_PROPERTY(State state READ state NOTIFY stateChanged)
+ Q_PROPERTY(QIODevice::OpenMode audioMode READ audioMode NOTIFY audioModeChanged)
+ Q_PROPERTY(QIODevice::OpenMode videoMode READ videoMode NOTIFY videoModeChanged)
public:
/// This enum is used to describe the direction of a call.
@@ -78,7 +85,9 @@ public:
QXmppCall::State state() const;
QXmppRtpAudioChannel *audioChannel() const;
+ QIODevice::OpenMode audioMode() const;
QXmppRtpVideoChannel *videoChannel() const;
+ QIODevice::OpenMode videoMode() const;
signals:
/// \brief This signal is emitted when a call is connected.
@@ -110,6 +119,7 @@ public slots:
void accept();
void hangup();
void startVideo();
+ void stopVideo();
private slots:
void localCandidatesChanged();
@@ -153,7 +163,6 @@ class QXmppCallManager : public QXmppClientExtension
public:
QXmppCallManager();
~QXmppCallManager();
- QXmppCall *call(const QString &jid);
void setStunServer(const QHostAddress &host, quint16 port = 3478);
void setTurnServer(const QHostAddress &host, quint16 port = 3478);
void setTurnUser(const QString &user);
@@ -171,6 +180,11 @@ signals:
/// To refuse the call, invoke the call's QXmppCall::hangup() method.
void callReceived(QXmppCall *call);
+ void callStarted(QXmppCall *call);
+
+public slots:
+ QXmppCall *call(const QString &jid);
+
protected:
/// \cond
void setClient(QXmppClient* client);