%PDF- %PDF-
Direktori : /lib/x86_64-linux-gnu/rhythmbox/plugins/artsearch/ |
Current File : //lib/x86_64-linux-gnu/rhythmbox/plugins/artsearch/songinfo.py |
# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*- # # Copyright (C) 2014 Jonathan Matthew # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # The Rhythmbox authors hereby grant permission for non-GPL compatible # GStreamer plugins to be used and distributed together with GStreamer # and Rhythmbox. This permission is above and beyond the permissions granted # by the GPL license by which Rhythmbox is covered. If you modify this code # you may extend this exception to your version of the code, but you are not # obligated to do so. If you do not wish to do so, delete this exception # statement from your version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. from gi.repository import RB, Gtk class AlbumArtPage(object): def __init__(self, shell, song_info): self.visible = False self.art_key = None self.shell = shell self.song_info = song_info self.entry = song_info.props.current_entry self.art_store = RB.ExtDB(name="album-art") self.art_store.connect("added", self.art_added_cb) grid = Gtk.Grid(hexpand=True, vexpand=True, margin=6, row_spacing=6) self.image = RB.FadingImage(fallback="rhythmbox-missing-artwork", use_tooltip=False) self.image.props.hexpand = True self.image.props.vexpand = True grid.attach(self.image, 0, 0, 1, 1) buttons = Gtk.ButtonBox(orientation=Gtk.Orientation.HORIZONTAL) buttons.set_spacing(6) buttons.set_layout(Gtk.ButtonBoxStyle.CENTER) grid.attach(buttons, 0, 1, 1, 1) clear = Gtk.Button(label=_("Clear"), use_underline=True) clear.connect('clicked', self.clear_button_cb) buttons.add(clear) fetch = Gtk.Button(label=_("_Fetch"), use_underline=True) fetch.connect('clicked', self.fetch_button_cb) buttons.add(fetch) browse_file = Gtk.Button(label=_("_Browse"), use_underline=True) browse_file.connect('clicked', self.browse_button_cb) buttons.add(browse_file) self.page_num = song_info.append_page(_("Album Art"), grid) self.ec_id = song_info.connect("notify::current-entry", self.entry_changed_cb) self.sp_id = grid.get_parent().connect("switch-page", self.switch_page_cb) def art_update(self, key, data): db = self.shell.props.db if db.entry_matches_ext_db_key(self.entry, key): self.image.set_pixbuf(data) self.art_key = key def art_added_cb(self, db, key, filename, data): print("art added?") self.art_update(key, data) def art_request_cb(self, key, skey, filename, data): print("art request finished?") self.art_update(skey, data) def get_art(self, entry, user_explicit=False): self.image.start(100) key = entry.create_ext_db_key(RB.RhythmDBPropType.ALBUM) if user_explicit: key.add_info("user-explicit", "true") self.art_store.request(key, self.art_request_cb) def storage_key(self, entry): key = RB.ExtDBKey.create_storage("album", entry.get_string(RB.RhythmDBPropType.ALBUM)) artist = entry.get_string(RB.RhythmDBPropType.ALBUM_ARTIST) if artist is None or artist == "" or artist == _("Unknown"): artist = entry.get_string(RB.RhythmDBPropType.ARTIST) key.add_field("artist", artist) return key def entry_changed_cb(self, pspec, duh): self.entry = self.song_info.props.current_entry db = self.shell.props.db if self.art_key and db.entry_matches_ext_db_key(self.entry, self.art_key): return self.art_key = None if self.visible: self.get_art(self.entry, False) def switch_page_cb(self, notebook, page, page_num): if self.art_key is not None: return self.visible = (page_num == self.page_num) if self.visible: self.get_art(self.entry, False) def clear_button_cb(self, button): key = self.storage_key(self.entry) self.art_store.store(key, RB.ExtDBSourceType.USER_EXPLICIT, None) def fetch_button_cb(self, button): if self.art_key is not None: self.art_store.delete(self.art_key) self.get_art(self.entry, True) def browse_file_response_cb(self, dialog, response): if response == Gtk.ResponseType.OK: key = self.storage_key(self.entry) self.art_store.store_uri(key, RB.ExtDBSourceType.USER_EXPLICIT, dialog.get_uri()) dialog.destroy() def browse_button_cb(self, button): d = Gtk.FileChooserDialog(_("Select new artwork"), self.shell.props.window, Gtk.FileChooserAction.OPEN) d.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) d.add_button(_("_Select"), Gtk.ResponseType.OK) d.set_default_response(Gtk.ResponseType.OK) d.connect("response", self.browse_file_response_cb) d.show_all()