| 
				
			 | 
			
			
				@@ -11,19 +11,27 @@ class TrackData(object): 
			 | 
		
	
		
			
			| 
				11
			 | 
			
				11
			 | 
			
			
				     _field_names = ['state', 'artist', 'album', 'song', 'ct', 'tt'] 
			 | 
		
	
		
			
			| 
				12
			 | 
			
				12
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				13
			 | 
			
				13
			 | 
			
			
				     def __init__(self): 
			 | 
		
	
		
			
			| 
				14
			 | 
			
				
			 | 
			
			
				-        self.state = "" 
			 | 
		
	
		
			
			| 
				15
			 | 
			
				
			 | 
			
			
				-        self.artist = "" 
			 | 
		
	
		
			
			| 
				16
			 | 
			
				
			 | 
			
			
				-        self.album = "" 
			 | 
		
	
		
			
			| 
				17
			 | 
			
				
			 | 
			
			
				-        self.song = "" 
			 | 
		
	
		
			
			| 
				18
			 | 
			
				
			 | 
			
			
				-        self.ct = ""    # current time 
			 | 
		
	
		
			
			| 
				19
			 | 
			
				
			 | 
			
			
				-        self.tt = ""    # total time 
			 | 
		
	
		
			
			| 
				
			 | 
			
				14
			 | 
			
			
				+        self.state = None 
			 | 
		
	
		
			
			| 
				
			 | 
			
				15
			 | 
			
			
				+        self.artist = None 
			 | 
		
	
		
			
			| 
				
			 | 
			
				16
			 | 
			
			
				+        self.album = None 
			 | 
		
	
		
			
			| 
				
			 | 
			
				17
			 | 
			
			
				+        self.song = None 
			 | 
		
	
		
			
			| 
				
			 | 
			
				18
			 | 
			
			
				+        self.ct = None  # current time 
			 | 
		
	
		
			
			| 
				
			 | 
			
				19
			 | 
			
			
				+        self.tt = None  # total time 
			 | 
		
	
		
			
			| 
				
			 | 
			
				20
			 | 
			
			
				+        self._is_loaded = False 
			 | 
		
	
		
			
			| 
				
			 | 
			
				21
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				22
			 | 
			
			
				+    def is_playing(self): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				23
			 | 
			
			
				+        if not self._is_loaded: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				+            self.load() 
			 | 
		
	
		
			
			| 
				
			 | 
			
				25
			 | 
			
			
				+        return any((self.artist, self.album, self.song, self.ct, self.tt)) 
			 | 
		
	
		
			
			| 
				20
			 | 
			
				26
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				21
			 | 
			
				27
			 | 
			
			
				     def load(self): 
			 | 
		
	
		
			
			| 
				22
			 | 
			
				28
			 | 
			
			
				         FNULL = open(os.devnull, 'w+') 
			 | 
		
	
		
			
			| 
				23
			 | 
			
				29
			 | 
			
			
				         for fieldname in self.__class__._field_names: 
			 | 
		
	
		
			
			| 
				24
			 | 
			
				30
			 | 
			
			
				             value = subprocess.check_output(['mocp', '-Q', "%" + fieldname], 
			 | 
		
	
		
			
			| 
				25
			 | 
			
				
			 | 
			
			
				-                                            stderr=FNULL) 
			 | 
		
	
		
			
			| 
				26
			 | 
			
				
			 | 
			
			
				-            setattr(self, fieldname, value.strip()) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+                                            stderr=FNULL).strip() 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+            if value: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+                setattr(self, fieldname, value) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+        self._is_loaded = True 
			 | 
		
	
		
			
			| 
				27
			 | 
			
				35
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				28
			 | 
			
				36
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				29
			 | 
			
				37
			 | 
			
			
				 class MocTitler(object): 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -36,14 +44,16 @@ class MocTitler(object): 
			 | 
		
	
		
			
			| 
				36
			 | 
			
				44
			 | 
			
			
				         """Assemble the data to human-readable format""" 
			 | 
		
	
		
			
			| 
				37
			 | 
			
				45
			 | 
			
			
				         d = self.td 
			 | 
		
	
		
			
			| 
				38
			 | 
			
				46
			 | 
			
			
				         title = "" 
			 | 
		
	
		
			
			| 
				39
			 | 
			
				
			 | 
			
			
				-        title += "(%s) " % d.state 
			 | 
		
	
		
			
			| 
				40
			 | 
			
				
			 | 
			
			
				-        title += d.artist if d.artist else "" 
			 | 
		
	
		
			
			| 
				41
			 | 
			
				
			 | 
			
			
				-        title += " " if d.artist and d.album else "" 
			 | 
		
	
		
			
			| 
				42
			 | 
			
				
			 | 
			
			
				-        title += "[%s]" % d.album if d.album else "" 
			 | 
		
	
		
			
			| 
				43
			 | 
			
				
			 | 
			
			
				-        if (d.artist or d.album) and (d.song or d.tt): 
			 | 
		
	
		
			
			| 
				44
			 | 
			
				
			 | 
			
			
				-            title += ": " 
			 | 
		
	
		
			
			| 
				45
			 | 
			
				
			 | 
			
			
				-        title += d.song if d.song else "" 
			 | 
		
	
		
			
			| 
				46
			 | 
			
				
			 | 
			
			
				-        title += " (%s/%s)" % (d.ct, d.tt) if d.tt else "" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+        title += "(%s)" % d.state 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+        if d.is_playing(): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+            title += " " 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+            title += d.artist if d.artist else "" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+            title += " " if d.artist and d.album else "" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+            title += "[%s]" % d.album if d.album else "" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+            if (d.artist or d.album) and (d.song or d.tt): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				54
			 | 
			
			
				+                title += ": " 
			 | 
		
	
		
			
			| 
				
			 | 
			
				55
			 | 
			
			
				+            title += d.song if d.song else "" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+            title += " (%s/%s)" % (d.ct, d.tt) if d.tt else "" 
			 | 
		
	
		
			
			| 
				47
			 | 
			
				57
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				48
			 | 
			
				58
			 | 
			
			
				         return title 
			 | 
		
	
		
			
			| 
				49
			 | 
			
				59
			 | 
			
			
				  
			 |