emmental/audio/artwork.py

47 lines
1.6 KiB
Python

# 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())