Rhythmbox 3 has been released and brings much needed changes around stability.
RB3 has been fully updated with python 3 but more importantly has dropped gstreamer 0.10 support in favour of gstreamer1.0
In english – this means, dropping the old buggy music media layer for the newer well maintained music layer. Hurray and about time!
There is a but though – almost all the external plugins that were available will not work out of the box.
If you are an aspiring python developer here is your chance. Some tips to get plugins working.
First things first:
Look for the .plugin file – edit the file and change the line that reads “Loader=python” and change it to read “Loader=python3”. What this does is force rhythmbox to recognise its a python3 plugin and hence try to run it. For simple plugins, this is likely to be the only thing you need to do.
Converting to python3:
If the above doesnt work (the plugin will not activate successfully), then its likely due to be a python2 issue. Again, help is on hand.
Within the plugin folder, run the following:
2to3 -w *.py
What this does is run through all the code looking for common python2 incompatibilities and converts them to python3 equivalents.
More advanced stuff:
Start rhythmbox from a terminal and deactivate all plugins except the plugin you are interested in. Shutdown and restart. Examine the terminal for errors (if necessary, you may have to continually reactivate the plugin). Often you will see what the error is. Most issues I found were around using unicode and iterator lists.
I have written a compatibility API layer for Coverart-browser which has been used by several developers. It contains several python2 to python3 functions – if you change the incompatible code to use these functions, then the plugin becomes both python2 & python3 compatible i.e. your plugin can remain compatible with older RB versions as well as the latest.
Grab a copy from my Github repo – give the file a unique name i.e. dont call it “coverart_rb3compat.py” !
Good luck – lets get those legacy plugins converted.