This script will get MPV watch history from files watch_later dir and display them in reverse order of watch. The list is numbered and a prompt for a number will play the desired file in MPV

Need line “write-filename-in-watch-later-config=yes” in mpv.conf Deps rg (ripgrep)

#!/usr/bin/env bash
# Return mpv watch history oldest to newest. 
# Need line "write-filename-in-watch-later-config=yes" in mpv.conf
# Deps rg

watch_later_dir="$HOME/.config/mpv/watch_later/"

SAVEIFS=$IFS
IFS=$'\n'

if [ ! -d "$watch_later_dir" ]; then
    echo "Specified dir doesn't exist: $watch_later_dir"
    echo "Set var watch_later_dir to your watch later dir"
    echo "also, mpv.conf should have line \"write-filename-in-watch-later-config=yes\""
    exit 1
fi

watch_later_files="$(find "$watch_later_dir" -type f -printf "%T@ %p\n" | sort | sed 's/^\([0-9]\+\.[0-9]\+\) //')"

file_count=$(find "$watch_later_dir" -type f | wc -l)

if [ "$file_count" -eq 0 ]; then
    echo "no files found in \"$watch_later_dir\""
    exit 1
fi

watch_later_files=($watch_later_files) 

filepaths_not_echoed="$(for (( i=0; i<${#watch_later_files[@]}; i++ ))
do
  cat "${watch_later_files[$i]}" | rg -o --color=never '(/|http).*'
done)"

filepaths_not_echoed=($filepaths_not_echoed) 

# Reverse the order of array
length=${#filepaths_not_echoed[@]}
for ((i=0; i<length/2; i++)); do
    temp="${filepaths_not_echoed[i]}"
    filepaths_not_echoed[i]="${filepaths_not_echoed[length-i-1]}"
    filepaths_not_echoed[length-i-1]="$temp"
done

filepaths="$(for (( i=0; i<${#watch_later_files[@]}; i++ ))
do
  echo -n "$(( $i - $file_count +1 )) " | sed 's/^-//' 
  cat "${watch_later_files[$i]}" | rg -o --color=never '/.*'
done)"

#echo "$filepaths" | perl -pe 's/^(\d+ ).*\//$1/g' | rg \
echo "$filepaths" | sed -E 's/^([0-9]+ ).*\//\1/g' | rg \
  --colors 'match:none' \
  --colors 'match:fg:0,200,0' \
  --colors 'match:bg:0,0,0' \
  --colors 'match:style:bold' \
  "[^0-9 ].*" 

IFS=$SAVEIFS

read -p "Enter number to play " selection

echo "${filepaths_not_echoed[$selection]}"

setsid >/dev/null 2>&1 </dev/null \
mpv "${filepaths_not_echoed[$selection]}" 2>&1 >/dev/null & 
No comments yet!

Bash

!bash@lemmy.ml

Create post

Talk about the Bash Shell and Bash scripting

Community stats

  • 11

    Monthly active users

  • 31

    Posts

  • 26

    Comments

Community moderators