Add a parallel job processing tool
[shutils.git] / mp-play
1 #!/bin/bash
2
3
4 playlist=.playlist.tmp
5 player="/usr/bin/mplayer"
6 if [ -x "/usr/bin/mplayer2" ]; then
7 player="/usr/bin/mplayer2"
8 fi
9
10 playeropts=""
11 $player -af help | grep -q bs2b && playeropts="${playeropts} -af-add bs2b"
12
13
14 optRandom=""
15 optRepeat=""
16 optRecursive=0
17 optRemove=0
18 optQuiet=""
19 optVerbose=0
20 optReverse=0
21 optSorttime=0
22
23
24 function showHelp
25 {
26 echo "Usage: $0 [-h|--help]"
27 echo " $0 [OPTIONS] [--] [DESTINATIONS]"
28 echo ""
29 echo "OPTIONS:"
30 echo " -a, --recursive recursively find files to play"
31 echo " -h, --help show this message"
32 echo " -q, --quiet do not produce output when playing"
33 echo " -r, --repeat repeat playing infintely"
34 echo " -R, --random randomize files"
35 echo " --remove ask to remove played files after playing"
36 echo " --reverse reverse playing order"
37 echo " --time sort by age of file"
38 echo " -v, --verbose produce more output"
39 }
40
41 if ! options=$(getopt -u -o hRravq -l time,random,repeat,recursive,reverse,remove,quiet,verbose -- "$@")
42 then
43 showHelp >&2
44 exit 1
45 fi
46 set -- $options
47
48 #Parse the arguments
49 while [ $# -gt 0 ]
50 do
51 case "$1" in
52 -h|--help) showHelp; exit 0 ;;
53 -R|--random) optRandom="-shuffle" ;;
54 -r|--repeat) optRepeat="-loop 0" ;;
55 -a|--recursive) optRecursive=1 ;;
56 -v|--verbose) optVerbose=1 ;;
57 -q|--quiet) optQuiet="-quiet" ;;
58 --remove) optRemove=1 ;;
59 --reverse) optReverse=1 ;;
60 --time) optSorttime=1 ;;
61 --) shift; break ;;
62 -*) echo "Unrecognized option $1" >&2; showHelp >&2; exit 1 ;;
63 *) break ;;
64 esac
65 shift
66 done
67
68
69
70 if [ "$optRecursive" == "1" ]; then
71 maxlevel=9999
72 else
73 maxlevel=1
74 fi
75
76
77 # Create playlist
78 find "$@" -maxdepth $maxlevel -type f \
79 -iname "*.mp3" -or -iname "*.avi" -or -iname "*.flv" \
80 -or -iname "*.mp4" -or -iname "*.ogg" \
81 | sort > $playlist
82
83 [ "$optSorttime" == "1" ] && cat "$playlist" | xargs ls --sort=time | sponge "$playlist"
84 [ "$optReverse" == "1" ] && cat "$playlist" | tac | sponge "$playlist"
85
86
87 cntfiles=`wc -l $playlist | cut -d " " -f 1`
88
89 #No files found...
90 if [ "$cntfiles" == "0" ]
91 then
92 echo "No files found."
93 exit 1
94 fi
95
96
97
98 echo "Playing $cntfiles files..."
99 echo ""
100
101 # Print playlist, if we ask for removing files later
102 if [ "$optRemove" == "1" -o "$optVerbose" == "1" ]; then
103 cat $playlist
104 fi
105
106
107 # Play it
108 $player $playeropts $optQuiet $optRandom $optRepeat -playlist "$playlist"
109
110
111 # Remove the files in the playlist
112 if [ "$optRemove" == "1" ]; then
113 echo ""
114 echo -n "Removing played files? (y/a/N) "
115 read isdel
116 if [ x"y" == x"$isdel" ]; then
117 rm -v `cat $playlist`
118 elif [ x"a" == x"$isdel" ]; then
119 rm -v -i `cat $playlist`
120 fi
121 fi
122
123 #Remove the playlist itself
124 rm -f $playlist
125