diff options
Diffstat (limited to 'config/hypr/UserScripts/RofiBeats.sh')
| -rwxr-xr-x | config/hypr/UserScripts/RofiBeats.sh | 84 |
1 files changed, 67 insertions, 17 deletions
diff --git a/config/hypr/UserScripts/RofiBeats.sh b/config/hypr/UserScripts/RofiBeats.sh index e3c79587..76634a1a 100755 --- a/config/hypr/UserScripts/RofiBeats.sh +++ b/config/hypr/UserScripts/RofiBeats.sh @@ -1,13 +1,14 @@ #!/bin/bash +# Directory music folder +mDIR="$HOME/Music/" + # Directory for icons iDIR="$HOME/.config/swaync/icons" -# Note: You can add more options below with the following format: -# ["TITLE"]="link" - -# Define menu options as an associative array -declare -A menu_options=( +# Online Stations +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" @@ -21,30 +22,79 @@ declare -A menu_options=( ["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 now: $@" + notify-send -u normal -i "$iDIR/music.png" "Playing: $@" } -# Main function -main() { - choice=$(printf "%s\n" "${!menu_options[@]}" | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "") +# Main function for playing local music +play_local_music() { + populate_local_music + + # Prompt the user to select a song + 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 - link="${menu_options[$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" - - # Check if the link is a playlist - if [[ $link == *playlist* ]]; then - mpv --shuffle --vid=no "$link" - else - mpv "$link" + + # 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") + + 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" || main +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") + + case "$user_choice" in + "Play from Music Folder") + play_local_music + ;; + "Play from Online Stations") + play_online_music + ;; + *) + echo "Invalid choice" + ;; + esac +} |
