[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