subscriptions script enhanced + mpv update changes

This commit is contained in:
inigoortega 2020-03-31 00:33:34 +02:00
parent 10b93638d6
commit 07ec087826
4 changed files with 129 additions and 40 deletions

View file

@ -11,7 +11,7 @@ export EDITOR="vim"
export VIDEO_FORMATS="mp4,mkv,avi,ogv,webm,divx,wmv,flv"
export AUDIO_FORMATS="mp3,ogg,vorbis,opus,aac,wav,3gp,mpg,flac"
export YTDL_FORMAT='bestvideo[height=1080]+bestaudio/bestvideo[height=1440]+bestaudio/[height=1080]/[height=1440]/bestvideo[height<2160]+bestaudio/bestvideo+bestaudio/best'
export VIDEOPLAYER="mpv --ytdl-format $YTDL_FORMAT"
export VIDEOPLAYER="mpv --ytdl-format=$YTDL_FORMAT"
export AUDIOPLAYER="cmus-remote"
export TERMINAL="st"
export BROWSER="firefox-bin"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env sh
cleanup() {
killall youtube-dl
}
trap cleanup INT TERM
usage() {
echo "Usage: $0 [-f <file>] [-u] [-h]" 1>&2
echo "" 1>&2
@ -14,6 +19,25 @@ usage() {
exit 1
}
video_upload_date() {
fifo="/tmp/wlvfs-fifo$(date +%s%N)"
mkfifo "$fifo"
youtube-dl -o "%(upload_date)s" "$1" 2>/dev/null > "$fifo" &
filename_search_pid="$!"
file=""
while read -r line; do
file=$(echo "$line" | grep 'Destination:')
[ -n "$file" ] && kill -TERM "$filename_search_pid"
done < "$fifo"
rm "$fifo"
file=$(echo "$file" | cut -d " " -f 3)
echo "$file" | sed -E 's|([0-9]+)(\.)(.+)|\1|'
rm "$file.part"
}
while getopts ":uf:" option; do
case "${option}" in
u)
@ -56,57 +80,95 @@ fi
grep -vE '^#|^$|^!' "$subs_file" | while read line; do
channel=$(echo "$line" | awk '{print $1}')
last_video=$(echo "$line" | awk '{print $2}')
upload_frequency=$(echo "$line" | awk '{print $3}')
prev_upload_frequency=$(echo "$line" | awk '{print $4}')
manual_preference=$(echo "$line" | awk '{print $5}')
update_date=$(echo "$line" | awk '{print $3}')
upload_frequency=$(echo "$line" | awk '{print $4}')
prev_upload_frequency=$(echo "$line" | awk '{print $5}')
manual_preference=$(echo "$line" | awk '{print $6}')
new_last_video="$last_video"
new_update_date="$update_date"
new_upload_frequency="$upload_frequency"
new_prev_upload_frequency="$prev_upload_frequency"
new_manual_preference="$manual_preference"
if [ -z "$manual_preference" ]; then
num_w=$(echo "$line" | wc -w)
[ "$num_w" -lt 6 ] && {
echo "Preprocessing: $channel"
if [ -z "$last_video" ] || [ "$last_video" = "-" ]; then
new_last_video=$(youtube-dl --get-id \
"https://invidio.us/channel/$channel" 2>/dev/null \
| head -n 1)
[ -z "$new_last_video" ] && new_last_video="-"
new_upload_frequency=0
new_prev_upload_frequency=0
new_manual_preference=0
elif [ -z "$upload_frequency" ]; then
new_last_video="$last_video"
new_upload_frequency=0
new_prev_upload_frequency=0
new_manual_preference=0
elif [ -z "$prev_upload_frequency" ]; then
new_last_video="$last_video"
new_upload_frequency="$upload_frequency"
new_prev_upload_frequency=0
new_manual_preference=0
else
new_last_video="$last_video"
new_upload_frequency="$upload_frequency"
new_prev_upload_frequency="$prev_upload_frequency"
new_manual_preference=0
fi
sed -E "s|($channel)(\t$last_video)?(\t$upload_frequency)?(\t$prev_upload_frequency)?(\t$manual_preference)?|$channel\t$new_last_video\t$new_upload_frequency\t$new_prev_upload_frequency\t$new_manual_preference|" "$subs_file" -i
fi
case $num_w in
1)
new_last_video=$(youtube-dl --get-id \
"https://invidio.us/channel/$channel" 2>/dev/null \
| head -n 1)
new_update_date=$(video_upload_date $new_last_video)
[ -z "$new_last_video" ] && new_last_video="-"
new_update_date=$(date +'%Y%m%d')
new_upload_frequency=0
new_prev_upload_frequency=0
new_manual_preference=0
;;
2)
if [ "$last_video" = "-" ]; then
new_last_video=$(youtube-dl --get-id \
"https://invidio.us/channel/$channel" 2>/dev/null \
| head -n 1)
[ -z "$new_last_video" ] && new_last_video="-"
new_update_date=$(video_upload_date $new_last_video)
new_upload_frequency=0
new_prev_upload_frequency=0
new_manual_preference=0
else
new_update_date=$(date +'%Y%m%d')
new_upload_frequency=0
new_prev_upload_frequency=0
new_manual_preference=0
fi
;;
3)
new_upload_frequency=0
new_prev_upload_frequency=0
new_manual_preference=0
;;
4)
new_prev_upload_frequency=0
new_manual_preference=0
;;
5)
new_manual_preference=0
;;
esac
sed -E "s|($channel)(\t$last_video)?(\t$update_date)?(\t$upload_frequency)?(\t$prev_upload_frequency)?(\t$manual_preference)?|$channel\t$new_last_video\t$new_update_date\t$new_upload_frequency\t$new_prev_upload_frequency\t$new_manual_preference|" "$subs_file" -i
}
done
# Processing
rm $videos_file 2> /dev/null
grep -vE '^#|^$|^!' "$subs_file" | sort -rg -k 5 -k 4 -k 3 | while read line; do
grep -vE '^#|^$|^!' "$subs_file" | sort -rg -k 6 -k 5 -k 4 | while read line; do
channel=$(echo "$line" | awk '{print $1}')
last_video=$(echo "$line" | awk '{print $2}')
upload_frequency=$(echo "$line" | awk '{print $3}')
prev_upload_frequency=$(echo "$line" | awk '{print $4}')
manual_preference=$(echo "$line" | awk '{print $5}')
update_date=$(echo "$line" | awk '{print $3}')
upload_frequency=$(echo "$line" | awk '{print $4}')
prev_upload_frequency=$(echo "$line" | awk '{print $5}')
manual_preference=$(echo "$line" | awk '{print $6}')
echo "Processing: $channel on Preference: $manual_preference - $prev_upload_frequency"
temp="/tmp/wlvfs"
dash $TSCRIPTS/channel-videos-after.sh "https://youtube.com/channel/$channel" "$last_video" | tee "$temp" | \
dateafter="$update_date"
[ "$update_date" = "-" ] && dateafter=""
dash $TSCRIPTS/channel-videos-after.sh \
"https://youtube.com/channel/$channel" "$last_video" "$dateafter" |
tee "$temp" |
while read video; do
printf "\tFound video: %s\n" "$video"
if [ ! -f "$videos_file" ]; then
@ -120,7 +182,7 @@ fi
{
sleep 5
[ ! -f "$videos_file" ] && echo "ytdl://$video" >> \
$videos_file
$videos_file
} &
fi
done
@ -128,16 +190,17 @@ fi
[ -z "$new_last_video" ] && new_last_video="$last_video"
new_upload_frequency=$(( $(wc -l "$temp" | \
awk '{print $1}') + $upload_frequency ))
new_update_date=$(video_upload_date $new_last_video)
if [ "$update_now" ] || \
{ [ "$(echo "$(date +%j) % 14" | bc)" -eq 0 ] && [ ! "$already_updated" ]; }
then
sed \
"s|$channel\t$last_video\t$upload_frequency\t$prev_upload_frequency|$channel\t$new_last_video\t0\t$new_upload_frequency|" \
"s|$channel\t$last_video\t$update_date\t$upload_frequency\t$prev_upload_frequency|$channel\t$new_last_video\t$new_update_date\t0\t$new_upload_frequency|" \
"$subs_file" -i
else
sed \
"s|$channel\t$last_video\t$upload_frequency\t$prev_upload_frequency|$channel\t$new_last_video\t$new_upload_frequency\t$prev_upload_frequency|" \
"s|$channel\t$last_video\t$update_date\t$upload_frequency\t$prev_upload_frequency|$channel\t$new_last_video\t$new_update_date\t$new_upload_frequency\t$prev_upload_frequency|" \
"$subs_file" -i
fi

View file

@ -3,7 +3,11 @@
channel="$1"
last_watched_video="$2"
youtube-dl --get-id "$channel" 2>/dev/null | while read line &&
[ -n "$3" ] && dateafter="--dateafter $3"
dash "$TSCRIPTS/no-response-timeout.sh" 19 youtube-dl --get-id "$channel" \
$dateafter 2>/dev/null | \
while read -r line &&
[ "$line" != "$last_watched_video" ]; do
echo "$line"
done

View file

@ -0,0 +1,22 @@
#!/usr/bin/env sh
time="$1"
shift
(sleep "$time" && kill -INT "$$" 2>/dev/null) &
checkpoint_pid="$!"
fifo="/tmp/no-response-timout-fifo$(date +%s%N)"
mkfifo "$fifo"
sh -c "$*" > "$fifo" &
while read line; do
kill "$checkpoint_pid"
(sleep "$time" && kill -INT "$$" 2>/dev/null) &
checkpoint_pid="$!"
echo "$line"
done < "$fifo"
rm "$fifo"
kill "$checkpoint_pid" 2>/dev/null