[Rhythmbox-devel] Python SIGSEGV



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



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