@ -1,18 +1,10 @@
#!/bin/bash
# Directory for icons
iDIR = " $HOME /.config/swaync/icons "
# Directory music folder
mDIR = " $HOME /Music/* "
mDIR = " $HOME /Music/ "
# Local Music
declare -A local_music
# Populate the menu_options array with music files from the Music folder
for file in $mDIR ; do
filename = $( basename " $file " )
local_music[ " $filename " ] = " $file "
done
# Directory for icons
iDIR = " $HOME /.config/swaync/icons "
# Online Stations
declare -A online_music = (
@ -30,6 +22,17 @@ declare -A online_music=(
[ "Korean Drama OST 📻🎶" ] = "https://youtube.com/playlist?list=PLUge_o9AIFp4HuA-A3e3ZqENh63LuRRlQ"
)
# Local Music
# Populate local_music array with files from music directory and subdirectories
populate_local_music( ) {
local_music = ( )
filenames = ( )
while IFS = read -r file; do
local_music += ( " $file " )
filenames += ( " $( basename " $file " ) " )
done < <( find " $mDIR " -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.wav" -o -iname "*.ogg" \) )
}
# Function for displaying notifications
notification( ) {
notify-send -u normal -i " $iDIR /music.png " " Playing: $@ "
@ -37,26 +40,30 @@ notification() {
# Main function for playing local music
play_local_music( ) {
populate_local_music
# Prompt the user to select a song
choice = $( printf "%s\n" " ${ !local_music[@] } " | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Local Music" )
choice = $( printf "%s\n" " ${ filenames [@] } " | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Local Music" )
if [ -z " $choice " ] ; then
exit 1
fi
file = " ${ local_music [ $choice ] } "
# Find the corresponding file path based on user's choice
for ( ( i = 0; i<" ${# filenames [@] } " ; i++ ) ) ; do
if [ " ${ filenames [ $i ] } " = " $choice " ] ; then
file = " ${ local_music [ $i ] } "
break
fi
done
notification " $choice "
# Play the selected local music file using mpv and shuffle the rest
mpv --shuffle --vid= no " $file " && \
for file in $mDIR ; do
if [ " $file " != " ${ local_music [ $choice ] } " ] ; then
mpv --shuffle --vid= no " $file "
fi
done
# Play the selected local music file using mpv
mpv --shuffle --vid= no " $file "
}
# Main function for playing online music
play_online_music( ) {
choice = $( printf "%s\n" " ${ !online_music[@] } " | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Online Music" )
@ -76,8 +83,8 @@ play_online_music() {
# Check if an online music process is running and send a notification, otherwise run the main function
pkill mpv && notify-send -u low -i " $iDIR /music.png " "Online Music stopped" || {
# Prompt the user to choose between local and online music
user_choice = $( printf "Play from Music Folder\nPlay from Online Stations" | rofi -dmenu -config ~/.config/rofi/config-rofi-Beats-menu.rasi -p "Select music source" )
# Prompt the user to choose between local and online music
user_choice = $( printf "Play from Music Folder\nPlay from Online Stations" | rofi -dmenu -config ~/.config/rofi/config-rofi-Beats-menu.rasi -p "Select music source" )
case " $user_choice " in
"Play from Music Folder" )
@ -91,4 +98,3 @@ pkill mpv && notify-send -u low -i "$iDIR/music.png" "Online Music stopped" || {
; ;
esac
}