from Screens.MessageBox import MessageBox\r
from Screens.HelpMenu import HelpableScreen , HelpMenu \r
\r
-from Components.Pixmap import Pixmap\r
+from Components.Pixmap import Pixmap,MovingPixmap\r
from Components.Label import Label\r
from Components.MenuList import MenuList\r
from Components.ActionMap import ActionMap, NumberActionMap\r
\r
from StreamPlayer import StreamPlayer\r
from LastFMConfig import LastFMConfigScreen\r
-from LastFM import LastFM\r
+from LastFM import LastFM, lastfm_event_register\r
import httpclient\r
import os\r
import urllib\r
+\r
+import random\r
+\r
############################################################################### \r
plugin_path = ""\r
\r
############################################################################### \r
\r
config.plugins.LastFM = ConfigSubsection()\r
-config.plugins.LastFM.showcoverart = ConfigYesNo(default = False)\r
+config.plugins.LastFM.showcoverart = ConfigYesNo(default = True)\r
config.plugins.LastFM.username = ConfigText("user",fixed_size=False)\r
config.plugins.LastFM.password = ConfigText("passwd",fixed_size=False)\r
config.plugins.LastFM.timeoutstatustext = ConfigInteger(3,limits = (0, 10))\r
config.plugins.LastFM.metadatarefreshinterval = ConfigInteger(5,limits = (0, 100))\r
config.plugins.LastFM.recommendedlevel = ConfigInteger(3,limits = (0, 100))\r
\r
+config.plugins.LastFM.sreensaver = ConfigSubsection()\r
+config.plugins.LastFM.sreensaver.use = ConfigYesNo(default = True)\r
+config.plugins.LastFM.sreensaver.wait = ConfigInteger(30,limits = (0, 1000))\r
+config.plugins.LastFM.sreensaver.showcoverart = ConfigYesNo(default = True)\r
+config.plugins.LastFM.sreensaver.coverartanimation = ConfigYesNo(default = True)\r
+config.plugins.LastFM.sreensaver.coverartspeed = ConfigInteger(10,limits = (0, 100))\r
+config.plugins.LastFM.sreensaver.coverartinterval = ConfigInteger(10,limits = (0, 100))\r
+\r
############################################################################### \r
def main(session,**kwargs):\r
session.open(LastFMScreenMain) \r
LastFM.__init__(self)\r
self.session = session\r
self.streamplayer = StreamPlayer(session)\r
- self.imageconverter = ImageConverter(self.setCoverArt)\r
+ self.streamplayer.onStateChanged.append(self.updateGUI)\r
+ self.imageconverter = ImageConverter(116,116,self.setCoverArt)\r
Screen.__init__(self, session)\r
+ \r
self.tabs=[("personal Stations",self.loadPersonalStations)\r
,("Global Tags",self.loadGlobalTags)\r
,("Top Tracks",self.loadTopTracks)\r
self["button_blue"] = Label(_("ban"))\r
self["infolabel"] = Label("")\r
\r
- self["actions"] = ActionMap(["InfobarChannelSelection","WizardActions", "DirectionActions","MenuActions","ShortcutActions","GlobalActions","HelpActions"], \r
+ self["actions"] = ActionMap(["InfobarChannelSelection","WizardActions", "DirectionActions","MenuActions","ShortcutActions","GlobalActions","HelpActions","NumberActions"], \r
{\r
"ok": self.action_ok,\r
"back": self.action_exit,\r
\r
"menu": self.action_menu,\r
}, -1)\r
+ \r
self.helpList.append((self["actions"], "WizardActions", [("ok", _("switch to selected Station"))]))\r
self.helpList.append((self["actions"], "WizardActions", [("back", _("quit Last.FM"))]))\r
\r
self.infolabelcleartimer = eTimer()\r
self.infolabelcleartimer.timeout.get().append(self.clearInfoLabel)\r
\r
+ self.screensavertimer = eTimer()\r
+ self.screensavertimer.timeout.get().append(self.startScreensaver)\r
+ self.onShown.append(self.startScreensaverTimer)\r
+\r
def initLastFM(self):\r
self.setInfoLabel("loggin into last.fm")\r
self.connect(config.plugins.LastFM.username.value,config.plugins.LastFM.password.value)\r
def tabchangedtimerFired(self):\r
self.tablist.getCurrent()[1][1]()\r
self.tabchangetimer.stop()\r
+\r
+ def startScreensaverTimer(self):\r
+ if config.plugins.LastFM.sreensaver.use.value:\r
+ self.screensavertimer.start(config.plugins.LastFM.sreensaver.wait.value*1000)\r
+\r
+ def resetScreensaverTimer(self):\r
+ self.screensavertimer.stop()\r
+ self.screensavertimer.start(config.plugins.LastFM.sreensaver.wait.value*1000)\r
\r
+ def startScreensaver(self):\r
+ self.screensavertimer.stop()\r
+ self.session.openWithCallback(self.updateGUI, LastFMSaveScreen,self.metadata)\r
+ \r
def action_nextTab(self):\r
self.tablist.down()\r
- \r
+ self.resetScreensaverTimer()\r
+ \r
def action_prevTab(self):\r
self.tablist.up()\r
+ self.resetScreensaverTimer()\r
\r
def action_menu(self):\r
self.session.open(LastFMConfigScreen)\r
+ self.resetScreensaverTimer()\r
\r
def action_exit(self):\r
- print "action_exit"\r
+ self.screensavertimer.stop()\r
self.guiupdatetimer.stop()\r
self.streamplayer.stop()\r
self.close()\r
def action_ok(self):\r
selectedTag = self["streamlist"].l.getCurrentSelection()[1]\r
self.changeStation(selectedTag)\r
- \r
+ self.resetScreensaverTimer()\r
+\r
def action_startstop(self):\r
+ self.resetScreensaverTimer()\r
if self.streamplayer.is_playing:\r
self.streamplayer.stop()\r
self.metadata = {}\r
self["infolabel"].setText("")\r
\r
def updateGUI(self):\r
- if self.streamplayer.is_playing is not True:\r
+ if self.streamplayer.is_playing is not True or self.shown is not True:\r
return None\r
print "updateGUI"\r
if self.streamplayer.is_playing:\r
self["info_artist"].setText("N/A")\r
self["info_album"].setText("N/A")\r
self["info_track"].setText("N/A")\r
- \r
+ \r
def setCoverArt(self,pixmap=None):\r
if pixmap is None:\r
self["info_cover"].instance.setPixmapFromFile(self.noCoverArtPNG) \r
x["stationurl"] = self.getArtistGroup()\r
tags.append(x)\r
\r
-\r
self.buildMenuList(tags)\r
\r
def loadGlobalTags(self):\r
menuliste.append((i['_display'],i['stationurl']))\r
self["streamlist"].l.setList(menuliste) \r
\r
+class LastFMSaveScreen(Screen):\r
+ skin = """<screen position="0,0" size="720,576" flags="wfNoBorder" title="LastFMSaveScreen" >\r
+ <widget name="cover" position="50,50" size="200,200" /> \r
+ </screen>"""\r
+ noCoverArtPNG = "/usr/share/enigma2/no_coverArt.png"\r
+ coverartsize= [200,200]\r
+ def __init__(self,session,initialMetadata):\r
+ self.skin = """<screen position="0,0" size="720,576" flags="wfNoBorder" title="LastFMSaveScreen" >\r
+ <widget name="cover" position="50,50" size="%i,%i" /> \r
+ </screen>"""%(self.coverartsize[0],self.coverartsize[1])\r
+ \r
+ Screen.__init__(self,session)\r
+ self.imageconverter = ImageConverter(self.coverartsize[0],self.coverartsize[1],self.setCoverArt)\r
+ self.session = session\r
+ self.initialMetadata = initialMetadata\r
+ self["cover"] = MovingPixmap()\r
+ self["actions"] = ActionMap(["InfobarChannelSelection","WizardActions", "DirectionActions","MenuActions","ShortcutActions","GlobalActions","HelpActions"], \r
+ {\r
+ "ok": self.action_exit,\r
+ "back": self.action_exit,\r
+ }, -1)\r
+ \r
+ self.onLayoutFinish.append(self.update)\r
+ self.onLayoutFinish.append(self.registerToMetadataUpdates)\r
+ \r
+ if config.plugins.LastFM.sreensaver.coverartanimation.value:\r
+ self.startmovingtimer = eTimer()\r
+ self.startmovingtimer.timeout.get().append(self.movePixmap)\r
+ self.startmovingtimer.start(config.plugins.LastFM.sreensaver.coverartinterval.value*1000)\r
+ \r
+ def action_ok(self):\r
+ pass\r
+ \r
+ def action_exit(self):\r
+ lastfm_event_register.removeOnMetadataChanged(self.update)\r
+ self.close()\r
+ \r
+ def setCoverArt(self,pixmap=None):\r
+ if pixmap is None:\r
+ self["cover"].instance.setPixmapFromFile(self.noCoverArtPNG) \r
+ else:\r
+ self["cover"].instance.setPixmap(pixmap.__deref__())\r
+ \r
+ def registerToMetadataUpdates(self):\r
+ lastfm_event_register.addOnMetadataChanged(self.update)#added here, to make shure that is called after onLayoutFinished\r
+ \r
+ \r
+ def update(self,metadata=None):\r
+ \r
+ if metadata is None:\r
+ metadata = self.initialMetadata\r
+ \r
+ if config.plugins.LastFM.sreensaver.showcoverart.value is not True:\r
+ pass#do nothing\r
+ elif metadata.has_key("albumcover_large") and config.plugins.LastFM.showcoverart.value:\r
+ self.imageconverter.convert(metadata["albumcover_large"])\r
+ elif metadata.has_key("albumcover_medium") and config.plugins.LastFM.showcoverart.value:\r
+ self.imageconverter.convert(metadata["albumcover_medium"])\r
+ elif metadata.has_key("albumcover_small") and config.plugins.LastFM.showcoverart.value:\r
+ self.imageconverter.convert(metadata["albumcover_small"],self.setCoverArt)\r
+ else:\r
+ self.setCoverArt()\r
+\r
+ def movePixmap(self):\r
+ self.startmovingtimer.stop() \r
+ newX = random.randrange(720-self.coverartsize[0]-1)\r
+ newY = random.randrange(576-self.coverartsize[1]-1)\r
+ self["cover"].moveTo(newX, newY, time = config.plugins.LastFM.sreensaver.coverartspeed.value)\r
+ self["cover"].startMoving()\r
+ self.startmovingtimer.start(config.plugins.LastFM.sreensaver.coverartinterval.value*1000)\r
\r
class ImageConverter:\r
\r
- targetfile= "/tmp/coverart"\r
- lastURL =""\r
+ lastURL = ""\r
\r
- def __init__(self,callBack):\r
+ def __init__(self,width,height,callBack):\r
self.callBack = callBack\r
-\r
+ self.width = width\r
+ self.height = height\r
+ self.targetfile= "/tmp/coverart"+str(random.randrange(5000))\r
+ \r
+ \r
def convert(self,sourceURL):\r
if self.lastURL != sourceURL:\r
extension = sourceURL.split(".")[-1]\r
self.tmpfile = self.targetfile+"."+extension\r
host = sourceURL.split("/")[2]\r
path = "/"+"/".join(sourceURL.split("/")[3:])\r
- print host,path\r
httpclient.getFile(self.tmpfile,host,80,path,callback=self.onImageLoaded)\r
self.lastURL = sourceURL\r
\r
def onImageLoaded(self):\r
- self.currPic = loadPic(self.tmpfile, 116, 116, 0,0, 0,1)\r
+ self.currPic = loadPic(self.tmpfile, self.width, self.height, 0,1, 0,1)\r
os.remove(self.tmpfile)\r
self.callBack(pixmap=self.currPic)\r
\ No newline at end of file