All pastes #1567638 Raw Edit

richard

public text v1 · immutable
#1567638 ·published 2009-09-15 23:10 UTC
rendered paste body
#!/usr/bin/env python## Random video player# This works by creating a list of all video files in the current dir recursively# It then maintains a list of all files played.# Removes all the files that have been played from the first list, shuffles it# and takes a couple off the top.# # 01/07/2007## Andrew Pangborn# Richard Whittyimport random,osfrom optparse import OptionParserextensions = ["avi","mpeg","mpg","wmv","rm"] # vob?# thse set the program to run in fullscreen and quit afterwardsxine_command = "xine -p=f,q %s"mplayer_command = 'mplayer -fs -framedrop -really-quiet "%s"'# name of the file to store the list of what's been watched inviewed_filename = "viewed.txt"# How many videos to playnumber_to_play = 1# directory to run fromdirectory = "." # dictionaryplayer_commands = {"mplayer":mplayer_command, "xine":xine_command}# The files that have already been watchedviewed = []verbose = Falselistonly = Falsecommand = ""def parse_args() :	global command	global number_to_play	global directory	global verbose	global listonly	parser = OptionParser()	parser.add_option("--number","-n", dest='number',default=1, help="The number of video files to play")	parser.add_option("--directory","-d", dest='directory',default=".", help="Directory to look for video files")	parser.add_option("--player","-p", action='store',type='choice',dest='player',default="xine", help="Media player to use",choices=["mplayer","xine"])	parser.add_option('--verbose','-v',dest='verbose',default=False,action="store_true",help="Verbose, displays playlist")	parser.add_option('--listonly','-l',dest='listonly',default=False,action="store_true",help="Lists the playlist so it can be stuck in some other command.")	options,arguments = parser.parse_args()	command = player_commands[options.player]	verbose = options.verbose	listonly = options.listonly	number_to_play = int(options.number)	directory = options.directory	return# Walks the directory tree...def append_files(list,path,names):        file_listing = os.listdir(path)        for file in file_listing:                extension = file[file.rfind('.')+1:] 				# traverse symlinks                if os.path.islink(path+os.sep+file) :                        os.path.walk(path+os.sep+file,append_files,list)                elif extension and os.path.isfile(path+os.sep+file) and extension in extensions:                        list.append(path+os.sep+file)        return list# Populates the list of files we've already watched from the textfiledef read_viewed_files() :	list = [] # already initialised	try :   		file = open(viewed_filename,'r')		viewed_lines = file.readlines()		for view in viewed_lines:			view = view.strip(os.linesep)			list.append(view)			file.close()	except IOError: pass	return list # adds a filename to the viewed filedef add_to_viewed(filename) :	viewed_file = open(viewed_filename,'a')	viewed_file.write(filename+os.linesep)	viewed_file.close()	return# Plays the videos contained in the list, and adds them to the viewed file.def play_videos(videos_to_play):	#print videos_to_play	files = ""	for f in videos_to_play:		files += " \"" + f + "\" "		#thiscmd = command % f		#print "running " + thiscmd		#os.system(thiscmd)		add_to_viewed(f)	os.system(command % files);	return# does it a different waydef shuffle(list,swaps) :	for i in range(swaps) :		index1 = random.randint(0,len(list)-1)		index2 = random.randint(0,len(list)-1)		foo = list[index1]		list[index1] = list[index2]		list[index2] = foo	return list# main functiondef main():	global viewed	parse_args()	file_list = []	os.path.walk(directory,append_files,file_list)	viewed = read_viewed_files()			if len(file_list) == 0 :		print "ERROR: No playable files found in directory"		return 1	elif len(file_list) - len(viewed)  < number_to_play :		os.remove("viewed.txt")		viewed = read_viewed_files()		print "Resetting viewed list..."	unplayed_files = [name for name in file_list if name not in viewed]	shuffle(unplayed_files,len(unplayed_files)*8)	if listonly :		s=" "		for i in range(number_to_play) :			s=s+'"' + unplayed_files[i] +'" '		print s	elif verbose :		print "\n*****************Here's the playlist:\n"		for i in range(number_to_play) :			print "\t"+str(i+1) + ") " + unplayed_files[i]	else :		play_videos(unplayed_files[0:number_to_play])	return 0if __name__ == "__main__":	main()