iadd radio-play option - annna - Annna the nice friendly bot. Err bitreich.org 70
hgit clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/ URL:git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/ bitreich.org 70
1Log /scm/annna/log.gph bitreich.org 70
1Files /scm/annna/files.gph bitreich.org 70
1Refs /scm/annna/refs.gph bitreich.org 70
1Tags /scm/annna/tag bitreich.org 70
1README /scm/annna/file/README.md.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 43ac6c7ed634ca428ff807b06a9206ecf556c67f /scm/annna/commit/43ac6c7ed634ca428ff807b06a9206ecf556c67f.gph bitreich.org 70
1parent 73e548850a2dc3dc7288f60679b7f468874b57b5 /scm/annna/commit/73e548850a2dc3dc7288f60679b7f468874b57b5.gph bitreich.org 70
hAuthor: Anders Damsgaard <anders@adamsgaard.dk> URL:mailto:anders@adamsgaard.dk bitreich.org 70
iDate: Fri, 9 Aug 2024 16:58:22 +0200 Err bitreich.org 70
i Err bitreich.org 70
iadd radio-play option Err bitreich.org 70
i Err bitreich.org 70
iSigned-off-by: Annna Robert-Houdin <annna@bitreich.org> Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M annna-message-common | 7 +++++++ Err bitreich.org 70
i A ytdl-mpd | 171 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i2 files changed, 178 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/annna-message-common b/annna-message-common /scm/annna/file/annna-message-common.gph bitreich.org 70
i@@ -542,6 +542,13 @@ case "${text}" in Err bitreich.org 70
i suri="$(printf "%s\n" "${word}" | bitreich-speak)" Err bitreich.org 70
i annna-say -s "${server}" -c "${channel}" "${suri}" Err bitreich.org 70
i ;; Err bitreich.org 70
i+"${ircuser}, please radio play "*) Err bitreich.org 70
i+ url="$(printf "%s\n" "${text}" | cut -c 25- | sed 's,\t, ,g')" Err bitreich.org 70
i+ { Err bitreich.org 70
i+ ytdl-mpd -a -m -q "$url" Err bitreich.org 70
i+ annna-say -s "${server}" -c "${channel}" "Please listen on gophers://bitreich.org/9/radio/listen"; Err bitreich.org 70
i+ } & Err bitreich.org 70
i+ ;; Err bitreich.org 70
i "${ircuser}, please radio say "*) Err bitreich.org 70
i word="$(printf "%s\n" "${text}" | cut -c 25- | sed 's,\t, ,g')" Err bitreich.org 70
i annna-say -s "${server}" -c "${channel}" "Please listen on gophers://bitreich.org/9/radio/listen"; Err bitreich.org 70
1diff --git a/ytdl-mpd b/ytdl-mpd /scm/annna/file/ytdl-mpd.gph bitreich.org 70
i@@ -0,0 +1,171 @@ Err bitreich.org 70
i+#!/bin/sh Err bitreich.org 70
i+# fetch a media file, tag it with metadata, and add it to mpd queue Err bitreich.org 70
i+# requirements: yt-dlp, id3tag Err bitreich.org 70
i+ Err bitreich.org 70
i+set -e Err bitreich.org 70
i+ Err bitreich.org 70
i+musicroot="/br/radio/music" Err bitreich.org 70
i+ Err bitreich.org 70
i+die() { Err bitreich.org 70
i+ printf '%s: error: %s\n' "${0##*/}" "$1" >&2 Err bitreich.org 70
i+ exit 1 Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+show_help() { Err bitreich.org 70
i+ printf 'usage: %s [OPTIONS] [URL ..]\n' "${0##*/}" Err bitreich.org 70
i+ echo "downloads music from the web and tags it. Playlists are supported." Err bitreich.org 70
i+ echo "If no URLs are supplied as arguments, they are expected as stdin." Err bitreich.org 70
i+ echo Err bitreich.org 70
i+ echo "OPTIONS are one or more of the following:" Err bitreich.org 70
i+ echo " -a add metadata without interaction" Err bitreich.org 70
i+ echo " -h show this message" Err bitreich.org 70
i+ echo " -m move output music file to $musicroot" Err bitreich.org 70
i+ echo " -q add to mpd queue (requires -m)" Err bitreich.org 70
i+ echo " -t download through torsocks(1)" Err bitreich.org 70
i+ echo " -- do not consider any following arguments as options" Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+ytdl() { Err bitreich.org 70
i+ $prefix yt-dlp \ Err bitreich.org 70
i+ --extract-audio \ Err bitreich.org 70
i+ --audio-quality 0 \ Err bitreich.org 70
i+ --audio-format mp3 \ Err bitreich.org 70
i+ --add-metadata \ Err bitreich.org 70
i+ --output "%(playlist_index)s - %(title)s.%(ext)s" \ Err bitreich.org 70
i+ "$1" Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+handle_url() { Err bitreich.org 70
i+ oldpwd="$PWD" Err bitreich.org 70
i+ outputdir="$(mktemp -d)" Err bitreich.org 70
i+ mkdir -p "$outputdir" Err bitreich.org 70
i+ cd "$outputdir" Err bitreich.org 70
i+ Err bitreich.org 70
i+ album="$(ytdl "$1" | tee /dev/tty | grep 'Finished downloading' | sed 's/.*: //')" Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ $? -ne 0 ]; then Err bitreich.org 70
i+ die "youtube-dl error" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ "$(ls *.mp3 2>/dev/null | wc -l)" -lt 1 ]; then Err bitreich.org 70
i+ printf "youtube-dl error" "$1" Err bitreich.org 70
i+ if [ -n "$DISPLAY" ]; then Err bitreich.org 70
i+ notify -u CRITICAL "youtube-dl error" "$1" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ exit 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ "$auto" = 0 ]; then Err bitreich.org 70
i+ printf "add metadata? [Y/n] " Err bitreich.org 70
i+ read Err bitreich.org 70
i+ else Err bitreich.org 70
i+ REPLY=y Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ case "$REPLY" in Err bitreich.org 70
i+ N|n) Err bitreich.org 70
i+ mv ./*.mp3 "$oldpwd/" Err bitreich.org 70
i+ cd - Err bitreich.org 70
i+ exit 0;; Err bitreich.org 70
i+ esac Err bitreich.org 70
i+ Err bitreich.org 70
i+ artist="Unknown Artist" Err bitreich.org 70
i+ album="${album:-Unknown Album}" Err bitreich.org 70
i+ track=1 Err bitreich.org 70
i+ Err bitreich.org 70
i+ # Loop over files with spaces Err bitreich.org 70
i+ SAVEIFS=$IFS Err bitreich.org 70
i+ IFS=$(printf '\n\b') Err bitreich.org 70
i+ for f in *.mp3; do Err bitreich.org 70
i+ Err bitreich.org 70
i+ [ "$track" = 1 ] && \ Err bitreich.org 70
i+ artist="$(printf '%s' "$f" | \ Err bitreich.org 70
i+ awk -F'-' '{gsub(/^ +/, "", $2); gsub(/ +$/, "", $2); print $2}')" Err bitreich.org 70
i+ Err bitreich.org 70
i+ printf 'file: %s\n' "$f" Err bitreich.org 70
i+ Err bitreich.org 70
i+ song=$(printf '%s' "$f" | sed 's/.* - //; s/^ //; s/\.mp3//') Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ "$auto" = 0 ]; then Err bitreich.org 70
i+ printf 'song [%s]: ' "$song" Err bitreich.org 70
i+ read Err bitreich.org 70
i+ song="${REPLY:-$song}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ printf 'track [%s]: ' "$track" Err bitreich.org 70
i+ read Err bitreich.org 70
i+ track="${REPLY:-$track}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ printf 'album [%s]: ' "$album" Err bitreich.org 70
i+ read Err bitreich.org 70
i+ album="${REPLY:-$album}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ printf 'artist [%s]: ' "$artist" Err bitreich.org 70
i+ read Err bitreich.org 70
i+ artist="${REPLY:-$artist}" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ id3tag --artist="$artist" --album="$album" \ Err bitreich.org 70
i+ --song="$song" --track="$track" \ Err bitreich.org 70
i+ "$f" Err bitreich.org 70
i+ Err bitreich.org 70
i+ track=$(( track + 1 )) Err bitreich.org 70
i+ done Err bitreich.org 70
i+ Err bitreich.org 70
i+ IFS=$SAVEIFS Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ "$move_music" = 1 ]; then Err bitreich.org 70
i+ outdir="$musicroot/$artist/$album" Err bitreich.org 70
i+ mkdir -p "$outdir" Err bitreich.org 70
i+ mv ./*.mp3 "$outdir" Err bitreich.org 70
i+ mpc update --wait >/dev/null Err bitreich.org 70
i+ if [ "$queue" = 1 ]; then Err bitreich.org 70
i+ mpc findadd \ Err bitreich.org 70
i+ artist "$artist" \ Err bitreich.org 70
i+ album "$album" \ Err bitreich.org 70
i+ title "$song" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ else Err bitreich.org 70
i+ mv ./*.mp3 "$oldpwd/" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ rmdir "$outputdir" Err bitreich.org 70
i+ cd - >/dev/null Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+prefix="" Err bitreich.org 70
i+auto=0 Err bitreich.org 70
i+move_music=0 Err bitreich.org 70
i+queue=0 Err bitreich.org 70
i+while :; do Err bitreich.org 70
i+ case "$1" in Err bitreich.org 70
i+ -a) Err bitreich.org 70
i+ auto=1;; Err bitreich.org 70
i+ -h) Err bitreich.org 70
i+ show_help Err bitreich.org 70
i+ exit 0;; Err bitreich.org 70
i+ -m) Err bitreich.org 70
i+ move_music=1;; Err bitreich.org 70
i+ -q) Err bitreich.org 70
i+ queue=1;; Err bitreich.org 70
i+ -t) Err bitreich.org 70
i+ prefix="torsocks";; Err bitreich.org 70
i+ --) Err bitreich.org 70
i+ shift Err bitreich.org 70
i+ break;; Err bitreich.org 70
i+ -?*) Err bitreich.org 70
i+ die "unknown option specified: $1";; Err bitreich.org 70
i+ *) Err bitreich.org 70
i+ break Err bitreich.org 70
i+ esac Err bitreich.org 70
i+ shift Err bitreich.org 70
i+done Err bitreich.org 70
i+ Err bitreich.org 70
i+if [ $# -lt 1 ]; then Err bitreich.org 70
i+ urls="$(cat)" Err bitreich.org 70
i+else Err bitreich.org 70
i+ urls="$@" Err bitreich.org 70
i+fi Err bitreich.org 70
i+ Err bitreich.org 70
i+for u in "$urls"; do Err bitreich.org 70
i+ handle_url "$u" Err bitreich.org 70
i+done Err bitreich.org 70
.
Response:
text/plain