-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalbumart.py
63 lines (47 loc) · 1.57 KB
/
albumart.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python3
# Copyright (C) 2021 J.F.Dockes. License: MIT
#
# Retrieve the album art URI from an openhome or UPnP/AV renderer.
#
import sys
import os
import upnpp
def debug(x):
print("%s" % x, file = sys.stderr)
def usage():
prog = os.path.basename(__file__)
debug("Usage: %s devname" % prog)
sys.exit(1)
def artFromMeta(metadata):
dirc = upnpp.UPnPDirContent()
dirc.parse(metadata)
if dirc.m_items.size():
dirobj = dirc.m_items[0]
if "upnp:albumArtURI" in dirobj.m_props:
print("%s" % dirobj.m_props["upnp:albumArtURI"])
sys.exit(0)
def artFromOHInfo(service):
# Prefer metatext as this will get the dynamic art if a radio is playing
retdata = upnpp.runaction(service, "Metatext", [])
if retdata and "Value" in retdata:
artFromMeta(retdata["Value"])
# Else try Track which will yield current playlist track or static radio data
retdata = upnpp.runaction(service, "Track", [])
if retdata and "Metadata" in retdata:
artFromMeta(retdata["Metadata"])
def artFromAVTransport(service):
retdata = upnpp.runaction(service, "GetPositionInfo", ["0"])
if retdata and "TrackMetaData" in retdata:
artFromMeta(retdata["TrackMetaData"])
if len(sys.argv) != 2:
usage()
devname = sys.argv[1]
log = upnpp.Logger_getTheLog("stderr")
log.setLogLevel(2)
service = upnpp.findTypedService(devname, "Info", True)
if service:
artFromOHInfo(service)
service = upnpp.findTypedService(devname, "AVTransport", True)
if service:
artFromAVTransport(service)
sys.exit(0)