summaryrefslogtreecommitdiff
path: root/songgrab
blob: 808ecb4816424f17c9e9ca957b6f11b8a2ee5224 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/sbin/sh

# check flags
for i in $@; do
  case "$i" in
    "-"*) unset GETARTIST GETALBUM GETTITLE
  esac
  [ -n "$GETURL" ] && URL="$i" && unset GETURL
  [ -n "$GETARTIST" ] && ARTIST="$ARTIST $i"
  [ -n "$GETALBUM" ] && ALBUM="$ALBUM $i"
  [ -n "$GETTITLE" ] && TITLE="$TITLE $i"
  [ -n "$GETTRACKNUM" ] && TRACKNUM="$i" && unset GETTRACKNUM
  [ -n "$GETYEAR" ] && YEAR="$i" && unset GETYEAR
  case "$i" in
    "-s")
      SPLITTER_SELECTION="s"
      ;;
    "-l")
      SPLITTER_SELECTION="a"
      ;;
    "-p")
      SPLITTER_SELECTION="p"
      ;;
    "-u")
      GETURL="y"
      ;;
    "-a")
      GETARTIST="y"
      ;;
    "-A")
      GETALBUM="y"
      ;;
    "-t")
      GETTITLE="y"
      ;;
    "-T")
      GETTRACKNUM="y"
      ;;
    "-y")
      GETYEAR="y"
      ;;
  esac
done

ARTIST=`echo $ARTIST | sed 's/^ //'`
ALBUM=`echo $ALBUM | sed 's/^ //'`
TITLE=`echo $TITLE | sed 's/^ //'`
printf "Received Tags:
Artist: $ARTIST
Album: $ALBUM
Song: $TITLE
Number: $TRACKNUM
Year: $YEAR\n\n"

notify-send "songgrab started" "Received Tags:
Album: $ALBUM
Song: $TITLE
Number: $TRACKNUM
Year: $YEAR\n\n"

printf "\n"
# prompt to determine later tagging
if [ -z "$SPLITTER_SELECTION" ]; then
  printf "Will the link be for a [p]laylist, a[l]bum video, or [s]ong video? "
  read SPLITTER_SELECTION
  printf "\n"
fi

# prompt to get the URL
if [ -z "$URL" ]; then
  printf "Enter the link: "
  read URL
  printf "\n"
fi

# if song, don't download playlist
if [ "$SPLITTER_SELECTION" = "s" ]; then
  SPLITTER_FLAGS="--no-playlist"
fi

# download the video(s)
notify-send "songgrab" "Starting download..."
printf "Starting download..."
ls | grep -q "$(echo $URL | cut -d'=' -f2 | cut -d'&' -f1)" && echo "Already downloaded" || yt-dlp $SPLITTER_FLAGS --format bestaudio --restrict-filenames "$URL"
notify-send "songgrab" "Download stopped."
printf "Download stopped."

# while loop to remove files from list
printf "Do you want to remove any tracks?\n\n"
while true; do
  ls | nl
  echo -n "Enter the line number: "
  read WHILE_RESPONSE
  [ -z "$WHILE_RESPONSE" ] && break
  rm -rf `ls | head -n "$WHILE_RESPONSE" | tail -1`
done

# convert the downloaded files to mp3
printf "Starting to convert files..."
notify-send "songgrab" "Starting to convert files..."
for i in `ls *.m4a *.webm`; do
  imp3=`echo "$i" | sed 's/\.m4a$/.mp3/;s/\.webm$/.mp3/'`
  notify-send "songgrab" "Converting $i to $imp3"
  [ ! -f "$imp3" ] && ffmpeg -i "$i" -acodec mp3 "$imp3" || echo "File not converted"
done
printf "Finished converting files.\n\n"
notify-send "songgrab" "Finished converting files."

# fix names for suggestions
vimv

# determine tagmp3 flags
FLAGS=""
[ -n "$ARTIST" ] && FLAGS="$FLAGS -a $ARTIST"
[ -n "$ALBUM" ] && FLAGS="$FLAGS -A $ALBUM"
[ -n "$TITLE" ] && FLAGS="$FLAGS -t $TITLE"
[ -n "$TRACKNUM" ] && FLAGS="$FLAGS -T $TRACKNUM"
[ -n "$YEAR" ] && FLAGS="$FLAGS -y $YEAR"

# tag songs with tagmp3
notify-send "songgrab" "Tagging songs..."
printf "Tagging songs..."
for i in `ls *.mp3`; do
  tagmp3 $FLAGS "$i"
done
notify-send "songgrab" "Done."
printf "Done.\n\n"