allow to read metadata of currently played track from mediaplayer
authorMoritz Venn <moritz.venn@freaque.net>
Mon, 10 Jan 2011 19:21:09 +0000 (20:21 +0100)
committerMoritz Venn <moritz.venn@freaque.net>
Mon, 10 Jan 2011 19:21:09 +0000 (20:21 +0100)
basically gives external code access to the information the media player
provides in his gui, namely artist, album, title, genre, year plus the
path to the coverart (unless there is none).
you can use e.g. the filestreamer to retrieve the coverart afterwards.

please note that this does not use any official api of the mediaplayer
but rather accesses the labels+pixmap directly.

webinterface/src/WebComponents/Sources/MP.py
webinterface/src/WebScreens.py
webinterface/src/web/mediaplayercurrent.xml [new file with mode: 0644]

index 2beeaab..1854cfe 100644 (file)
@@ -10,6 +10,7 @@ class MP(Source):
        WRITEPLAYLIST = 4
        ADD = 5
        REMOVE = 6
+       CURRENT = 7
 
        def __init__(self, session, func=LIST):
                Source.__init__(self)
@@ -198,9 +199,41 @@ class MP(Source):
                        return (False, "unknown parameter %s" % param)
                return (True, "executed %s" % param)
 
-       list = property(lambda self: self.result)
-       lut = {
-               "ServiceReference": 0,
-               "IsDirectory": 1,
-               "Root": 2,
-       }
+       def getCurrent(self):
+               mp = self.tryOpenMP()
+               if mp is None:
+                       msg = "mediaplayer not installed"
+                       return ((msg, msg, msg, msg, msg, msg),)
+
+               return ((
+                       mp["artist"].getText(),
+                       mp["title"].getText(),
+                       mp["album"].getText(),
+                       mp["year"].getText(),
+                       mp["genre"].getText(),
+                       mp["coverArt"].coverArtFileName
+               ),)
+
+       def getList(self):
+               if self.func is self.CURRENT:
+                       return self.getCurrent()
+               return self.result
+
+       def getLut(self):
+               if self.func is self.CURRENT:
+                       return {
+                               "Artist": 0,
+                               "Title": 1,
+                               "Album": 2,
+                               "Year": 3,
+                               "Genre": 4,
+                               "CoverFilename": 5,
+                       }
+               return  {
+                       "ServiceReference": 0,
+                       "IsDirectory": 1,
+                       "Root": 2,
+               }
+
+       list = property(getList)
+       lut = property(getLut)
index 4879bb2..9f93f01 100644 (file)
@@ -187,7 +187,7 @@ class MediaPlayerWebScreen(WebScreen):
                self["RemoveFile"] = MP(session, func=MP.REMOVE)
                self["Command"] = MP(session, func=MP.COMMAND)
                self["WritePlaylist"] = MP(session, func=MP.WRITEPLAYLIST)
-               
+               self["CurrentTrack"] = MP(session, func=MP.CURRENT)
 
 class AutoTimerWebScreen(WebScreen):
        def __init__(self, session, request):
diff --git a/webinterface/src/web/mediaplayercurrent.xml b/webinterface/src/web/mediaplayercurrent.xml
new file mode 100644 (file)
index 0000000..71b24ba
--- /dev/null
@@ -0,0 +1,12 @@
+<e2:screen name="MediaPlayerWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2mediaplayercurrent><e2:element source="CurrentTrack"><e2:convert type="web:ListFiller" >
+       &lt;e2currenttrack>
+               &lt;e2artist><e2:item name="Artist" filter="xml"/>&lt;/e2artist>
+               &lt;e2title><e2:item name="Title" filter="xml"/>&lt;/e2title>
+               &lt;e2album><e2:item name="Album" filter="xml"/>&lt;/e2album>
+               &lt;e2year><e2:item name="Year" filter="xml"/>&lt;/e2year>
+               &lt;e2genre><e2:item name="Genre" filter="xml"/>&lt;/e2genre>
+               &lt;e2coverfile><e2:item name="CoverFilename" filter="xml"/>&lt;/e2coverfile>
+       &lt;/e2currenttrack></e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
+</e2mediaplayercurrent>
+</e2:screen>