[rhythmbox] lyrics: add extra metadata handling so other plugins can request lyrics
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rhythmbox] lyrics: add extra metadata handling so other plugins can request lyrics
- Date: Sun, 25 Oct 2009 11:00:27 +0000 (UTC)
commit 162342477004ef1c5582d199916bbf9f27bf79fd
Author: Jonathan Matthew <jonathan d14n org>
Date: Sun Oct 25 20:58:46 2009 +1000
lyrics: add extra metadata handling so other plugins can request lyrics
Also rearrange some code to simplify things a little.
plugins/lyrics/lyrics/__init__.py | 82 ++++++++++++++++++++++---------------
1 files changed, 49 insertions(+), 33 deletions(-)
---
diff --git a/plugins/lyrics/lyrics/__init__.py b/plugins/lyrics/lyrics/__init__.py
index d4a31e6..16aa2cf 100644
--- a/plugins/lyrics/lyrics/__init__.py
+++ b/plugins/lyrics/lyrics/__init__.py
@@ -293,8 +293,9 @@ class LyricPane(object):
class LyricWindow (gtk.Window):
- def __init__(self):
+ def __init__(self, shell):
gtk.Window.__init__(self)
+ self.shell = shell
self.set_border_width(12)
close = gtk.Button(stock=gtk.STOCK_CLOSE)
@@ -306,13 +307,34 @@ class LyricWindow (gtk.Window):
bbox.set_layout(gtk.BUTTONBOX_END)
bbox.pack_start(close)
lyrics_view.pack_start(bbox, expand=False)
+
+ sp = shell.get_player ()
+ self.ppc_id = sp.connect('playing-song-property-changed', self.playing_property_changed)
self.add(lyrics_view)
self.set_default_size(400, 300)
self.show_all()
- def s_title(self, title, artist):
+ def destroy(self):
+ sp = self.shell.get_player ()
+ sp.disconnect (self.ppc_id)
+ gtk.Window.destroy(self)
+
+ def playing_property_changed(self, player, uri, prop, old_val, new_val):
+ if (prop == STREAM_SONG_TITLE):
+ self.update_song_lyrics(player.get_playing_entry())
+
+
+ def __got_lyrics(self, text):
+ self.buffer.set_text (text)
+
+ def update_song_lyrics(self, entry):
+ db = self.shell.props.db
+ (artist, title) = get_artist_and_title(db, entry)
self.set_title(title + " - " + artist + " - " + _("Lyrics"))
+ lyrics_grabber = LyricGrabber(db, entry)
+ lyrics_grabber.search_lyrics(self.__got_lyrics)
+
class LyricsDisplayPlugin(rb.Plugin):
@@ -336,12 +358,14 @@ class LyricsDisplayPlugin(rb.Plugin):
uim.ensure_update ()
sp = shell.get_player ()
- self.ppc_id = sp.connect('playing-song-property-changed', self.playing_property_changed)
self.pec_id = sp.connect('playing-song-changed', self.playing_entry_changed)
self.playing_entry_changed (sp, sp.get_playing_entry ())
self.csi_id = shell.connect('create_song_info', self.create_song_info)
+ db = shell.props.db
+ self.lyric_req_id = db.connect_after ('entry-extra-metadata-request::rb:lyrics', self.lyrics_request)
+
def deactivate (self, shell):
uim = shell.get_ui_manager()
@@ -351,11 +375,13 @@ class LyricsDisplayPlugin(rb.Plugin):
self.action_group = None
self.action = None
- sp = shell.get_player ()
+ sp = self.shell.get_player ()
sp.disconnect (self.ppc_id)
- sp.disconnect (self.pec_id)
+
shell.disconnect (self.csi_id)
+ self.props.db.disconnect (self.lyric_req_id)
+
if self.window is not None:
self.window.destroy ()
self.window = None
@@ -367,30 +393,6 @@ class LyricsDisplayPlugin(rb.Plugin):
dialog.present()
return dialog
- def playing_property_changed(self, player, uri, prop, old_val, new_val):
- if (prop == STREAM_SONG_TITLE):
- self.update_song_lyrics(player.get_playing_entry())
-
-
- def playing_entry_changed (self, sp, entry):
- if entry is not None:
- self.action.set_sensitive (True)
- self.update_song_lyrics(entry)
- else:
- self.action.set_sensitive (False)
-
- def __got_lyrics(self, text):
- # don't do anything if the window has already been destroyed
- if self.window is not None:
- self.window.buffer.set_text (text)
-
- def update_song_lyrics(self, entry):
- if self.window is not None:
- db = self.shell.get_property ("db")
- (artist, title) = get_artist_and_title(db, entry)
- self.window.s_title(title, artist)
- lyrics_grabber = LyricGrabber(db, entry)
- lyrics_grabber.search_lyrics(self.__got_lyrics)
def show_song_lyrics (self, action, shell):
@@ -398,20 +400,34 @@ class LyricsDisplayPlugin(rb.Plugin):
self.window.destroy ()
self.window = None
- db = shell.get_property ("db")
sp = shell.get_player ()
entry = sp.get_playing_entry ()
if entry is not None:
- self.window = LyricWindow()
+ self.window = LyricWindow(shell)
self.window.connect("destroy", self.window_deleted)
- self.update_song_lyrics( entry )
+ self.window.update_song_lyrics(entry)
+
+ def playing_entry_changed (self, sp, entry):
+ if entry is not None:
+ self.action.set_sensitive (True)
+ if self.window is not None:
+ self.window.update_song_lyrics(entry)
+ else:
+ self.action.set_sensitive (False)
def window_deleted (self, window):
print "lyrics window destroyed"
self.window = None
def create_song_info (self, shell, song_info, is_multiple):
-
if is_multiple is False:
x = LyricPane(shell.get_property ("db"), song_info)
+
+ def lyrics_request (self, db, entry):
+ def lyrics_results(text):
+ db.emit_entry_extra_metadata_notify (entry, 'rb:lyrics', text)
+
+ lyrics_grabber = LyricGrabber(db, entry)
+ lyrics_grabber.search_lyrics(lyrics_results)
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]