summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xamg161
-rwxr-xr-xdmount25
2 files changed, 178 insertions, 8 deletions
diff --git a/amg b/amg
new file mode 100755
index 0000000..9162e6b
--- /dev/null
+++ b/amg
@@ -0,0 +1,161 @@
+#!/bin/sh
+
+#{{{ printhelp
+printhelp () {
+ printf "amg: Auto Music Grabber; script to download, format, and tag music.\n"
+ printf " -h) prints this help message.\n"
+ printf " -u X) uses X for the URL to download from.\n"
+ printf " -s) processes the url as a single track as a single song.\n"
+ printf " -l) processes the url as a single track as an album.\n"
+ printf " -p) processes the yrk as a playlist as an album.\n"
+ printf " -a X) sets the artist name to X.\n"
+ printf " -A X) sets the album name to X.\n"
+ printf " -t X) sets the track name to X (only for a single song).\n"
+ printf " -T X) sets the track number to X (only for a single song).\n"
+ printf " -y X) sets the date to X.\n"
+ exit
+}
+#}}}
+
+#{{{ getopts
+unset ALBUM ARTIST MODE TITLE TRACKNUM YEAR
+while getopts "hslpu:a:A:t:T:y:" arg; do case "${arg}" in
+ s) MODE='single' ;;
+ l) MODE='split' ;;
+ p) MODE='album' ;;
+ u) URL="$OPTARG" ;;
+ a) ARTIST="$OPTARG" ;;
+ A) ALBUM="$OPTARG" ;;
+ t) TITLE="$OPTARG" ;;
+ T) TRACKNUM="$OPTARG" ;;
+ y) YEAR="$OPTARG" ;;
+ *) printhelp ;;
+esac done
+#}}}
+
+#{{{ print given args
+printf "Received Tags:
+Artist: $ARTIST
+Album: $ALBUM
+Song: $TITLE
+Number: $TRACKNUM
+Year: $YEAR\n\n"
+#}}}
+
+#{{{ fill in missing variables
+# prompt to determine later tagging
+if [ -z "$MODE" ]; then
+ printf "Will the link be for a [p]laylist, a[l]bum video, or [s]ong video? "
+ read RESPONSE
+ case "$RESPONSE" in
+ p) MODE='album' ;;
+ l) MODE='split' ;;
+ s) MODE='single' ;;
+ *) printhelp ;;
+ esac
+ printf "\n"
+fi
+
+# prompt to get the URL
+if [ -z "$URL" ]; then
+ printf "Enter the link: "
+ read URL
+ printf "\n"
+fi
+#}}}
+
+#{{{ base logic for certain modes
+# if song, don't download playlist
+case "$MODE" in
+ s)
+ SPLITTER_FLAGS="--no-playlist"
+ ;;
+ l)
+ SPLITTER_FLAGS="--no-playlist"
+ unset TITLE TRACKNUM
+ ;;
+ p)
+ unset TITLE TRACKNUM
+ ;;
+esac
+#}}}
+
+#{{{ download the video(s)
+printf "Starting download...\n\n"
+if [ "$(ls | wc -l)" -gt 0 ]; then
+ printf "Already downloaded\n"
+else
+ yt-dlp $SPLITTER_FLAGS --format bestaudio --restrict-filenames "$URL"
+fi
+printf "Download stopped.\n\n"
+#}}}
+
+#{{{ while loop to remove files from list
+printf "\n\nDo you want to remove any tracks?\n\n"
+while true; do
+ ls | nl
+ echo -n "Enter the line number of the file to remove:\n"
+ read WHILE_RESPONSE
+ [ -z "$WHILE_RESPONSE" ] && break
+ rm -rf `ls | head -n "$WHILE_RESPONSE" | tail -1`
+done
+#}}}
+
+#{{{ convert the downloaded files to mp3
+printf "\n\nStarting to convert files..."
+for i in `ls *.m4a *.webm`; do
+ imp3=`echo "$i" | sed 's/\.m4a$/.mp3/;s/\.webm$/.mp3/'`
+ [ ! -f "$imp3" ] && ffmpeg -i "$i" -acodec mp3 "$imp3" || echo "File not converted"
+done
+printf "Finished converting files.\n\n"
+#}}}
+
+#{{{ tag files
+printf "\n\n"
+for file in `ls *.mp3`; do
+ printf "$file\n"
+ if [ -z "$ARTIST" ]; then
+ printf "\nWho is the artist? "
+ read ARTIST
+ fi
+ if [ -z "$ALBUM" ]; then
+ printf "\nWhat is the album? "
+ read ALBUM
+ fi
+ if [ -z "$TITLE" ]; then
+ printf "\nWhat is the title? "
+ read TITLE
+ fi
+ if [ -z "$TRACKNUM" ]; then
+ printf "\nWhat is the track number? "
+ read TRACKNUM_
+ TRACKNUM="$(printf "%02d" "$TRACKNUM_")"
+ unset TRACKNUM_
+ fi
+ if [ -z "$YEAR" ]; then
+ printf "\nWhat is the release date? "
+ read YEAR
+ fi
+ case "$TRACKNUM" in
+ [!0-9]*)
+ unset TRACKNUM
+ printf "\n$TRACKNUM doesn't look like a track number!\n" 1>&2
+ ;;
+ esac
+ [ -n "$ARTIST" ] && kid3-cli -c "set 'Artist' '$ARTIST'" "$file"
+ [ -n "$ALBUM" ] && kid3-cli -c "set 'Album' '$ALBUM'" "$file"
+ [ -n "$TITLE" ] && kid3-cli -c "set 'Title' '$TITLE'" "$file"
+ [ -n "$TRACKNUM" ] && kid3-cli -c "set 'Track Number' '$TRACKNUM'" "$file"
+ [ -n "$YEAR" ] && kid3-cli -c "set 'Date' '$YEAR'" "$file"
+ printf "\n\n$file\n"
+ kid3-cli -c get "$file"
+ printf "\n"
+ NEWFILENAME="${ARTIST}_-_${ALBUM}_-_${TRACKNUM:-00}_${TITLE}.mp3"
+ NEWFILENAME="$(printf "%s" "$NEWFILENAME" | sed 's/ /_/g;s/[!@#$%^&*()-_=+{}\|;:,.<>/?`~'"\[\]\'\""']//g')"
+ [ -n "${ARTIST}" -a -n "${ALBUM}" -a -n "${TITLE}" ] && mv "$file" "$NEWFILENAME"
+ unset TITLE TRACKNUM
+ printf "\n$NEWFILENAME\n"
+done
+
+printf "\n\nDone.\n"
+#}}}
diff --git a/dmount b/dmount
index bbfd587..bc49df5 100755
--- a/dmount
+++ b/dmount
@@ -29,6 +29,8 @@ while getopts "hpPugd:" o; do case "${o}" in
exit 1;;
esac done
+IS_HFS=""
+
if [ -n "$WAYLAND_DISPLAY" ]; then
DMENU="tofi"
DEFARGS="-c $HOME/.config/tofi/themes/dmenu_vertical --prompt-text"
@@ -89,24 +91,31 @@ getmount() { \
mount_device () {
getmount "/mnt /media /mount /home -maxdepth 3 -type d -empty $alreadymounted"
- if [ -z "$USE_USER_ID" ]; then
- doas mount "$1" "$mp" && show "Mounted successfully\n"
- else
+ if [ -n "$USE_USER_ID" ]; then
if [ -n "$USERID" -a -n "$GROUPID" ]; then
- MOUNTPROPS="uid=$USERID,gid=$GROUPID"
+ MOUNTPROPS="-o uid=$USERID,gid=$GROUPID"
elif [ -n "$USERID" ]; then
- MOUNTPROPS="uid=$USERID"
+ MOUNTPROPS="-o uid=$USERID"
elif [ -n "$GROUPID" ]; then
- MOUNTPROPS="gid=$GROUPID"
+ MOUNTPROPS="-o gid=$GROUPID"
+ else
+ MOUNTPROPS="-o $(grep "$(whoami)" /etc/passwd | sed 's/:/ /g' | awk '{print "uid="$3",gid="$4}')"
+ fi
+ fi
+ if [ -n "$IS_HFS" ]; then
+ MOUNTARGS="-t hfsplus"
+ if [ -z "$MOUNTPROPS" ]; then
+ MOUNTPROPS="-o force,rw"
else
- MOUNTPROPS="$(grep "$(whoami)" /etc/passwd | sed 's/:/ /g' | awk '{print "uid="$3",gid="$4}')"
+ MOUNTPROPS="${MOUNTPROPS},force,rw"
fi
- doas mount -o "$MOUNTPROPS" "$1" "$mp" && show "Mounted successfully\n"
fi
+ doas mount $MOUNTARGS $MOUNTPROPS "$1" "$mp" && show "Mounted successfully\n"
}
DEVICE="$(get_available | $DMENU $DEFARGS "Devices" $ARGS )"
[ -z "$DEVICE" ] && exit 1
+echo "$DEVICE" | grep -q "hfsplus" && IS_HFS="y"
chosen="${DEVICE%% *}"
if [ -n "$(is_crypto "$chosen")" ]; then