coderkun
8607bf15a9
Store the metadate “last-modified” for a track and an album and add an option sort by it.
90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
|
|
import gi
|
|
gi.require_version('Gtk', '3.0')
|
|
import hashlib
|
|
import locale
|
|
import os
|
|
import urllib
|
|
|
|
from gi.repository import GdkPixbuf
|
|
|
|
|
|
|
|
|
|
class Utils:
|
|
CSS_SELECTION = 'selection'
|
|
STOCK_ICON_DEFAULT = 'image-x-generic-symbolic'
|
|
|
|
|
|
def load_pixbuf(data):
|
|
loader = GdkPixbuf.PixbufLoader()
|
|
try:
|
|
loader.write(data)
|
|
finally:
|
|
loader.close()
|
|
return loader.get_pixbuf()
|
|
|
|
|
|
def load_thumbnail(cache, client, album, size):
|
|
cache_url = cache.create_filename(album)
|
|
pixbuf = None
|
|
|
|
if os.path.isfile(cache_url):
|
|
pixbuf = GdkPixbuf.Pixbuf.new_from_file(cache_url)
|
|
else:
|
|
# Load cover from server
|
|
albumart = client.get_albumart_now(album.get_id())
|
|
if albumart:
|
|
pixbuf = Utils.load_pixbuf(albumart)
|
|
if pixbuf is not None:
|
|
pixbuf = pixbuf.scale_simple(size, size, GdkPixbuf.InterpType.HYPER)
|
|
pixbuf.savev(cache_url, 'jpeg', [], [])
|
|
return pixbuf
|
|
|
|
|
|
def create_artists_label(album):
|
|
label = ', '.join(album.get_albumartists())
|
|
if album.get_artists():
|
|
label = locale.gettext("{} feat. {}").format(
|
|
label,
|
|
", ".join(album.get_artists())
|
|
)
|
|
return label
|
|
|
|
|
|
def create_length_label(album):
|
|
minutes = album.get_length() // 60
|
|
seconds = album.get_length() - minutes * 60
|
|
|
|
return locale.gettext("{}:{} minutes").format(minutes, seconds)
|
|
|
|
|
|
def create_track_title(track):
|
|
title = track.get_title()
|
|
if track.get_artists():
|
|
title = locale.gettext("{} feat. {}").format(
|
|
title,
|
|
", ".join(track.get_artists())
|
|
)
|
|
return title
|
|
|
|
|
|
def generate_id(values):
|
|
if type(values) is not list:
|
|
values = [values]
|
|
m = hashlib.md5()
|
|
for value in values:
|
|
m.update(value.encode('utf-8'))
|
|
return m.hexdigest()
|
|
|
|
|
|
|
|
|
|
class SortOrder:
|
|
ARTIST = 0
|
|
TITLE = 1
|
|
YEAR = 2
|
|
MODIFIED = 3
|