[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/network/kcall
From: George Kiagiadakis <gkiagiad () csd ! uoc ! gr>
Date: 2009-06-12 14:23:57
Message-ID: 1244816637.657501.26733.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 980789 by gkiagia:
Add initial support for making calls using telepathy-farsight.
M +70 -10 callwindowpart/CMakeLists.txt
A callwindowpart/abstractmediahandler.cpp [License: LGPL (v2.1+)]
A callwindowpart/abstractmediahandler.h [License: LGPL (v2.1+)]
M +82 -0 callwindowpart/callwindowpart_p.cpp
M +9 -0 callwindowpart/callwindowpart_p.h
A callwindowpart/farsight (directory)
A callwindowpart/farsight/mediadevices.cpp [License: LGPL (v2.1+)]
A callwindowpart/farsight/mediadevices.h [License: LGPL (v2.1+)]
A callwindowpart/farsight/mediahandler.cpp [License: LGPL (v2.1+)]
A callwindowpart/farsight/mediahandler.h [License: LGPL (v2.1+)]
A cmake/modules/FindDbusGlib.cmake
M +6 -2 cmake/modules/FindTelepathyQt4.cmake
A cmake/modules/FindTpFarsight.cmake
--- trunk/playground/network/kcall/callwindowpart/CMakeLists.txt #980788:980789
@@ -1,14 +1,74 @@
-include_directories(${KDE4_INCLUDES} ${TELEPATHY_QT4_INCLUDE_DIR} \
${CMAKE_CURRENT_BINARY_DIR}) +macro_optional_find_package(GStreamer)
+macro_log_feature(GSTREAMER_FOUND "GStreamer" "gstreamer 0.10 is required for kcall"
+ "http://gstreamer.freedesktop.org/modules/" \
FALSE "0.10")
-set(callwindowpart_SRCS
- callwindowpart.cpp
- callwindowpart_p.cpp
- pendingoutgoingcall.cpp
-)
+macro_optional_find_package(GObject)
+macro_optional_find_package(GLIB2)
+macro_log_feature(GOBJECT_FOUND "GObject" "GObject is required for kcall"
+ "http://www.gtk.org/download/" FALSE)
-kde4_add_plugin(kcall_callwindowpart ${callwindowpart_SRCS})
-target_link_libraries(kcall_callwindowpart ${KDE4_KPARTS_LIBS} \
${TELEPATHY_QT4_LIBRARIES}) +macro_optional_find_package(TpFarsight)
+macro_log_feature(TPFARSIGHT_FOUND "telepathy-farsight" "telepathy-farsight is \
required for kcall" + \
"http://telepathy.freedesktop.org/releases/telepathy-farsight/" FALSE "0.0.4")
-install(TARGETS kcall_callwindowpart DESTINATION ${PLUGIN_INSTALL_DIR})
-install(FILES kcall_callwindowpart.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+
+# dbus-glib and libxml2 are not really used, but headers from other libs include \
stuff from those, +# so we need their INCLUDE_DIR variable
+macro_optional_find_package(DbusGlib)
+macro_log_feature(DBUSGLIB_FOUND "dbus-glib" "dbus-glib is required for kcall"
+ "http://dbus.freedesktop.org/releases/dbus-glib/" \
FALSE) +
+macro_optional_find_package(LibXml2)
+macro_log_feature(LIBXML2_FOUND "LibXml2" "LibXml2 is required for kcall"
+ "http://xmlsoft.org/downloads.html" FALSE)
+
+include(CheckCXXSourceCompiles)
+set(CMAKE_REQUIRED_INCLUDES ${KDE4_INCLUDES})
+check_cxx_source_compiles("
+#include <QtCore/QtGlobal>
+int main()
+{
+#if defined(QT_NO_GLIB)
+#error \"Qt was compiled with Glib disabled\"
+#endif
+return 0;
+}"
+QT4_GLIB_SUPPORT)
+
+if (NOT QT4_GLIB_SUPPORT)
+ message(STATUS "WARNING: Qt4 is compiled without glib support. kcall will not \
work properly!") +endif (NOT QT4_GLIB_SUPPORT)
+
+if (GSTREAMER_FOUND AND GOBJECT_FOUND AND TPFARSIGHT_FOUND AND DBUSGLIB_FOUND AND \
LIBXML2_FOUND) + set(BUILD_KCALL_CALLWINDOWPART TRUE)
+else (GSTREAMER_FOUND AND GOBJECT_FOUND AND TPFARSIGHT_FOUND AND DBUSGLIB_FOUND AND \
LIBXML2_FOUND) + set(BUILD_KCALL_CALLWINDOWPART FALSE)
+endif (GSTREAMER_FOUND AND GOBJECT_FOUND AND TPFARSIGHT_FOUND AND DBUSGLIB_FOUND AND \
LIBXML2_FOUND) +
+
+if (BUILD_KCALL_CALLWINDOWPART)
+ include_directories(${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} \
${DBUSGLIB_INCLUDE_DIR} + ${LIBXML2_INCLUDE_DIR} \
${TPFARSIGHT_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +
+ set(callwindowpart_SRCS
+ callwindowpart.cpp
+ callwindowpart_p.cpp
+ pendingoutgoingcall.cpp
+ abstractmediahandler.cpp
+ farsight/mediadevices.cpp
+ farsight/mediahandler.cpp
+ )
+
+ kde4_add_plugin(kcall_callwindowpart ${callwindowpart_SRCS})
+ target_link_libraries(kcall_callwindowpart
+ ${KDE4_KPARTS_LIBS}
+ ${TELEPATHY_QT4_LIBRARIES}
+ ${TELEPATHY_QT4_FARSIGHT_LIBRARIES}
+ ${GSTREAMER_LIBRARIES}
+ ${GOBJECT_LIBRARIES}
+ ${TPFARSIGHT_LIBRARIES})
+
+ install(TARGETS kcall_callwindowpart DESTINATION ${PLUGIN_INSTALL_DIR})
+ install(FILES kcall_callwindowpart.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+endif (BUILD_KCALL_CALLWINDOWPART)
--- trunk/playground/network/kcall/callwindowpart/callwindowpart_p.cpp #980788:980789
@@ -16,6 +16,7 @@
*/
#include "callwindowpart_p.h"
#include "pendingoutgoingcall.h"
+#include "abstractmediahandler.h"
#include <KDebug>
#include <KLocalizedString>
#include <KAction>
@@ -83,6 +84,7 @@
connect(new PendingOutgoingCall(contact, this),
SIGNAL(finished(Tp::PendingOperation*)),
SLOT(pendingOutgoingCallFinished(Tp::PendingOperation*)));
+ m_contact = contact;
}
void CallWindowPartPrivate::pendingOutgoingCallFinished(Tp::PendingOperation *op)
@@ -106,6 +108,9 @@
connect(pr, SIGNAL(finished(Tp::PendingOperation*)),
SLOT(onChannelReady(Tp::PendingOperation*)));
+ connect(m_channel.data(),
+ SIGNAL(invalidated(Tp::DBusProxy*, QString, QString)),
+ SLOT(onChannelInvalidated(Tp::DBusProxy*, QString, QString)));
}
void CallWindowPartPrivate::onChannelReady(Tp::PendingOperation *op)
@@ -117,6 +122,44 @@
return;
}
+ if ( m_channel->handlerStreamingRequired() ) {
+ kDebug() << "Creating farsight channel";
+ AbstractMediaHandler::create(m_channel, this);
+ }
+
+ connect(m_channel.data(),
+ SIGNAL(streamAdded(Tp::MediaStreamPtr)),
+ SLOT(onStreamAdded(Tp::MediaStreamPtr)));
+ connect(m_channel.data(),
+ SIGNAL(streamRemoved(Tp::MediaStreamPtr)),
+ SLOT(onStreamRemoved(Tp::MediaStreamPtr)));
+ connect(m_channel.data(),
+ SIGNAL(streamDirectionChanged(Tp::MediaStreamPtr, \
Tp::MediaStreamDirection, + \
Tp::MediaStreamPendingSend)), + \
SLOT(onStreamDirectionChanged(Tp::MediaStreamPtr, Tp::MediaStreamDirection, + \
Tp::MediaStreamPendingSend))); + connect(m_channel.data(),
+ SIGNAL(streamStateChanged(Tp::MediaStreamPtr, Tp::MediaStreamState)),
+ SLOT(onStreamStateChanged(Tp::MediaStreamPtr, Tp::MediaStreamState)));
+
+ Tp::MediaStreams streams = m_channel->streams();
+ kDebug() << streams.size();
+
+ foreach (const Tp::MediaStreamPtr &stream, streams) {
+ kDebug() << " type:" <<
+ (stream->type() == Tp::MediaStreamTypeAudio ? "Audio" : "Video");
+ kDebug() << " direction:" << stream->direction();
+ kDebug() << " state:" << stream->state();
+
+ // onStreamDirectionChanged(stream, stream->direction(), \
stream->pendingSend()); + // onStreamStateChanged(stream, stream->state());
+ }
+
+ if ( streams.size() == 0 && !m_contact.isNull() ) {
+ //HACK remove this from here
+ m_channel->requestStream(m_contact, Tp::MediaStreamTypeAudio);
+ }
+
if ( m_channel->awaitingRemoteAnswer() ) {
setState(Ringing);
} else {
@@ -124,6 +167,45 @@
}
}
+void CallWindowPartPrivate::onChannelInvalidated(Tp::DBusProxy *proxy, const QString \
&errorName, + const QString \
&errorMessage) +{
+ Q_UNUSED(proxy);
+ kDebug() << "channel became invalid:" << errorName << errorMessage;
+ setState(Error, errorMessage);
+}
+
+void CallWindowPartPrivate::onStreamAdded(const Tp::MediaStreamPtr & stream)
+{
+ kDebug() << (stream->type() == Tp::MediaStreamTypeAudio ? "Audio" : "Video") << \
"stream created"; + kDebug() << " direction:" << stream->direction();
+ kDebug() << " state:" << stream->state();
+ kDebug() << " pending send:" << stream->pendingSend();
+}
+
+void CallWindowPartPrivate::onStreamRemoved(const Tp::MediaStreamPtr & stream)
+{
+ kDebug() << (stream->type() == Tp::MediaStreamTypeAudio ? "Audio" : "Video") << \
"stream removed"; +}
+
+void CallWindowPartPrivate::onStreamDirectionChanged(const Tp::MediaStreamPtr & \
stream, + \
Tp::MediaStreamDirection direction, + \
Tp::MediaStreamPendingSend pendingSend) +{
+ kDebug() << (stream->type() == Tp::MediaStreamTypeAudio ? "Audio" : "Video") <<
+ "stream direction changed to" << direction;
+ kDebug() << "pending send:" << pendingSend;
+}
+
+void CallWindowPartPrivate::onStreamStateChanged(const Tp::MediaStreamPtr & stream,
+ Tp::MediaStreamState state)
+{
+ kDebug() << (stream->type() == Tp::MediaStreamTypeAudio ? "Audio" : "Video") <<
+ "stream state changed to" << state;
+ kDebug() << " pending send:" << stream->pendingSend();
+}
+
+
void CallWindowPartPrivate::hangupCall()
{
Q_ASSERT(!m_channel.isNull() && m_state != HangingUp && m_state != Disconnected \
&& m_state != Error);
--- trunk/playground/network/kcall/callwindowpart/callwindowpart_p.h #980788:980789
@@ -46,12 +46,21 @@
private slots:
void pendingOutgoingCallFinished(Tp::PendingOperation *op);
void onChannelReady(Tp::PendingOperation *op);
+ void onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName,
+ const QString &errorMessage);
+ void onStreamAdded(const Tp::MediaStreamPtr & stream);
+ void onStreamRemoved(const Tp::MediaStreamPtr & stream);
+ void onStreamDirectionChanged(const Tp::MediaStreamPtr & stream,
+ Tp::MediaStreamDirection direction,
+ Tp::MediaStreamPendingSend pendingSend);
+ void onStreamStateChanged(const Tp::MediaStreamPtr & stream, \
Tp::MediaStreamState state); void hangupCall();
void onChannelClosed(Tp::PendingOperation *op);
private:
CallWindowPart *const q_ptr;
+ Tp::ContactPtr m_contact;
Tp::StreamedMediaChannelPtr m_channel;
State m_state;
KAction *m_hangupAction;
--- trunk/playground/network/kcall/cmake/modules/FindTelepathyQt4.cmake \
#980788:980789 @@ -15,14 +15,18 @@
endif (TELEPATHY_QT4_INCLUDE_DIR AND TELEPATHY_QT4_LIBRARIES)
find_path (TELEPATHY_QT4_INCLUDE_DIR
- NAMES TelepathyQt4/Client/Channel TelepathyQt4/Client/Connection \
TelepathyQt4/Types + NAMES TelepathyQt4/Channel TelepathyQt4/Connection \
TelepathyQt4/Types PATHS ${CMAKE_INSTALL_PREFIX}/include/telepathy-1.0
)
find_library (TELEPATHY_QT4_LIBRARIES
NAMES telepathy-qt4
PATHS ${CMAKE_INSTALL_PREFIX}/lib
)
+find_library (TELEPATHY_QT4_FARSIGHT_LIBRARIES
+ NAMES telepathy-qt4-farsight
+ PATHS ${CMAKE_INSTALL_PREFIX}/lib
+)
include (FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS (TELEPATHY_QT4 DEFAULT_MSG
- TELEPATHY_QT4_LIBRARIES \
TELEPATHY_QT4_INCLUDE_DIR) + \
TELEPATHY_QT4_LIBRARIES TELEPATHY_QT4_FARSIGHT_LIBRARIES TELEPATHY_QT4_INCLUDE_DIR)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic