KDE has never had some good software for communication with audio and video. As technology is evolving, there is a higher demand for communication means like this. Most KDE users nowadays use alternatives like ekiga and skype to communicate with their friends with audio and video. This project aims at addressing this need and thus creating a VoIP client software for KDE that supports audio and video communication with other people and that makes use of the telepathy framework.
I am quite new to KDE. I started tracking development about one year ago, while I was preparing to apply for last year's gsoc (which I didn't do eventually). Since July, I have been a member of the KDE bugsquad and I have also fixed some bugs myself. All this time I wanted to get involved in KDE development, but so far I haven't settled doing something in particular, just bugfixes here and there while looking for something that interests me. Now, I think that it is time to start doing something interesting and useful for KDE, and GSOC is a perfect motivation for me to start work. I have always been interested in some new KDE technologies like telepathy, phonon and nepomuk, so that gives me the motivation to do something related to telepathy now, so that I can learn how it works, explore its features and prepare myself to possibly help with its development in the future.
This project aims at creating a VoIP desktop client software that can compete with popular alternatives like skype and ekiga. This will not be a new software, though; I am going to revive KCall for this purpose.
KCall is an old software that has not been worked much during the past years. The last version of it, which can be found in KDE playground, is just a simple GUI interface that uses the QtTapioca library to build the VoIP communication core that uses telepathy. In this state, it is not even compilable, as QtTapioca has changed in the past years and is also deprecated in favour of the new telepathy-qt4 library. So, the first phase of my project involves porting this software to use telepathy-qt4.
In the second phase, I will attempt to polish the code and the gui as much as possible and add video support. Video support involves creating the necessary widgets for showing and managing video streams and add functionality to KCall's core so that it can also request video streams from a connection manager upon user request for a specified call (channel).
The whole implementation will also use the telepathy-farsight library, which is the preffered way to handle streaming audio and video in telepathy. Unfortunately this library makes use of glib, gobject and gstreamer, so I will try to be very careful to separate this code from the rest of KCall, in case we want to port this code to use some native Qt/KDE library in the future.
The goal is to make it usable by end-users, so any bits of detail missing here and there should be fixed (configuration dialogs, status messages, etc...). Currently, it seems to be missing configuration options, so I will have to make things configurable in the code (whatever makes sense to be configurable), using KConfigXT, and add a ui dialog for configuring them. A dialog will also need to be added for configuring notifications (using KDE's standard "configure notifications" dialog). In addition, the main window needs some work to make it smaller and more usable. The intention of the original KCall authors was obviously to make it a big main window, like in kmail for example, but I think it would be better to have something more compact, like ekiga and skype. Furthermore, the contacts list and the call history list will need a better ui than a plain QTableView. I don't plan to make an awesome view for them, as that would take much more time than what I have, but I plan to make them look a bit better. This could simply be done by using a QListView with a model that provides icons that correspond to the status of the contact for DecorationRole, the names of the contacts for DisplayRole and tooltips with the rest of the information for ToolTipRole.
KCall will implement the Telepathy Client D-Bus interface using the telepathy-qt4 library. With this interface, it will be connected to the Telepathy Channel Dispatcher daemon and then it will register itself as an audio and video channel handler, so that it can be invoked by the Channel Dispatcher to handle incoming calls. It will also register itself as a Client Approver to be able to let the user decide whether to accept or not an incoming call. On incoming calls, it will use KNotify to notify the user about it and let him decide what to do.
Furthermore, it will get lists of available contacts from the currently active telepathy connections by quering for them over D-Bus and filtering the contacts that support audio/video communication. It will also fetch contacts with phone numbers from the standard KDE address book (using libkabc) and allow the user to call those numbers too over SIP, if SIP is available (the KDE address book integration is already implemented actually, this is how KCall used to work in the past).
When the user requests a call, it will request an audio and/or video channel to the requested contact through the Channel Dispatcher. Once a call is established (i.e. a communication channel is created), it will present the user with a UI to control this call and show video (both preview of the video that the user sends and the video that is received over the stream).
Of course, all the communication with other telepathy components over D-Bus that I mentioned above will be all implemented using the telepathy-qt4 library.
Read the documentation of telepathy-qt4 and QtTapioca and study exactly what changes need to be done to the existing code.
Start taking away QtTapioca code from KCall to make it compile with only the GUI.
Rewrite the removed code using telepathy-qt4 and fix everything related to voice communication, including contact list handling, making calls and receiving calls.
Work a bit on improving the layout of the main window and the contacts and call history lists.
Add video support.
Ui improvements, polishing and bug fixing. Add configuration options, etc... Make it suitable for end-users.