def create_configure_dialog(self, dialog=None): if not dialog: dialog = OnlineMusicConfigureDialog().get_dialog() dialog.present() return dialog
class Plugin(rb.Plugin): def __init__(self): self.switch = None self.search = None rb.Plugin.__init__(self) def activate(self, shell): gettext.translation('online_music', self.find_file("locale")).install(True) self.db = shell.props.db self.entry_type = OnlineMusicEntryType(self.db) self.db.register_entry_type(self.entry_type) self.entry_type.get_playback_uri=self.get_playback_uri width, height = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR) icon = gtk.gdk.pixbuf_new_from_file_at_size(self.find_file("32.png"), width, height) self.source = gobject.new (OnlineMusicSource, shell = shell, name = _("Online Muisc"), plugin = self, icon = icon, entry_type = self.entry_type) shell.append_source(self.source, None) shell.register_entry_type_for_source(self.source, self.entry_type) #lyrics init self.showLyrics = ShowLyrics.ShowLyrics(shell) # First lets see if we can add to the context menu ui = shell.get_ui_manager() # Group and it's actions self.action_group = gtk.ActionGroup ('OnlineMusicActions') # Create Actions for the plugin action = gtk.Action ('ReloadMusic', _('Reload'), _('Reload Music'), 'gtk-refresh') activate_id = action.connect ('activate', lambda a: self.source.load_music())#self.source.onlineMusic.activate() self.action_group.add_action (action) # Create switch list action action = gtk.Action ('SwitchList', _('Switch'), _('Switch List'), 'gtk-properties')#gtk-preferences activate_id = action.connect ('activate', lambda a: self.switch_list()) self.action_group.add_action (action) action = gtk.Action('SearchMusic', _('Search'), _('Search Music'), 'gtk-find')#gtk-preferences activate_id = action.connect ('activate', lambda a: self.search_music()) self.action_group.add_action (action) action = gtk.ToggleAction('ShowLyrics', _('Lyrics'), _('Show Lyrics'), 'gtk-justify-center')#gtk-preferences activate_id = action.connect ('toggled', self.showLyrics.show_lyrics_toggled, shell, self.db) self.action_group.add_action (action) ui.insert_action_group(self.action_group, -1) self.shell_ids = ( shell.connect("notify::selected-source", self.showLyrics.notify_selected_source, self.action_group), ) player = shell.get_player() self.player_ids = ( player.connect("elapsed-nano-changed", self.showLyrics.elapsed_nano_changed), player.connect_after("playing-song-changed", self.showLyrics.playing_song_changed, self.db), ) def deactivate(self, shell): for handler_id in self.shell_ids: shell.disconnect(handler_id) player = shell.get_player() for handler_id in self.player_ids: player.disconnect(handler_id) self.showLyrics.notify_selected_source(None, None, self.action_group) self.showLyrics.delete_thyself() self.showLyrics = None ui = shell.get_player().get_property('ui-manager') ui.remove_action_group(self.action_group) self.action_group = None for row in self.source.props.query_model: entry = row[0] self.db.entry_delete(entry) self.db.commit() self.db = None self.entry_type = None self.source.delete_thyself() self.source = None self.switch = None self.search = None def switch_list(self): if not self.switch: self.switch = OnlineMusicConfigureDialog(self, self.source).get_dialog() self.switch.present() def search_music(self): if not self.search: self.search = OnlineMusicSearchDialog(self.source).get_dialog() self.search.present() def get_playback_uri(self, entry): if not entry:return None url = self.db.entry_get (entry, rhythmdb.PROP_LOCATION) if not url.endswith('.mp3'): print 'Load the google music:%s' % url url = Analyze.getSongByURL(url)['url'] if url is not None: self.db.set(entry, rhythmdb.PROP_LOCATION, url) print 'Get google song url: %s' % url return url else: return None else: return url
class Plugin(rb.Plugin): def __init__(self): self.switch = None rb.Plugin.__init__(self) def activate(self, shell): self.db = shell.props.db group = rb.rb_source_group_get_by_name ("online") if not group: group = rb.rb_source_group_register ("online", _("Online"), rb.SOURCE_GROUP_CATEGORY_FIXED) self.entry_type = self.db.entry_register_type("GoogleMusic") self.entry_type.get_playback_uri=self.get_playback_uri theme = gtk.icon_theme_get_default() theme.append_search_path(os.path.join(self.__get_plugins_dir(), "icons")) rb.append_plugin_source_path(theme, "/icons") width, height = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR) icon = rb.try_load_icon(theme, "googlemusic", width, 0) self.source = gobject.new (OnlineMusicSource, shell=shell, entry_type=self.entry_type, source_group=group, name = _("Google Music"), icon=icon, plugin=self) shell.register_entry_type_for_source(self.source, self.entry_type) shell.append_source(self.source, None) # First lets see if we can add to the context menu ui = shell.get_ui_manager() # Group and it's actions self.action_group = gtk.ActionGroup ('TestActions') # Create Actions for the plugin action = gtk.Action ('ReloadMusic', _('Reload music'), _('Reload music'), 'gtk-refresh') activate_id = action.connect ('activate', lambda a: self.source.onlineMusic.reloadMusic())#self.source.onlineMusic.activate() self.action_group.add_action (action) action = gtk.Action ('SwitchList', _('Switch List'), _('Switch List'), 'gtk-properties')#gtk-preferences activate_id = action.connect ('activate', lambda a: self.switch_list()) self.action_group.add_action (action) ui.insert_action_group(self.action_group, -1) def deactivate(self, shell): ui = shell.get_player().get_property('ui-manager') ui.remove_action_group(self.action_group) self.action_group = None for row in self.source.props.query_model: entry = row[0] self.db.entry_delete(entry) self.db.commit() self.db = None self.entry_type = None self.source.delete_thyself() self.source = None self.switch = None def create_configure_dialog(self, dialog=None): if not dialog: dialog = OnlineMusicConfigureDialog().get_dialog() dialog.present() return dialog def switch_list(self): self.switch = OnlineMusicConfigureDialog().get_dialog() self.switch.present() def get_playback_uri(self,entry): if not entry:return None url=self.db.entry_get (entry, rhythmdb.PROP_LOCATION) if not url.endswith('.mp3'): url=google.getSongUrl(url) if url: try: self.db.set(entry, rhythmdb.PROP_LOCATION, url) except Exception, e: traceback.print_exc() return None else: return None return url