#!/bin/bash # bash script to play files from a slow network ressource, FTP folder, samba share or network drive etc. # caches the file in /tmp and moves to $ARCHIV # -y to skip verification # export global variable $ARCHIV # set the exit code right for quitting # echo "q quit 255" >> ~/.mpv/input.conf printhelp(){ echo "Bash script to play and cache files from a slow network ressource" echo "" echo " -d only remove the file in /tmp" echo " -g don't ask for downloading" echo " -h prints this help" echo " -n don't ask for moving" echo " -y move to archiv without question" echo " -o ask for a different archiv" echo " --no-cache Not caching the file, instead play's directly" exit 0 } cache=1 while true; do case "$1" in --no-cache|--nc) cache=0 shift ;; -y|-Y|--yes|-j|-ja) verify="yes" shift ;; -d|--rm|--remove) verify="rm" shift ;; -o|--other|--ot) verify="other" shift ;; -n|--no|--nope|--nein) verify="no" shift ;; -g|--download|--down) download="yes" shift ;; -h|--help) printhelp ;; --) shift #stops processing arguments break ;; -*) echo "'$1' Unknown argument." exit 1 ;; *) break ;; esac done if [ $# -eq 0 ]; then printhelp fi if [ $# -gt 1 ]; then echo "Do not commit more than one file." exit 1 fi if [ ! -f "$1" ]; then echo "No valid file input." exit 1 fi player[0]=$(command -v mpv) #media player of choice player[1]=$(command -v mplayer) player[2]=$(command -v vlc) #you shouldn't use vlc for i in "${player[@]}"; do if [ ! $i = "" ]; then player=$i break fi done if [ ! $player ]; then echo "No media player found. Please edit this script manually. I recommend the mpv. http://mpv.io" exit 1 fi if [ $cache -gt 0 ]; then if [ ! $ARCHIV ]; then echo "Note: Variable \$ARCHIV couldn't be found. It will play the file fine, but you should consider to organize your collection." read -p "You can export it temporarily. If you do, just type the path to the folder, if you don't, leave it empty. " path if [ "$path" ] && [ -d "$path" ] && [ -w "$path" ]; then export ARCHIV="$path" echo "Roger that!" fi fi pwd=$(pwd) if [ -d /tmp ] && [ -w /tmp ]; then tmp="/tmp" else read -p "Please name the directory to cache the file: " tmp if [ ! -d "$tmp" ] || [ ! -w "$tmp" ]; then echo "Directory doesn't exist or you don't have write permission." exit 1 fi fi if [[ "$@" =~ ^https?://.+\.[a-z]{2}[a-z]* ]]; then read -p "Detected hyperlink. Should we try to download (caching)? Type something random to play direct with the mpv. [y/N] " download if [[ $download = "ja" ]] || [[ $download = "yes" ]] || [[ $download = "j" ]] || [[ $download = "y" ]] || [[ $download = "Y" ]]; then cd "$tmp" wget -q -O "file" "$@" & echo "Starting download. Ready to play in 2 sec." sleep 2 mpv $file echo "TODO: Moving to archiv. Not implemented yet." exit 0 elif [[ $player =~ mpv$ ]] && [ $download ] && ( [ ! $download = "n" ] && [ ! $download = "N" ] && [ ! $download = "no" ] && [ ! $download = "nein" ] && [ ! $download = "NO" ]); then echo "Playing directly using mpv." mpv "$@" if [ $? -eq 0 ]; then echo "Have a nice day!" exit 0 else echo "Something is broken with the media player!" exit 1 fi else echo "This script is designed to cache media files from a FTP share or network drive. Exiting. " exit 1 fi else file=$(basename "$@") if [ -f "$tmp/$file" ]; then skip=true fi cp -u -i "$@" "$tmp" & cd "$tmp" #file=${@##*/} if [ ! $skip ]; then echo -n "Preparing the awesome! Starting playback in.." echo -n " 2," sleep 1 echo -n " 1 " sleep 1 fi echo "Start!" fi else echo -n "Preparing the awesome! Starting playback in.." file="$@" echo -n "Now!" fi $player "$file" if [ $? -eq 0 ]; then if [ -d $ARCHIV ] && [ -w $ARCHIV ] && [ $ARCHIV ]; then echo "Finished $file succesfull." if [ ! $verify ]; then read -p "Should we move everything to the archiv? ($ARCHIV) [Y/n/rm/other] " verify fi if [ ! $verify ] || [ $verify = "ja" ] || [ $verify = "yes" ] || [ $verify = "j" ] || [ $verify = "y" ] || [ $verify = "Y" ]; then echo "Moving the stuff to $ARCHIV." mv -v "$file" "$ARCHIV" if [ $? -eq 0 ]; then cd "$pwd" rm -v "$@" fi elif [ $verify = "other" ] || [ $verify = "o" ] || [ $verify = "O" ] || [ $verify = "OTHER" ]; then read -p "Please tell us the absolute path: " path if [ -d $path ] && [ -w $path ]; then echo "Moving to $path." mv -v "$file" "$path" if [ $? -eq 0 ]; then cd "$pwd" rm -v "$@" fi else echo "Sorry, \"$path\" doesn't exist." exit 1 fi elif [ $verify = "r" ] || [ $verify = "rm" ] || [ $verify = "remove" ] || [ $verify = "RM" ] || [ $verify = "R" ]; then echo "Cleaning the mess up. Only removing files from $tmp." rm -v "$file" else echo "Okay, don't touching the files." fi else echo "Can't move to \"$ARCHIV\". Directory doesn't exist or you don't have write permission." exit 1 fi else echo "Something is broken with the media player!" exit 1 fi echo "Have a nice day!" exit 0