[final report] Music sharing in Banshee using Telepathy [banshee-soc]



Well, I guess my announcement that the previous week's report was my
last was a little premature. With that being said, I am pleased to
present you with my REAL final GSoC report.

=== GIT shortlog for last week ===

      Clean up using statements
      Add BaseWebServer.Start(int) method
      Reset status message if "Share Currently Playing" = false
      Minor refactoring in TelepathyActions
      Robustify
      Clean-up, more argument checking, etc.
      Fix property setting in ContactSource
      Fixes
      Some cleanup, refactoring
      Fix streaming when user selects a source other than contact one
      More fixes
      Fix exception messages
      Add const for metadata chunk length
      Clean up, null checks
      Argument checking in BaseWebServer
      Create BaseWebServer class and have DAAP implement it
      Allow seeking in DAAP streams
      Use modified BaseWebServer
      Huge improvement in downloading metadata
      Some clean-up related to previous commit
      Change wording of loading tracks message
      Grey out 'Download Track(s)' if contact does not allow
      Fix up Catalog.GetString calls
      Smarten up Currently Playing announcements
      Fix up stupido Catalog.GetString mix up
      Prevent exception during TelepathyService.Dispose
      Restrict ContactSourceContents display to 1 column
      Throw exception if Download is already processing
      Make DownloadMonitor dictionaries readonly
      Add null check to TelepathyActions.OnTrackActionsActivated
      Use ThreadPool for transfers
      Call StartQueued asynchronously

=== Highlights for last week ===

* Gave my "Share Currently Playing" feature a smarter brain. It will
now reset to display the user's presence on Empathy if playback is
paused. Announcements then restart when playback is resumed. Also, the
announcement is reset to display the user's presence when Banshee
quits.

* Submitted 2 patches for review:
    - a base web server class that gets implemented by my extension
and DAAP. [0]
    - enable seeking in DAAP streams [1]

* Disable 'Download Track' option on the client side if the user
serving tracks has 'Allow Downloads' disabled.

* Improved downloading of library metadata. User feedback is now much
faster and the UI is updated more often.

* Some improvements in the file transfer logic that prevent
sluggishness when a lot of transfers are in progress / queued.

* Lots of tests, fixes, tweaks, etc.

=== So, what the heck is this thing, anyway? ===

Well, what I have created is a Telepathy based extension for Banshee.
Using the Telepathy API, the extension provides the following
features:

* Download your friends' Banshee library metadata and check out what they
  listen to, their ratings, BPM values, etc.

* View your friends' playlists and export them to disk

* Share what you're listening to with all your instant messaging friends by
  advertising the track, artist, and album of the currently playing track in
  Empathy's status message. This can be toggled on / off

* Download your friends' music; one track at a time or a selection. You can
  cancel ones in progress, queued, individually or all at once. The sender
  has the option to cancel all in progress / queued only. Both sender and
  receiver get a progress bar. File sharing can be toggled on / off

* Stream your friends' music. Streaming can be toggled on / off.

=== Where to get it ===

Right now, it's being hosted on Github as a personal branch of the
entire Banshee source [2]. In the near future, I'd like to package
this up as a standalone extension to make it easier for users to
install on top of their existing Banshee installations. I actually
already have a start on this, but it's not quite up to date [3].

To be safe, please backup your Db first:
cp ~/.config/banshee-1/banshee.db ..............

Don't worry too much. I have not damaged mine over the entire course of SoC.

=== Requirements ===

* telepathy-gabble >= 0.7.28
* empathy >= 2.26.1, recommended >= 2.27.3
* libndesk-dbus = git master -> git-clone git://git.ndesk.org/pub/scm/dbus-sharp

The dependency on NDesk.DBus git master is not ideal. But, it is
necessary for this to work. The main thing is that GIT master gives
support for out parameters.

I've been using it the entire summer without any problems.

=== Known Issues ===

I have written in more detail about known issues in my README [4].
However, I will briefly summarized the major ones here:

* Transfer speeds are highly dependent on the Telepathy framework's ability
  to establish a P2P connection. If traffic goes through Jabber servers, be
  prepared for a highly sluggish experience. In testing, use on a LAN
is very quick.
  See https://bugs.freedesktop.org/show_bug.cgi?id=22930

* The Empathy trayicon will display a blinking lightning bolt when there is
  a file transfer. Clicking it will display a dialog box for accepting/
  rejecting the transfer. Using this will cause unpredictable results.
  Telepathy Mission Control 5 will allow this to be suppressed.

* This extension will overwrite any existing Telepathy capabilities being
  advertised. This is due to the ContactCapabilities.SetSelfCapabilities
  interface performing a replace operation and not an append. Mission Control
  5 will allow this process to work correctly.

=== The Future ===

Once Empathy migrates to Mission Control 5 (latest release currently
uses 4.67), the extension will have to be brought up to date. This
will not be a trivial thing. It will be some work, but nothing to
really cry about.

I would love for this work to someday be merged into the Banshee
source for distribution as a default extension. I intend to keep my
extension current and stable. In fact, I already have some ideas for
new features for the Telepathy extension.

=== Last Words ===

First off, I want to thank GNOME and Google for giving me this awesome
opportunity. Secondly, I want to thank the entire Banshee community,
especially my mentor, Bertrand Lorentz, for the help over the last few
months. You guys really care about your product, and it shows, as
Banshee is awesome!

While slightly intimidated by the Banshee source at first, I am very
pleased with my work. I think the highlight of my summer was when I
was working on the streaming code and had my first successful test. It
was literally music to my ears. :) While streaming was not one of my
deliverables, I am really glad that I was able to work on it. Now, I'm
using it on a daily basis!

I learned a ton this summer, especially since I had barely touched C#
before. Namely, I learned a lot about framework design, event
processing, threading, DBus, the Telepathy API, and, of course, the
Banshee codebase. In fact, as SoC progressed, and I learned more, I
was able to go back and make improvements, such as the speedier
metadata downloading and file transfers.

Anyway, I've babbled long enough. Don't worry. This isn't a
disappearing act. I intend on staying active in the Banshee and other
FOSS communities. Thank you all for a great summer!

[0] http://bugzilla.gnome.org/show_bug.cgi?id=591481
[1] http://bugzilla.gnome.org/show_bug.cgi?id=547719
[2] http://github.com/nloko/banshee/tree/gsoc
[3] http://github.com/nloko/banshee/blob/02189ddfe94fc29c82de1890547e6380a1dbb6c3/src/Extensions/Banshee.Telepathy/README
[4] http://github.com/nloko/banshee-telepathy-extension/tree/master


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]