#!/bin/bash

# Title......: lm
# Description: list media
# Author.....: Mitchell Johnston - uid 0
# Contact....: mitch@crn.hopto.org 
# Updated....: Sat 13 Jul 2024 02:44:40 AM CDT
#----------------------------------

# variables
#----------------------------------
[ "$1" == "-D" ] && DEBUG=1 && shift 1     # -D to turn on debug mode
PS4='$SECONDS $LINENO: '                   # debug prompt
DOW=$(date +%a)                            # day of week: Thu
TODAY=$(date +%m/%d)                       # month/day: 03/25
DOM=$(date +%d)                            # day of month: 25
OS=$(uname -s)                             # OS type: SunOS Linux
NAME=${0##*/}                              # name of the script
LOG=~/etc/${HOSTNAME}.log                  # my log file

# Colors - uncomment if needed
R=$(tput setaf 1)                          # red
BR=$(tput setaf 1; tput bold)              # bold red
G=$(tput setaf 2)                          # green
BG=$(tput setaf 2; tput bold)              # bold green
Y=$(tput setaf 3)                          # yellow
BY=$(tput setaf 3; tput bold)              # bold yellow
B=$(tput setaf 4)                          # blue
BM=$(tput setaf 5; tput bold)              # bold magenta
C=$(tput setaf 6)                          # bold cyan
BC=$(tput setaf 6; tput bold)              # bold cyan
BL=$(tput setaf 7; tput bold)              # bold light grey
BLD=$(tput bold)                           # bold
N=$(tput sgr0)                             # normal
SIT=$(tput sitm)                           # italics
RIT=$(tput ritm)                           # remove italics
UL=$(tput smul)                            # turn underline on
NL=$(tput rmul)                            # turn underline off
RV=$(tput rev)                             # turn on reverse mode
ROWS=$(tput lines)
COLS=$(tput cols)

# functions
#----------------------------------

bl(){ ## write a blank line
	# Use: bl
	[ "$DEBUG" == "1" ] && set -x
    echo ""
}

html(){ ## mark up code
    vim -f +"syn on" +"set nonu" +"set foldenable!" +"set nospell" +"run! syntax/2html.vim" +"wq" +"q" $1
}

log(){ ## creates a basic log entry $LOG must be defined
	# Use: log {entry}   or log (no option to view)
	[ "$DEBUG" == "1" ] && set -x
	if [ "$#" -eq 0 ] # if not adding then display lat 7 entries
	then
		echo $BC
		vd $LOG 2>/dev/null ||tail -7 $LOG # display with VisiData, if installed
		echo $N
	else
		echo -e "$(date '+%D%t%T')\t${NAME}\t$*">>"$LOG"
	fi
}

pause(){ ## simple pause routine
	# Use: pause  {optional number of seconds} or "-nt" for no time out 
	[ "$DEBUG" == "1" ] && set -x
	[ "$1" == "-nt" ] && TMOUT="" && shift
    echo "$BY";
    if [ $# -gt 0 ]
	then
		read -t $1 -r -p "${C}Hit any key (${BY}$1${C} second timeout)${N}" -n 1 FOO;
    else
		read -r -p "${C}Hit any key${N}" -n 1 FOO;
    fi;
    bl
}

xtitle(){ ## set window title
	# Use: xtitle "Text to display"
    printf "\033]0;%s\007" "$*"
}

# setup
#----------------------------------

# this provides a quick way to edit all my scripts on the fly
if [ "$1" == "-E" ]
then
	vim $0
	sed -i -e "7s/.*/# Updated....: $(date)/" $0
    html $0
    cp $0 /var/www/unix
    mv $0.html /var/www/unix
    cp $0 /var/gopher/scripts
    exit
fi

# display help if needed
if [ "$1" == "-h" ] || [ "$1" == "--help" ]
then
fmt -s -w $(tput cols) <<END
$NAME   # list media, displays mp4's and mp3's in a directory and gives run time

${BG}lm${N} ${BY}{/path}${N}

         # no option performs listing in current directory
{/path}  # performs function on path noted

${UL}List mp4 files first and then mp3 files.${N}
END
exit
fi

# listing of required apps
command -v bash >/dev/null || sudo apt install bash -qyy
command -v ffmpeg >/dev/null || sudo apt install ffmpeg -yyq 
command -v exiftool >/dev/null || sudo apt install libimage-exiftool-perl -yyq 
command -v exa >/dev/null || sudo apt install exa -yyq 

# main
#--------------------------- 
[ "$DEBUG" == "1" ] && set -x

[ "$#" -eq 1 ] && [ -d $1 ] && cd $1           # one option and its for directory

## No media, just do  file listing
if [ $(ls -A *.mp? *.m4v 2>/dev/null|wc -l) -lt 1 ]
then
    exa --header --icons --tree --level=1 -l --group-directories-first
    exit 1
fi

for f in $(\ls -S -r *.mp?)
    do
        chmod a-x *.mp? # rm the executable that come from winblows
        ffmpeg -i "$f" 2>&1 | grep --color=always Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo -n " " && exa --icons "$f";
    done

## display total
bl 
echo "${BY}Total: $(exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_) }' ./*.mp4 2>/dev/null| tail -n1)$N"
bl

## clean up
[ -f /tmp/$$ ] && rm /tmp/$$ >/dev/null 2>&1 || :