All pastes #27233 Raw Edit

andrewski

public text v1 · immutable
#27233 ·published 2005-11-01 03:11 UTC
rendered paste body
Index: pygmy
===================================================================
--- pygmy	(revision 47)
+++ pygmy	(working copy)
@@ -27,5 +27,10 @@
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 """
 
+import sys
 import pygmy
-pygmy.main()
+
+try:
+    pygmy.main()
+except KeyboardInterrupt:
+    sys.exit()
Index: pygmy.py
===================================================================
--- pygmy.py	(revision 47)
+++ pygmy.py	(working copy)
@@ -76,12 +76,16 @@
 			messages[(host, port, password)] = 'printed'
 	return c
 
-class Empty:
-	# Just an empty class for a very specific purpose
-	def get(self, one, two):
-		pass
+class WindowProps:
+	def __init__(self, x, y, w, h, we=0, he=0, visible=True):
+		self.x = x
+		self.y = y
+		self.w = w
+		self.h = h
+		self.we = we
+		self.he = he
+		self.visible = visible
 
-
 class Client:
 	def conn(self):
 		return getConnection(self.host, self.port, self.password)
@@ -152,25 +156,13 @@
 		self.password = ''
 		# prev* are used to test on subsequent self.update calls;
 		# initialize as None.
-		self.prevc = 0
-		self.prevstatus = Empty()
-		self.prevstatus.state = None
-		self.prevstatus.song = None
-		self.prevstatus.playlist = 0
-		self.prevstatus.repeat = 0
-		self.prevstatus.random = 0
-		self.prevstatus.volume = None
-		self.prevsonginfo = Empty()
+		self.prevc = None
+		self.prevstatus = None
+		self.prevsonginfo = None
 		self.stopaftercurrent = False
 		self.volume_sliding = False
-		self.windowprops = Empty()
-		self.windowprops.x, self.windowprops.y = 0, 0
-		self.windowprops.w, self.windowprops.h = 250, 72
-		self.windowprops.we, self.windowprops.he = 250, 200
-		self.playlistwindowprops = Empty()
-		self.playlistwindowprops.x, self.playlistwindowprops.y = 0, 0
-		self.playlistwindowprops.w, self.playlistwindowprops.h = 375, 250
-		self.playlistwindowprops.visible = False
+		self.windowprops = WindowProps(0, 0, 250, 72, 250, 200)
+		self.playlistwindowprops = WindowProps(0, 0, 375, 250, visible=False)
 		self.format = '<big>artist:</big>\n<small>title</small>'
 		self.titleformat = 'artist: title - Pygmy'
 		self.playlistformat = 'artist: title'
@@ -232,8 +224,7 @@
 		self.w.playlist.set_model(self.playlistdata)
 		self.playlistdata.connect('row-changed',  self.playlist_changed)
 		self.playlistcell = gtk.CellRendererText()
-		self.playlistcolumn = gtk.TreeViewColumn('Pango Markup', 
-self.playlistcell, markup=1)
+		self.playlistcolumn = gtk.TreeViewColumn('Pango Markup', self.playlistcell, markup=1)
 		self.w.playlist.append_column(self.playlistcolumn)
 		self.selection = self.w.playlist.get_selection()
 		self.selection.set_mode(gtk.SELECTION_MULTIPLE)
@@ -308,167 +299,166 @@
 	def update(self):
 		global count
 		count += 1
-		try:
-			if self.conn() is not self.prevc:
-				self.prevc = self.conn()
-				if self.conn() is None:
-					self.w.ppbutton.set_property('sensitive', False)
-					self.w.stopbutton.set_property('sensitive', False)
-					self.w.prevbutton.set_property('sensitive', False)
-					self.w.nextbutton.set_property('sensitive', False)
-					self.w.volumebutton.set_property('sensitive', False)
-					self.w.playlistbutton.set_property('sensitive', False)
-					self.w.rmbutton.set_property('sensitive', False)
-					self.w.clbutton.set_property('sensitive', False)
-					self.w.repeatbutton.set_property('sensitive', False)
-					self.w.shufflebutton.set_property('sensitive', False)
-					self.w.statusimage.set_from_stock(gtk.STOCK_NO, gtk.ICON_SIZE_SMALL_TOOLBAR)
-					self.w.updateimage.set_from_stock(gtk.STOCK_NO, gtk.ICON_SIZE_MENU)
-					
-					try:
-						self.trayimage.set_from_stock('pygmy',  gtk.ICON_SIZE_BUTTON)
-					except:
-						pass
-					
-					self.update_progressbar(False)
-					self.w.songlabel.set_text('Playlist')
-					self.playlistdata.clear()
-					self.tooltips.set_tip(self.w.statusbox, "Not connected")
-					self.w.prefsbutton.grab_focus()
-					
-					return True
-					
-				elif self.conn() is not None:
-					self.w.ppbutton.set_property('sensitive', True)
-					self.w.stopbutton.set_property('sensitive', True)
-					self.w.prevbutton.set_property('sensitive', True)
-					self.w.nextbutton.set_property('sensitive', True)
-					self.w.volumebutton.set_property('sensitive', True)
-					self.w.playlistbutton.set_property('sensitive', True)
-					self.w.rmbutton.set_property('sensitive', True)
-					self.w.clbutton.set_property('sensitive', True)
-					self.w.repeatbutton.set_property('sensitive', True)
-					self.w.shufflebutton.set_property('sensitive', True)
-					self.w.statusimage.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_SMALL_TOOLBAR)
-					#self.w.updateimage.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU)
-					self.tooltips.set_tip(self.w.statusbox, "Connected")
-					self.w.ppbutton.grab_focus()
-			
+
+#		try:
+		self.update_conn()
+
+		if self.conn():
 			self.status = self.conn().do.status()
 			self.songinfo = self.conn().do.currentsong()
-			if not hasattr(self.songinfo, 'artist'):
-				self.songinfo.artist = None
-			if not hasattr(self.songinfo, 'title'):
-				self.songinfo.title = None
-			if not hasattr(self.status, 'song'):
-				self.status.song = None
-				
-			# Display current playlist
-			if self.prevstatus.playlist != self.status.playlist:
-				self.update_playlist()
+			self.update_state()
 
-			# Update progress frequently if we're playing
-			if self.status.state in ['play', 'pause']:
-				self.update_progressbar(True)
+		self.prevc = self.conn()
+		self.prevstatus = self.status
+		self.prevsonginfo = self.songinfo
 
-			# If state changes
-			if self.prevstatus.state != self.status.state:
-				# Update progressbar if the state changes too
-				self.update_progressbar(True)
-				self.update_songtitle()
-				if self.status.state == 'stop':
-					self.w.ppimage.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)
-					try:
-						self.trayimage.set_from_stock('pygmy', gtk.ICON_SIZE_BUTTON)
-					except:
-						pass
+#		except (mpdclient.socket.error, EOFError, AttributeError, IndexError):
+#			global connections
+#			connections = {}
+#			self.prevstatus = None
+#		except KeyboardInterrupt, e:
+#			raise e
 
-					self.tooltips.set_tip(self.w.ppbutton, "Play")
-					# Unbold playing song (if we were playing)
-					if self.prevstatus.state == 'play':
-						oldrow = int(self.prevsonginfo.pos)
-						snip = self.playlistdata[oldrow][1]
-						if snip[0:3] == '<b>' and snip[-4:] == '</b>':
-							self.playlistdata[oldrow][1] = snip[3:-4]
-				elif self.status.state == 'pause':
-					self.w.ppimage.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)
-					try:
-						self.trayimage.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)
-					except:
-						pass
-					self.tooltips.set_tip(self.w.ppbutton, "Play")
-				elif self.status.state == 'play':
-					self.w.ppimage.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)
-					try:
-						self.trayimage.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)
-					except:
-						pass
-					self.tooltips.set_tip(self.w.ppbutton, "Pause")
-				if self.status.state in ['play', 'pause']:
-					row = int(self.songinfo.pos)
-					self.playlistdata[row][1] = make_bold(	self.playlistdata[row][1])
+		return True
 
-			# Only update song info if song has changed
-			if self.prevstatus.song != self.status.song:
-				if self.stopaftercurrent == True:
-					self.conn().do.stop()
-					self.stopaftercurrent = False
-					self.prevstatus = self.status
-					self.prevsonginfo = self.songinfo
-					return True
-				self.update_windowtitle()
+	def update_conn(self):
+		if self.conn() != self.prevc:
+			if self.conn() is None:
+				self.w.ppbutton.set_property('sensitive', False)
+				self.w.stopbutton.set_property('sensitive', False)
+				self.w.prevbutton.set_property('sensitive', False)
+				self.w.nextbutton.set_property('sensitive', False)
+				self.w.volumebutton.set_property('sensitive', False)
+				self.w.playlistbutton.set_property('sensitive', False)
+				self.w.rmbutton.set_property('sensitive', False)
+				self.w.clbutton.set_property('sensitive', False)
+				self.w.repeatbutton.set_property('sensitive', False)
+				self.w.shufflebutton.set_property('sensitive', False)
+				self.w.statusimage.set_from_stock(gtk.STOCK_NO, gtk.ICON_SIZE_SMALL_TOOLBAR)
+				self.w.updateimage.set_from_stock(gtk.STOCK_NO, gtk.ICON_SIZE_MENU)
+				
+				try:
+					self.trayimage.set_from_stock('pygmy',  gtk.ICON_SIZE_BUTTON)
+				except:
+					pass
+				
+				self.update_progressbar(False)
 				self.update_songtitle()
-
-				# Unbold all songs.  If you have a better idea, let me know.
-				for song in self.playlistdata:
-					if song[1][0:3] == '<b>' and song[1][-4:] == '</b>':
-						self.playlistdata[song.path[0]][1] = song[1][3:-4]
+				self.update_windowtitle()
+				self.playlistdata.clear()
+				self.tooltips.set_tip(self.w.statusbox, "Not connected")
+				self.w.prefsbutton.grab_focus()
 				
-				if self.status.state in ['play', 'pause']:
-					row = int(self.songinfo.pos)
-					self.playlistdata[row][1] = make_bold(self.playlistdata[row][1])
+			else:
+				self.w.ppbutton.set_property('sensitive', True)
+				self.w.stopbutton.set_property('sensitive', True)
+				self.w.prevbutton.set_property('sensitive', True)
+				self.w.nextbutton.set_property('sensitive', True)
+				self.w.volumebutton.set_property('sensitive', True)
+				self.w.playlistbutton.set_property('sensitive', True)
+				self.w.rmbutton.set_property('sensitive', True)
+				self.w.clbutton.set_property('sensitive', True)
+				self.w.repeatbutton.set_property('sensitive', True)
+				self.w.shufflebutton.set_property('sensitive', True)
+				self.w.statusimage.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_SMALL_TOOLBAR)
+				#self.w.updateimage.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU)
+				self.tooltips.set_tip(self.w.statusbox, "Connected")
+				self.w.ppbutton.grab_focus()
+				self.prevc = self.conn()
 
-				self.tooltips.set_tip(self.trayeventbox, self.songinfo.artist + ':' + '\n' + self.songinfo.title)
-				self.after_expander_activate(self.w.expander)
+	def update_state(self):
+		if not hasattr(self.status, 'song'):
+			self.status.song = None
+		
+		# Display current playlist
+		if self.prevstatus is None or self.prevstatus.playlist != self.status.playlist:
+			self.update_playlist()
 
-			# If shuffle/repeat have changed, update the button state
-			if self.status.repeat != self.prevstatus.repeat:
-				self.w.repeatbutton.handler_block(self.repeatid)
-				self.w.repeatbutton.set_active('1' == self.status.repeat)
-				self.w.repeatbutton.handler_unblock(self.repeatid)
-			if self.status.random != self.prevstatus.random:
-				self.w.shufflebutton.handler_block(self.shuffleid)
-				self.w.shufflebutton.set_active('1' == self.status.random)
-				self.w.shufflebutton.handler_unblock(self.shuffleid)
+		# Update progress frequently if we're playing
+		if self.status.state in ['play', 'pause']:
+			self.update_progressbar(True)
 
-			# Check if MPD is updating the library
-			if self.prevstatus.get('updating_db', 0) != self.status.get('updating_db', 0):
-				if self.status.get('updating_db', 0):
-					self.w.statusimage.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_SMALL_TOOLBAR)
-					self.tooltips.set_tip(self.w.statusbox, "Updating...")
-				else:
-					self.w.statusimage.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_SMALL_TOOLBAR)
-					self.tooltips.set_tip(self.w.statusbox, "Connected")
-					
-			if self.status.volume != self.prevstatus.volume:
-				self.w.volumescale.get_adjustment().set_value(int(self.status.volume))
+		# If state changes
+		if self.prevstatus is None or self.prevstatus.state != self.status.state:
+			# Update progressbar if the state changes too
+			self.update_progressbar(True)
+			self.update_windowtitle()
+			self.update_songtitle()
+			if self.status.state == 'stop':
+				self.w.ppimage.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)
+				try:
+					self.trayimage.set_from_stock('pygmy', gtk.ICON_SIZE_BUTTON)
+				except:
+					pass
 
-			self.prevstatus = self.status
-			self.prevsonginfo = self.songinfo
-		
-		except (mpdclient.socket.error, EOFError, AttributeError, IndexError):
-			global connections
-			connections = {}
-			self.prevstatus.state = None
-			self.prevstatus.song = None
-			self.prevstatus.playlist = 0
-			self.prevstatus.repeat = 0
-			self.prevstatus.random = 0
-			self.prevstatus.volume = None
-		except KeyboardInterrupt:
-			sys.exit()
-		return True
+				self.tooltips.set_tip(self.w.ppbutton, "Play")
+				# Unbold playing song (if we were playing)
+				if self.prevstatus and self.prevstatus.state == 'play':
+					oldrow = int(self.prevsonginfo.pos)
+					snip = self.playlistdata[oldrow][1]
+					if snip[0:3] == '<b>' and snip[-4:] == '</b>':
+						self.playlistdata[oldrow][1] = snip[3:-4]
+			elif self.status.state == 'pause':
+				self.w.ppimage.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)
+				try:
+					self.trayimage.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)
+				except:
+					pass
+				self.tooltips.set_tip(self.w.ppbutton, "Play")
+			elif self.status.state == 'play':
+				self.w.ppimage.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)
+				try:
+					self.trayimage.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)
+				except:
+					pass
+				self.tooltips.set_tip(self.w.ppbutton, "Pause")
+			if self.status.state in ['play', 'pause']:
+				row = int(self.songinfo.pos)
+				self.playlistdata[row][1] = make_bold(	self.playlistdata[row][1])
 
+		# Only update song info if song has changed
+		if self.prevstatus is None or self.prevstatus.song != self.status.song:
+			if self.stopaftercurrent == True:
+				self.conn().do.stop()
+				self.stopaftercurrent = False
+				return
+			self.update_windowtitle()
+			self.update_songtitle()
+
+			# Unbold all songs.  If you have a better idea, let me know.
+			for song in self.playlistdata:
+				if song[1][0:3] == '<b>' and song[1][-4:] == '</b>':
+					self.playlistdata[song.path[0]][1] = song[1][3:-4]
+			
+			if self.status.state in ['play', 'pause']:
+				row = int(self.songinfo.pos)
+				self.playlistdata[row][1] = make_bold(self.playlistdata[row][1])
+
+			self.tooltips.set_tip(self.trayeventbox, parse_format(self.playlistformat, self.songinfo))
+			self.after_expander_activate(self.w.expander)
+
+		# If shuffle/repeat have changed, update the button state
+		if self.prevstatus is None or self.status.repeat != self.prevstatus.repeat:
+			self.w.repeatbutton.handler_block(self.repeatid)
+			self.w.repeatbutton.set_active('1' == self.status.repeat)
+			self.w.repeatbutton.handler_unblock(self.repeatid)
+		if self.prevstatus is None or self.status.random != self.prevstatus.random:
+			self.w.shufflebutton.handler_block(self.shuffleid)
+			self.w.shufflebutton.set_active('1' == self.status.random)
+			self.w.shufflebutton.handler_unblock(self.shuffleid)
+
+		# Check if MPD is updating the library
+		if self.prevstatus and self.prevstatus.get('updating_db', 0) != self.status.get('updating_db', 0):
+			if self.status.get('updating_db', 0):
+				self.w.statusimage.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_SMALL_TOOLBAR)
+				self.tooltips.set_tip(self.w.statusbox, "Updating...")
+			else:
+				self.w.statusimage.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_SMALL_TOOLBAR)
+				self.tooltips.set_tip(self.w.statusbox, "Connected")
+				
+		if self.prevstatus and self.status.volume != self.prevstatus.volume:
+			self.w.volumescale.get_adjustment().set_value(int(self.status.volume))
+
 	# Don't touch the text every time if timecheckbutton is False
 	def update_progressbar(self, connected):
 		if connected:
@@ -512,6 +502,8 @@
 		if self.status.state in ['play', 'pause']:
 			row = int(self.songinfo.pos)
 			self.playlistdata[row][1] = make_bold(	self.playlistdata[row][1])
+		
+		self.tooltips.set_tip(self.trayeventbox, parse_format(self.playlistformat, self.songinfo))
 			
 	def update_browser(self):
 		self.pm.update_browser(self.playlistformat)
@@ -1136,12 +1128,8 @@
 		pass
 
 def main():
-	try:
-		Pygmy()
-		gtk.main()
-	except KeyboardInterrupt:
-		sys.exit()
-	return 0
+	Pygmy()
+	gtk.main()
 
 if __name__ == "__main__":
 	main()