Autumn is Coming…

With summer nearly over a summary of my effort is in order. First up are the improvements to Banshee’s Media Transport Protocol support.

Please Try Again

I showed a similar screenshot to the one below some time ago. After some massaging by Andrés and I this is the final result, as depicted by an Ubuntu Trusty Tahl system. I’ll be proud indeed when this quite significant visual component appears in the public repositories!

In addition to the visual element, the same patch prevents Banshee from interfering with the desktop’s automatic mounting system and allows us to give the user quick feedback in cases where we’re not able to initialize his device.

There are a few other changes in the pipeline ranging from improving the feedback during an MTP device’s connection process [1] to a small but quite important revision in the way we deal with disconnection [2] but this one is by far the most important for every day use.

Device Unavailable

One Page to Rule Them All

Aside from a couple of patches required in dbus-sharp [3,4] to make this work, Bluetooth synchronisation is off the stove and cooling on the sideboard.

With respect to the project’s original goal I think we’ve succeeded, we do indeed provide the capability to synchronise a media player wirelessly and unsupervised. Unfortunately there’s not much to show, since I was able to re-use a whole lot of existing Banshee components.

I showed a screenshot of my connected GT-I9100 in a previous post where I talked about making the system ready for everyday use, to that end it has grown a retry mechanism employed when the connection fails and many improvements when identifying files that the user already has in his library, finished off with a sprinkle of concurrency.

So things are no different when the device is connected, but how exactly would one connect a Bluetooth Digital Audio Player? Simple enough, the below screenshot is a graphical hardware manager. I hadn’t thought about it much, but it’s design follows that of a Single Page Application. Status, configuration and control are bundled into the same display.

Bluetooth Manager Overview

Top left, in bold,
shows the names of your Bluetooth adapters.
whether any of your adapters are discovering.
as above but for powered status.
In yellow,
pair your device.
In red,
enable sheduled synchronisation.
In teal,
connect the device and view tracks.
In purple,
connect the device as an audio source.
In blue,

as above, but as a headset.
In green,

as above, but as speakers.

The following shot shows the interface in full swing, the reactive elements can be seen in the form of the emboldened device alias signifying that the device is connected, the toggled status of each of the connection buttons and presence of the time input control for entering the desired synchronisation time.

Bluetooth Manager Details

Last weekend, the folks at Gentoo declared Gnome 3.12 stable in portage. In the aftermath I noticed that Banshee’s volume control slider (GtkVolumeControl) is now implemented as a Popover and looks great, so I started looking to find where I could get at one in gtk-sharp.

After fruitlessly trying to regenerate my .NET bindings for GTK+ I spent many hours abusing the venerable GtkMenu before finally succumbing and doing the Platform Invoke, elliciting a roar of victory when one finally appeared on my screen…

To explain; your Bluetooth device presents an interface with which you can remotely control the media playing on it. Prior to using a Popover, the playback controls were in an ugly, long, left aligned line separated by a vast expanse of nothing until the right aligned volume up and down buttons, taking a whole lot of unnecessary space for something you might only use every now and again.

Hypothetical Questions and Some Answers

  • If I have more than one Bluetooth adapter, what does toggling the power and discovery buttons do?
  • They affect all of your adapters.
  • Why do you provide a button for pairing, but not for unpairing?
  • Because sometimes following pairing, the list of profiles reported by the device is updated so it’s handy to be able to do that from Banshee. If it weren’t for that fact the pair function would not be present.
  • What’s the point of the headset, speaker and microphone buttons?
  • They are shortcuts. You could open Gnome’s settings and do the same thing but if you’re listening to music anyway, why should you have to do that?
  • Scheduling sucks. Why don’t you connect to a device automatically when it’s in range?
  • Unless the device is visible, even in the case of Android devices which have Only visible to paired devices as their unannounced state, we have no way of knowing when a device is in range. Furthermore, we’d need to be discovering devices at all times for it to work which can only be detrimental to energy consumption.
  • The volume control buttons in the Popover don’t work, what gives?
  • Not a scoob, they don’t work for me either.

Life, Career, Love

Summer may be nearly over, but Banshee contributions will keep coming of course, the program has helped me learn C# thoroughly and has now allowed me to use a functional language in every day programming, as opposed to just within an abstract academic appliance.

If I could do Summer of Code over again, the one difference I would make is GUADEC attendance. The opportunities for networking within the Free software community would have been invaluable for the career I’ve managed to put off for so long.

Unfortunately I won’t be able to remedy the situation through Google next year as I managed to complete university with a pleasing result, so instead I’ll be slinging my hook, rather haphazardly, in the hope of catching employment.

That said, I hope to meet you all in years to come.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s