|
|
#!/bin/bash |
|
|
|
|
|
# Directory for icons |
|
|
iDIR="$HOME/.config/swaync/icons" |
|
|
|
|
|
# Define menu options as associative arrays for local and online music |
|
|
declare -A local_music |
|
|
|
|
|
# Directory music folder |
|
|
mDIR="$HOME/Music/*" |
|
|
|
|
|
# Populate the menu_options array with music files from the Music folder with specified extensions |
|
|
for file in $mDIR; do |
|
|
if [ -f "$file" ]; then |
|
|
filename=$(basename "$file") |
|
|
local_music["$filename"]="$file" |
|
|
fi |
|
|
done |
|
|
|
|
|
declare -A online_music=( |
|
|
["AfroBeatz 2024 🎧"]="https://www.youtube.com/watch?v=7uB-Eh9XVZQ" |
|
|
["Lofi Girl ☕️🎶"]="https://play.streamafrica.net/lofiradio" |
|
|
["Easy Rock 96.3 FM 📻🎶"]="https://radio-stations-philippines.com/easy-rock" |
|
|
["Wish 107.5 FM 📻🎶"]="https://radio-stations-philippines.com/dwnu-1075-wish" |
|
|
["Wish 107.5 YT Pinoy HipHop 🎻🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJnmgMYwCKid4XIFqUKBVWEs&si=vahW_noh4UDJ5d37" |
|
|
["Top Youtube Music 2023 ☕️🎶"]="https://youtube.com/playlist?list=PLDIoUOhQQPlXr63I_vwF9GD8sAKh77dWU&si=y7qNeEVFNgA-XxKy" |
|
|
["Wish 107.5 YT Wishclusives ☕️🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJn5B22H9HOWP3Kxxs-DkPSM&si=d_Ld2OKhGvpH48WO" |
|
|
["Chillhop ☕️🎶"]="http://stream.zeno.fm/fyn8eh3h5f8uv" |
|
|
["SmoothChill ☕️🎶"]="https://media-ssl.musicradio.com/SmoothChill" |
|
|
["Relaxing Music ☕️🎶"]="https://youtube.com/playlist?list=PLMIbmfP_9vb8BCxRoraJpoo4q1yMFg4CE" |
|
|
["Youtube Remix 📻🎶"]="https://youtube.com/playlist?list=PLeqTkIUlrZXlSNn3tcXAa-zbo95j0iN-0" |
|
|
["Korean Drama OST 📻🎶"]="https://youtube.com/playlist?list=PLUge_o9AIFp4HuA-A3e3ZqENh63LuRRlQ" |
|
|
) |
|
|
|
|
|
# Function for displaying notifications |
|
|
notification() { |
|
|
notify-send -u normal -i "$iDIR/music.png" "Playing: $@" |
|
|
} |
|
|
|
|
|
# Main function for playing local music |
|
|
play_local_music() { |
|
|
# Prompt user to select play mode |
|
|
mode=$(printf "Play in order\nShuffle" | rofi -dmenu -p "Select play mode") |
|
|
|
|
|
if [ -z "$mode" ]; then |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
case "$mode" in |
|
|
"Play in order") |
|
|
# Play in order |
|
|
for choice in "${!local_music[@]}"; do |
|
|
file="${local_music[$choice]}" |
|
|
notification "$choice" |
|
|
mpv --vid=no "$file" |
|
|
done |
|
|
;; |
|
|
"Shuffle") |
|
|
# Shuffle the keys of local_music array |
|
|
shuffled_keys=($(printf "%s\n" "${!local_music[@]}" | shuf)) |
|
|
|
|
|
# Play shuffled |
|
|
for choice in "${shuffled_keys[@]}"; do |
|
|
file="${local_music[$choice]}" |
|
|
notification "$choice" |
|
|
mpv --vid=no "$file" |
|
|
done |
|
|
;; |
|
|
*) |
|
|
echo "Invalid choice" |
|
|
;; |
|
|
esac |
|
|
} |
|
|
|
|
|
# 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") |
|
|
|
|
|
if [ -z "$choice" ]; then |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
link="${online_music[$choice]}" |
|
|
|
|
|
notification "$choice" |
|
|
|
|
|
# Play the selected online music using mpv |
|
|
mpv --shuffle --vid=no "$link" |
|
|
} |
|
|
|
|
|
# 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\nOnline Streaming" | rofi -dmenu -p "Select music source") |
|
|
|
|
|
case "$user_choice" in |
|
|
"Play from Music Folder") |
|
|
play_local_music |
|
|
;; |
|
|
"Online Streaming") |
|
|
play_online_music |
|
|
;; |
|
|
*) |
|
|
echo "Invalid choice" |
|
|
;; |
|
|
esac |
|
|
}
|
|
|
|