Tracking two different versions for Ocarina and libsaria was too much
work. From now on, Ocarina and libsaria will have the same version.
Ocarina's version string will be set based on libsaria.
Right now, I am calling it body.py. When I am done, I won't have to go
through ocarina/__init__.py to access the tabs. Instead, I will just
have to import ocarina.body.
We only have one instance of the main tabs, so there is no reason for it
to be a class. I have changed this into a set of functions that do
everything the old class did.
The main tabs now have a generic TabPage class that contains the content
added to the tab. This TabPage will control visibility of the content
and make it easier to find a page with specific content (no looping
through gtk boxes!)
Libsaria events now support starting specific callback functions in a
background thread. This replaces starting a specific event in the
background.
I have a library tab that is added to the main window through use of the
ocarina.add_tab function.
I have new tests for walking the tree and running multiple threads with
locks.
The web radio plugin can load pandora and grooveshark. This happens
when a web radio tab is selected. After the web document is loaded,
playing music will be paused.