# Copyright 2021 (c) Anna Schumaker. from gi.repository import Gtk, GdkPixbuf, Gst class Artwork(Gtk.AspectFrame): def __init__(self, player): Gtk.AspectFrame.__init__(self) self.picture = Gtk.Picture() self.frame = Gtk.Frame() self.frame.set_child(self.picture) self.set_child(self.frame) self.set_obey_child(False) self.set_margin_start(5) self.set_margin_end(5) self.set_margin_top(5) self.set_margin_bottom(5) self.set_ratio(1.0) self.player = player self.player.connect("artwork", self.on_artwork) self.player.connect("track-changed", self.on_track_changed) self.on_track_changed(player, None, player.track) def __set_from_cover_jpg__(self, track): cover = track.path.parent / "cover.jpg" if cover.exists(): self.picture.set_filename(str(cover)) return True return False def on_artwork(self, player, sample): buffer = sample.get_buffer() (res, map) = buffer.map(Gst.MapFlags.READ) if res: loader = GdkPixbuf.PixbufLoader() loader.write(map.data) self.picture.set_pixbuf(loader.get_pixbuf()) loader.close() buffer.unmap(map) def on_track_changed(self, player, prev, new): if not (new and self.__set_from_cover_jpg__(new)): display = self.picture.get_display() theme = Gtk.IconTheme.get_for_display(display) icon = theme.lookup_icon("emmental", [ ], 1024, 1, 0, 0) self.picture.set_file(icon.get_file())