Hello! I've been trying to develop a simple plugin for Rhythmbox. I tested it with Python console and it worked good though the code is as hideous a hack as it could possibly be. However after wrapping it up as a fully fashioned Python Plugin it not only stopped working but also started segfaulting RB itself! I have posted a bug[1] at the bugzilla (marking it critical, because breaking a player from a plugin subsystem I consider a critical bug) but there was absolutely no response for it, so I repost it here. I attach the code in hope that somebody could tell me either how to do it correctly or what to fix in RB in order for it to start working. Prior to segfaulting RB spawns lots of GObject errors too, which are attached to the bugreport. Cheers, Piotr Gaczkowski [1] http://bugzilla.gnome.org/show_bug.cgi?id=469524
import rhythmdb, rb import gtk import random ui_str = """ <ui> <menubar name="MenuBar"> <menu name="ControlMenu" action="Control"> <menuitem name="RandomArtist" action="RandomArtist"/> <menuitem name="RandomAlbum" action="RandomAlbum"/> </menu> </menubar> </ui> """ class Randomizer(rb.Plugin): def __init__(self): rb.Plugin.__init__(self) def activate(self, shell): self.shell = shell self.artist_action = gtk.Action ('RandomArtist', _('Random Artist'), _(''), None) self.activate_id = self.artist_action.connect ('activate', self.random_artist, shell) self.album_action = gtk.Action ('RandomAlbum', _('Random Album'), _(''), None) self.activate_id = self.album_action.connect ('activate', self.random_album, shell) self.action_group = gtk.ActionGroup ('RandomizerPluginActions') self.action_group.add_action_with_accel (self.artist_action, "<control>T") self.action_group.add_action_with_accel (self.album_action, "<control>M") uim = shell.get_ui_manager () uim.insert_action_group (self.action_group, 0) self.ui_id = uim.add_ui_from_string (ui_str) uim.ensure_update () self.db = self.shell.props.db self.source = self.shell.props.library_source self.artists = list() self.albums = list() def deactivate(self, shell): del self.shell del self.db del self.source del self.artists del self.albums pass def random_artist(self, action, shell): print "Enter random_artist" for row in self.source.props.query_model: entry = row[0] self.artists.append(self.db.entry_get(entry, rhythmdb.PROP_ARTIST)) random_artist = random.choice(self.artists) print random_artist for view in self.source.get_property_views(): if view.props.prop == rhythmdb.PROP_ARTIST: print view print view.props.title print view.props.prop print view.set_selection print "And now set_selection()" view.set_selection([random_artist]) def random_album(self, action, shell): for row in self.source.props.query_model: entry = row[0] self.albums.append(self.db.entry_get(entry, rhythmdb.PROP_ALBUM)) random_album = random.choice(self.albums) for view in self.source.get_property_views(): if view.props.prop == rhythmdb.PROP_ALBUM: view.set_selection([random_album])
[RB Plugin] Loader=python Module=randomizer IAge=1 Name=Music randomizer Description=This plugin randomizes artists or albums Authors=Piotr Gaczkowski <doomhammerng gmail com> Copyright=Copyright © 2007 Piotr Gaczkowski Website=http://doomhammer.jogger.pl
Attachment:
signature.asc
Description: To jest =?UTF-8?Q?cz=C4=99=C5=9B=C4=87?= listu podpisana cyfrowo