示例#1
0
	def slave_enter_media_view(self):
		loggy.debug('gui.slave_enter_media_view')
		#TODO: check slave_window is a hbox
		self.slave_view = GTK_media_view(self.sb)
		self.slave_windows[0].pack_start(self.slave_view, True, True,0)
		self.slave_windows[0].show_all()
		self.builder.connect_signals(self)
示例#2
0
	def setvol(self, vol):
		loggy.debug('player.setvol')
		self.vol = vol
		#self.set_property('vol', vol)
		#vol = float(vol)/100
		#self.player.set_property('volume', vol)
		return True
示例#3
0
	def delete_pos(self, start, end=None):
		loggy.debug('playlist.delete_pos |{0}|{1}'.format(start, end))
		if end is not None:
			output = self.playlist[start:end]
			del self.playlist[start:end]
		else:
			output = self.playlist[start:start]
			del self.playlist[start]
		return output
示例#4
0
	def setvol(self, vol):
		loggy.debug('player.setvol: ' + str(vol))
		if (vol>100): vol = 100
		if (vol<0): vol = 0
		vol = int(round(vol))
		if (vol != self.vol):
			self.vol = vol
			self.playbin.set_property('volume', float(self.vol)/100)
			self.emit('volume-changed')
		return True
示例#5
0
	def master_tree_cursor_changed(self, widget):
		#TODO: set position in all trees
		loggy.debug('gui.master_tree_cursor_changed')
		(model, iterat) = widget.get_selection().get_selected()
		#print self.slave_windows[0].get_children()
		try:
			self.slave_view.destroy()
		except:
			None

		if iter:
			self.main_tree_modes[model.get_value(iterat,0)]['open_func']()
示例#6
0
	def on_play_state_change(self, player):
		#TODO: - make player only emit one signal for each event
		#state = self.sb.player.getstate()
		loggy.debug('gui.on_play_state_change ' + self.sb.player.state)
		if (self.sb.player.state == 'play'):
			for playbutton in self.widgets['play_buttons']:
				playbutton.set_label(Gtk.STOCK_MEDIA_PAUSE)
		elif (self.sb.player.state == 'pause' or self.sb.player.state == 'stop'):
			for playbutton in self.widgets['play_buttons']:
				playbutton.set_label(Gtk.STOCK_MEDIA_PLAY)
		else:
			loggy.warn('gui.on_play_state_change got unknown state: ' + self.sb.player.state)
示例#7
0
	def addid(self, arg):
		match = re.search('(.*)\s+(\d+)$', arg) #TODO: implement mpdserver.addid - does not remove pos
		if match:
			pos = int(match.group(2))
			uri = match.group(1).strip('\s\'\"')
		else:
			uri = arg.strip('\s\'\"')
			pos = None
		loggy.debug('mpdserver.addid {0}:{1}'.format(uri,pos))
		songid = self.sb.playlist.add_uri(uri, pos)
		if songid is not False:
			return'OK\n'
		raise Exception('could not add file - not located in db')
示例#8
0
	def add_uri(self, uri, pos=None):
		loggy.debug('playlist.add_uri '+str(uri)+str(pos))
		songid = self.sb.sbdb.get_uri_db_info(uri)
		if songid:
			songid = songid['songid']
			if pos is not None:
				self.add_songid(songid, pos)
			else:
				self.add_songid(songid)
			return songid
		else:
			loggy.warn('could not add uri {0} to playlist - not in db')
			return False				
示例#9
0
	def playlist_monitor_changed(self, monitor, file1, file2, event):
		#print ("Changed:",monitor, file1, file2, event)
		if event == Gio.FileMonitorEvent.CREATED or event == Gio.FileMonitorEvent.CHANGED:
			print ( 'file created/changed '+file1.get_path())
			if file1.get_path().lower().endswith('.m3u'):
				self.read_playlist_from_giofile(file1)
		elif event == Gio.FileMonitorEvent.CHANGES_DONE_HINT:
			True # ignore for now
		elif event == Gio.FileMonitorEvent.DELETED:
			print ('file deleted' + file1.get_path())
			self.sb.player.emit('deleted-playlist', file1.get_path())
			if file1.get_path() in self.playlists.keys(): del self.playlists[file1.get_path()]
		else:
			loggy.debug('File Monitor released unimplemented event'+str(monitor)+str(file1)+str(file2)+str(event))
示例#10
0
	def is_listview(self, widget):
		loggy.debug('gui.GTK_media_view.is_listview')
		self.treeview = widget
		widget.connect('row-activated', self.treeview_activated)
		widget.set_model(self.list_store) # init treeview

		widget.tv_columns = {}
		for i, name in enumerate(self.sb.sbdb.keys): # go through all keys
			if name in self.keystoshowdict: #check if column is to display
				widget.tv_columns[name] = Gtk.TreeViewColumn(name)
				widget.insert_column(widget.tv_columns[name], self.keystoshowdict[name]) # inserts column in order from keystoshow
				widget.tv_columns[name].cell = Gtk.CellRendererText()
				widget.tv_columns[name].pack_start(widget.tv_columns[name].cell, True)
				widget.tv_columns[name].add_attribute(widget.tv_columns[name].cell, 'text', i)
				widget.tv_columns[name].set_resizable(True)
				#widget.tv_columns[name].set_clickable(True)
				widget.tv_columns[name].connect('clicked', self.tv_clicked, i)
				#widget.tv_columns[name].set_sort_indicator(True)
		widget.columns_autosize()
示例#11
0
	def add_songid(self, songid, pos=None):
		loggy.debug('playlist.add_songid |{0}|{1}'.format(songid, pos))
		if pos is not None:
			self.playlist.insert(pos, songid)
		else:
			self.playlist.append(songid)
示例#12
0
	def on_playbutton_click(self, widget):
		loggy.debug('gui.on_playbutton_click')
		widget.set_relief(Gtk.ReliefStyle.NONE)
		self.sb.player.playpause()
示例#13
0
	def on_button3_clicked(self, button):
		loggy.debug('GTK_media_view.on_button3_clicked')
		self.sb.sbdb.update_db()
		True
示例#14
0
	def tv_clicked(self, widget, i):
		loggy.debug('gui.GTK_media_view.tv_clicked')
		widget.set_sort_column_id(i)
示例#15
0
	def treeview_activated(self, treeview, path, view_column):
		loggy.debug('gui.GTK_media_view.treeview_activated')
		(model, iterat) = treeview.get_selection().get_selected()
		if iterat:
			self.sb.playlist.load_uri(self.list_store.get_value(iterat,len(self.sb.sbdb.keys)-2))
			self.sb.playlist.playlist = [self.list_store.get_value(iterat,len(self.sb.sbdb.keys)-2)]
示例#16
0
	def slave_enter_now_playing_view(self):
		self.slave_view = GTK_now_playing(self.sb)
		self.slave_windows[0].pack_start(self.slave_view, True, True,0)
		self.slave_windows[0].show_all()
		self.builder.connect_signals(self)
		loggy.debug('gui.slave_enter_now_playing_view')
示例#17
0
	def is_slave_area(self, widget):
		loggy.debug('gui.is_slave_area')
		self.slave_windows.append(widget) #TODO: allow multiple separate master/slave combos
示例#18
0
		def set(self, value):
			value = bool(value)
			if self.toggle != value:
				self.toggle = value
				loggy.debug('playlist.set {0}'.format(value))
				self.emit('changed', value)				
示例#19
0
def is_video_out(self, widget):
	loggy.debug('is_video_out')

	self.player.vidout['xid'] = widget.window.xid
示例#20
0
	def handler(self, conn, *args):
		'''Asynchronous connection handler. Processes each line from the socket.'''
		buff = conn.recv(65536) #TODO: handle if more on conn to recieve than 4096
		if not len(buff):
			loggy.log( "mpdserver Connection closed - no input." )
			return False
		elif len(buff)>60000:
			loggy.warn('mpdserver Connection buff full, data may be lost' . buff)
		#loggy.log('MPD Server got:' +buff)
		while '\n' in buff:
			(line, buff) = buff.split("\n", 1)
			output = ''
			if not len(line):
				loggy.log( "mpdserver Connection closed - no input." )
				return False
			else:
				arg = line.strip().split(' ', 1) #strips whitespace from right and left, then splits first word off as command
				command = arg[0].lower() # prevents case sensitivity
				#TODO: reimplement using a dict?
				if (len(arg)>1): # if there are arguments to the command
					args = arg[1].strip()
				else:
					args = ''
				#Tries to recognise command
				#Playback control
				func = None
				loggy.debug('mpdserver got {0} {1}'.format(command, args))
				# Makes sure command is not internal function
				if command in self.list_of_commands:
					#loggy.warn('mpdserver attempt to access internals {0}'.format(command))
				#Searches for command in current class
					try:
						func = getattr(self, command)
					except Exception as detail:
						output = 'ACK 50@1 {{{0}}} Command not recognised\n'.format (command)
						loggy.warn('mpdserver: {0}'.format(output))
						self.queueing = False
						self.ok_queueing = False
					else:
						#Executes command
						try:
							output = func(args)
						except Exception as detail:
							output = 'ACK 50@1 {{{0}}} {1} {2} {3}\n'.format(command, detail, str(type(detail)), traceback.format_exc().replace('\n', '|')) 
							loggy.warn('mpdserver: {0}'.format(output))
							self.queueing = False
							self.ok_queueing = False
				else: # not in list_of_commands
					output = 'ACK 50@1 {{{0}}} Command not in command list\n'.format (command)
					loggy.debug('mpdserver {0} not in command list'.format(command))
				#Handles output - with respect to list queueing
				if not output:
					output = 'ACK 1@1 {{{0}}} Command returned no output - not implemented yet\n'.format(command)
					loggy.warn('mpdserver: {0}'.format(output))
				elif output.startswith('ACK'):
					self.queueing = False
					self.ok_queueing = False
					output = self.queue + output
					self.queue = ''
				if self.ok_queueing:
					#if output[-3:-1] == 'OK':
						#output = output[:-3] + 'list_OK\n'
					output = output.replace("OK", "list_OK")
					self.queue += output
					output = ''
				elif self.queueing:
					self.queue += output
					output = ''
				#send output
				if (output != None):
					loggy.debug( 'MPD Server sending: {0}'.format( output) )
					conn.send(output)
		return True
示例#21
0
	def playpause(self):
		loggy.debug('player.playpause')
		if self.player.get_state()[1] == gst.STATE_PLAYING:
			self.player.set_state(gst.STATE_PAUSED)
		else:
			self.player.set_state(gst.STATE_PLAYING)
示例#22
0
	def playpause(self):
		loggy.debug('player.playpause')
		if self.player.get_state()[1] == Gst.State.PLAYING:
			self.pause()
		else:
			self.play()
示例#23
0
def on_playbutton_click(self, widget):
	loggy.debug('gui.on_playbutton_click')
	self.player.playpause()
示例#24
0
def on_button3_clicked(self):
	loggy.debug('GTK_media_view.on_button3_clicked')
示例#25
0
def slave_enter_now_playing_view(self):
	loggy.debug('gui.slave_enter_now_playing_view')
示例#26
0
	def getvol(self):
		#vol = round(self.playbin.get_property('volume')*100)
		loggy.debug('player.getvol: ' + str(self.vol))
		return self.vol
示例#27
0
	def on_async_done(self, player):
		loggy.debug('gui.on_async_done')
		self.on_update_tags()
示例#28
0
	def is_video_out(self, widget):
		loggy.debug('is_video_out')
		self.sb.player.vidout['xid'] = widget.get_property('window').get_xid() # don't forget to import GdkX11!
		self.sb.player.videosink.set_xwindow_id(self.sb.player.vidout['xid'])
示例#29
0
 def playpause(self):
     loggy.debug('player.playpause')
     if self.player.get_state(1)[1] == Gst.State.PLAYING: #?need to add timeout to get state?
         self.player.set_state(Gst.State.PAUSED)
     else:
         self.player.set_state(Gst.State.PLAYING)