usage() { echo "Usage: ./ytdl [URL] [options]" echo "Download an mp3 from a given URL, process it, and optionally move it to the music directory." echo "" echo "Options:" echo " -h, --help Show this help message and exit." echo " -na --no-auto Does not automatically click thru." } # Check if '-h' or '--help' flags are passed if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$2" = "-h" ] || [ "$2" = "--help" ]; then usage exit 0 fi # Ensure a URL is provided if [ -z "$1" ]; then echo "Error: No URL provided." exit 1 fi rm /home/synchronous/.music-not-tagged/tmp.mp3 url="$1" # Download and extract audio if ! yt-dlp --extract-audio --audio-format mp3 --output '/home/synchronous/.music-not-tagged/tmp.mp3' "$url"; then echo "Error downloading or extracting audio." exit 1 fi # Import into beets if [ "$2" = "-na" ] || [ "$2" = "--no-auto" ]; then if ! /etc/profiles/per-user/synchronous/bin/beet import -s /home/synchronous/.music-not-tagged/tmp.mp3; then echo "Error importing into beets." exit 1 fi else if ! /etc/profiles/per-user/synchronous/bin/beet import -s /home/synchronous/.music-not-tagged/tmp.mp3 <<< "A"; then echo "Error importing into beets." exit 1 fi fi # Remove all entries from beets if ! /etc/profiles/per-user/synchronous/bin/beet ls | /etc/profiles/per-user/synchronous/bin/beet remove -f; then echo "Error removing entries from beets." exit 1 fi # Extract title and artist title=$(ffprobe -show_format -v error /home/synchronous/.music-not-tagged/tmp.mp3 | grep -m 1 'TAG:title' | cut -d= -f2) artist=$(ffprobe -show_format -v error /home/synchronous/.music-not-tagged/tmp.mp3 | grep -m 1 'TAG:artist' | cut -d= -f2) # Ensure title and artist were extracted successfully if [ -z "$title" ] || [ -z "$artist" ]; then echo "Error extracting title or artist." exit 1 fi echo "\n" # Echo title and artist echo "$artist" echo "$title" # ... # Construct new filename t="$artist - $title" destination="/home/synchronous/music/$t.mp3" # Check if file already exists if [ -f "$destination" ]; then echo "Error: A file with the same name already exists." exit 1 fi # Ask user for confirmation echo "Would you like to continue and move the file into the music directory? (y/n)" read -r confirmation # Exit if user doesn't confirm if [ "$confirmation" != "y" ]; then echo "Operation aborted by the user." exit 1 fi # Move the file if ! mv /home/synchronous/.music-not-tagged/tmp.mp3 "$destination"; then echo "Error moving the file." exit 1 fi