Start playing on add to playlist.
[nephilim.git] / plugins / SongStatus.py
blob71aa6e486bbaecdcbc32196abece6b834a722448
1 from PyQt4 import QtGui
2 from clMonty import monty
3 from clPlugin import *
4 from traceback import print_exc
6 import format
8 SONGSTATUS_FORMAT_DEFAULT='<font size="4">now $state</font>'\
9 '$if($title,<font size="8" color="blue">$title</font>'\
10 '<br />by <font size="8" color="green">$artist</font>'\
11 '<br /><font size="5" color="red">[$album # $track]</font>)'\
12 '$if($length,<br /><font size="4">$time/$length</font>)'
14 class wgSongStatus(QtGui.QWidget):
15 """Displays the status of the current song, if playing."""
16 " label containing the info"
17 lblInfo=None
18 format=None
19 p=None
20 def __init__(self, p, parent=None):
21 QtGui.QWidget.__init__(self, parent)
22 self.p=p
24 self.lblInfo=QtGui.QLabel()
25 self.setMinimumWidth(400)
27 layout=QtGui.QHBoxLayout()
28 self.setLayout(layout)
30 layout.addWidget(self.lblInfo)
31 self.updateFormat()
33 def update(self, params):
34 status=monty.getStatus()
35 song=monty.getCurrentSong()
37 values={'state':''}
38 try:
39 values['state']={'play':'playing', 'stop':'stopped', 'pause':'paused'}[status['state']]
40 if 'time' in status:
41 values['length']=sec2min(status['length'])
42 values['time']=sec2min(status['time'])
43 except:
44 pass
46 if song:
47 self.lblInfo.setText(self.format(format.params(song, values)))
49 def updateFormat(self):
50 try:
51 self.format=format.compile(self.p.getSetting('format'))
52 except Exception, e:
53 self.format=lambda p: "Invalid format: %s"%(e)
55 def text(self):
56 return self.lblInfo.text()
58 class pluginSongStatus(Plugin):
59 o=None
60 def __init__(self, winMain):
61 Plugin.__init__(self, winMain, 'SongStatus')
62 self.addMontyListener('onSongChange', self.update)
63 self.addMontyListener('onTimeChange', self.update)
64 self.addMontyListener('onStateChange', self.update)
65 self.addMontyListener('onConnect', self.update)
66 self.addMontyListener('onDisconnect', self.update)
68 def _load(self):
69 self.o=wgSongStatus(self, None)
70 self.update(None)
71 def _unload(self):
72 self.o=None
73 def getInfo(self):
74 return "Show information about the current song."
76 def update(self, params):
77 self.o.update(params)
79 def _getDockWidget(self):
80 return self._createDock(self.o)
82 def _getSettings(self):
83 format=QtGui.QTextEdit()
84 format.insertPlainText(self.getSetting('format'))
85 return [
86 ['format', 'Format', 'Format of the song status. Possible tags: $title, $artist, $album, $track, $time, $length, $state', format]
88 def afterSaveSettings(self):
89 self.o.updateFormat()
90 self.o.update(None)