Skip to content

Commit

Permalink
Merge pull request #69 from s1eve-mcdichae1/bgm123
Browse files Browse the repository at this point in the history
bgm123 - update with several improvements
  • Loading branch information
Exarkuniv committed Jul 4, 2022
2 parents 4a41efc + 607f01f commit f4d2058
Show file tree
Hide file tree
Showing 4 changed files with 194 additions and 135 deletions.
282 changes: 157 additions & 125 deletions scriptmodules/supplementary/bgm123.sh
Expand Up @@ -13,65 +13,84 @@ rp_module_id="bgm123"
rp_module_desc="Straightforward background music player using mpg123"
rp_module_help="Place your MP3 files in $datadir/bgm"
rp_module_section="exp"
rp_module_flags="!all rpi"
rp_module_flags=""

function _get_vars_bgm123() {
case "$1" in
autostart) echo "$configdir/all/autostart.sh" ;;
bashrc) echo "$home/.bashrc" ;;
onstart) echo "$configdir/all/runcommand-onstart.sh" ;;
onend) echo "$configdir/all/runcommand-onend.sh" ;;
autoconf) echo "$configdir/all/$md_id.cfg" ;;
menudir) echo "$datadir/retropiemenu" ;;
init) echo "$md_inst/bgm_start.sh" ;;
killscript) echo "$md_inst/bgm_stop.sh" ;;
fadescript) echo "$md_inst/bgm_fade.sh" ;;
esac
}

function depends_bgm123() {
getDepends mpg123
}

function _autostart_bgm123() {
echo "$configdir/all/autostart.sh"
}
function install_bin_bgm123() {
local autoconf="$(_get_vars_bgm123 autoconf)"
local menudir="$(_get_vars_bgm123 menudir)"
local file
local scripts=(
'bgm_start.sh'
'bgm_stop.sh'
'bgm_fade.sh'
)

# copy scripts and include config
for file in "${scripts[@]}"; do
cp "$md_data/$file" "$md_inst"
sed -i 's|.*#autoconf.*|source "'"$autoconf"'" #autoconf|' "$md_inst/$file"
done

function _bashrc_bgm123() {
echo "$home/.bashrc"
# create rp menu items
cp -f "$md_data/icon.png" "$menudir/icons/$md_id.png"
touch "$menudir/$md_id.rp"
chown -R $user:$user "$menudir"
}

function _onstart_bgm123() {
echo "$configdir/all/runcommand-onstart.sh"
}
function configure_bgm123() {
local autostart="$(_get_vars_bgm123 autostart)"
local bashrc="$(_get_vars_bgm123 bashrc)"
local onstart="$(_get_vars_bgm123 onstart)"
local onend="$(_get_vars_bgm123 onend)"
local autoconf="$(_get_vars_bgm123 autoconf)"
local menudir="$(_get_vars_bgm123 menudir)"
local share="$datadir/bgm"
local file

function _onend_bgm123() {
echo "$configdir/all/runcommand-onend.sh"
}
# find gamelist
local gamelist="$menudir/gamelist.xml"
[[ -f "$gamelist" ]] || gamelist="$configdir/all/emulationstation/gamelists/retropie/gamelist.xml"

function _gamelist_bgm123() {
local xmlfile="$datadir/retropiemenu/gamelist.xml"
[[ -f "$xmlfile" ]] || xmlfile="$configdir/all/emulationstation/gamelists/retropie/gamelist.xml"
echo "$xmlfile"
}
if [[ "$md_mode" == "remove" ]]; then
# remove menu items and network share

function install_bin_bgm123() {
local autostart
autostart="$(_autostart_bgm123)"
local bashrc
bashrc="$(_bashrc_bgm123)"
local onstart
onstart="$(_onstart_bgm123)"
local onend
onend="$(_onend_bgm123)"
local gamelist
gamelist="$(_gamelist_bgm123)"

local scriptname="bgm_vol_fade.sh"
local share="$datadir/bgm"
local file
rm -f "$menudir/$md_id.rp" "$menudir/icons/$md_id.png"
xmlstarlet ed -L -d "/gameList/game[contains(path,'$md_id.rp')]" "$gamelist"

toggle_bgm123 "off"
remove_share_samba "bgm"
restart_samba

return
fi

# preserve original file versions
for file in "$autostart" "$bashrc" "$onstart" "$onend"; do
# preserve original file versions
if [[ -f "$file" && ! -f "$file.old.$md_id" ]]; then
cp -v "$file" "$file.old.$md_id"
chown $user:$user "$file.old.$md_id"
fi
done

cp "$md_data/$scriptname" "$md_inst"
chmod +x "$md_inst/$scriptname"

touch "$datadir/retropiemenu/$md_id.rp"
cp "$md_data/icon.png" "$datadir/retropiemenu/icons/$md_id.png"
chown -R $user:$user "$datadir/retropiemenu"

# add gamelist entry
if ! grep "<path>./$md_id.rp</path>" "$gamelist" >/dev/null; then
xmlstarlet ed -L -s "/gameList" -t elem -n "gameTMP" \
-s "//gameTMP" -t elem -n path -v "./$md_id.rp" \
Expand All @@ -82,132 +101,145 @@ function install_bin_bgm123() {
"$gamelist"
fi

# create user config
local tmp="$(mktemp)"
iniConfig "=" '"' "$tmp"
echo '# Configuration file for bgm123' > "$tmp"
iniSet "status" "enabled"
iniSet "mixer_channel" "HDMI"
iniSet "music_player" "mpg123"
iniSet "music_dir" "$share"
iniSet "mapped_volume" "enabled"
copyDefaultConfig "$tmp" "$autoconf"
rm -f "$tmp"

# check for enable
iniConfig "=" '"' "$autoconf"
iniGet "status"
[[ "$ini_value" == "enabled" ]] && toggle_bgm123 on

# add music dir and network share
mkUserDir "$share"
add_share_samba "bgm" "$share"
restart_samba
}

function disable_bgm123() {
local autostart
autostart="$(_autostart_bgm123)"
local bashrc
bashrc="$(_bashrc_bgm123)"
local onstart
onstart="$(_onstart_bgm123)"
local onend
onend="$(_onend_bgm123)"
function toggle_bgm123() {
local autostart="$(_get_vars_bgm123 autostart)"
local bashrc="$(_get_vars_bgm123 bashrc)"
local onstart="$(_get_vars_bgm123 onstart)"
local onend="$(_get_vars_bgm123 onend)"
local init="$(_get_vars_bgm123 init)"
local killscript="$(_get_vars_bgm123 killscript)"
local fadescript="$(_get_vars_bgm123 fadescript)"
local file

# kill player now since .bashrc won't do it later
(vcgencmd force_audio hdmi 0) >/dev/null
pkill mpg123

# backup files and attempt to remove any existing bgm config
for file in "$autostart" "$bashrc" "$onstart" "$onend"; do
if [[ -f "$file" ]]; then
# backup file and attempt to remove any existing bgm config
cp -f "$file" "$file.bak"
chown $user:$user "$file.bak"
sed -i '/#bgm/d' "$file"

# if file is now empty, remove it
[[ ! -s "$file" ]] && rm -f "$file"
fi
done
}

function remove_bgm123() {
local gamelist
gamelist="$(_gamelist_bgm123)"
# enable with toggle "on" or "enable(d)"
# disable with anything else
if [[ "$1" == "on" || "$1" == "enable"?("d") ]]; then
for file in "$autostart" "$bashrc" "$onstart" "$onend"; do
touch "$file"
chown $user:$user "$file"
done

rm -f "$datadir/retropiemenu/$md_id.rp" "$datadir/retropiemenu/icons/$md_id.png"
xmlstarlet ed -L -d "/gameList/game[contains(path,'$md_id.rp')]" "$gamelist"

disable_bgm123
remove_share_samba "bgm"
restart_samba
}
echo "$(echo -e 'while pgrep omxplayer >/dev/null; do sleep 1; done #bgm123\n(sleep 10; bash "'"$init"'") & #bgm123'; cat $autostart)" > "$autostart"
echo '[[ "$(tty)" == "/dev/tty1" ]] && (bash "'"$killscript"'" &) #bgm123' >> "$bashrc"
echo "$(echo 'bash "'"$fadescript"'" -STOP & #bgm123'; cat $onstart)" > "$onstart"
echo '(sleep 1; bash "'"$fadescript"'" -CONT) & #bgm123' >> "$onend"

function enable_bgm123() {
local autostart
autostart="$(_autostart_bgm123)"
local bashrc
bashrc="$(_bashrc_bgm123)"
local onstart
onstart="$(_onstart_bgm123)"
local onend
onend="$(_onend_bgm123)"

local fadescript="$md_inst/bgm_vol_fade.sh"
local file

disable_bgm123

for file in "$autostart" "$bashrc" "$onstart" "$onend"; do
touch "$file"
chown $user:$user "$file"
done
printMsgs "console" "Background music enabled."
else
# kill player now since .bashrc won't do it later
su "$user" -c "bash $killscript"

echo -e "$(echo -e 'while pgrep omxplayer >/dev/null; do sleep 1; done #bgm123\n((vcgencmd force_audio hdmi 1) >/dev/null; sleep 8; mpg123 -Z "'$datadir'/bgm/"*.[mM][pP]3 >/dev/null 2>&1) & #bgm123'; cat $autostart)" > "$autostart"
echo -e '[[ "$(tty)" == "/dev/tty1" ]] && ((vcgencmd force_audio hdmi 0) >/dev/null; pkill mpg123) #bgm123' >> "$bashrc"
echo -e '"'"$fadescript"'" -STOP & #bgm123' >> "$onstart"
echo -e '(sleep 1; "'"$fadescript"'" -CONT) & #bgm123' >> "$onend"
}
for file in "$onstart" "$onend"; do
# if file is now empty, remove it
[[ -f "$file" && ! -s "$file" ]] && rm -f "$file"
done

function configure_bgm123() {
[[ "$md_mode" == "install" ]] && enable_bgm123
printMsgs "console" "Background music disabled."
fi
}

function play_pause_bgm123() {
if pgrep mpg123 >/dev/null; then
su "$user" -c "$md_inst/bgm_vol_fade.sh &"
else
su "$user" -c "((vcgencmd force_audio hdmi 1) >/dev/null; sleep 1; mpg123 -Z $datadir/bgm/*.[mM][pP]3 >/dev/null 2>&1) &"
fi
# dummy enable/disable functions for CLI
function disable_bgm123() {
toggle_bgm123 off
}

function next_track_bgm123() {
pkill mpg123
su "$user" -c "((vcgencmd force_audio hdmi 1) >/dev/null; sleep 1; mpg123 -Z $datadir/bgm/*.[mM][pP]3 >/dev/null 2>&1) &"
function enable_bgm123() {
toggle_bgm123 on
}

function gui_bgm123() {
local cmd=(dialog --backtitle "$__backtitle" --cancel-label "Back" --menu "Choose an option for $md_id" 22 86 16)
local autoconf="$(_get_vars_bgm123 autoconf)"
iniConfig "=" '"' "$autoconf"

local autostart="$(_get_vars_bgm123 autostart)"
local init="$(_get_vars_bgm123 init)"
local killscript="$(_get_vars_bgm123 killscript)"
local fadescript="$(_get_vars_bgm123 fadescript)"

local cmd=(dialog --backtitle "$__backtitle" --cancel-label "Back" --menu "Configuration for $md_id. Please choose an option." 22 86 16)
while true; do
local enabled=0
grep '#bgm123' "$configdir/all/autostart.sh" >/dev/null && enabled=1
local options=()
if [[ "$enabled" -eq 1 ]]; then
options+=(
E "Enable or disable background music (currently: Enabled)"
)
if pgrep emulationstatio >/dev/null; then
options+=(
P "Play / pause"
N "Next track"
)
fi
else
# check if bgm code is actually enabled in autostart
local status="disabled"
grep '#bgm123' "$autostart" >/dev/null && status="enabled"

local mapped
iniGet "mapped_volume" && mapped="$ini_value"

local options=(
1 "Enable or disable background music (currently: ${status^})"
2 "Enable or disable mapped volume profile (currently: ${mapped^})"
)
if [[ "$status" == "enabled" ]] && pgrep emulationstatio >/dev/null; then
options+=(
E "Enable or disable background music (currently: Disabled)"
P "Play / pause"
N "Next track"
)
fi

local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
E)
if [[ "$enabled" -eq 1 ]]; then
disable_bgm123
1)
if [[ "$status" == "enabled" ]]; then
toggle_bgm123 off
iniSet "status" "disabled"
printMsgs "dialog" "Background music disabled."
else
enable_bgm123
toggle_bgm123 on
iniSet "status" "enabled"
printMsgs "dialog" "Background music enabled."
fi
;;
2)
if [[ "$mapped" == "enabled" ]]; then
iniSet "mapped_volume" "disabled"
printMsgs "dialog" "Mapped volume disabled."
else
iniSet "mapped_volume" "enabled"
printMsgs "dialog" "Mapped volume enabled."
fi
;;
P)
play_pause_bgm123
if pgrep mpg123 >/dev/null; then
su "$user" -c "bash $fadescript &"
else
su "$user" -c "bash $init &"
fi
;;
N)
next_track_bgm123
su "$user" -c "(bash $killscript; sleep 1; bash $init) &"
;;
esac
else
Expand Down

0 comments on commit f4d2058

Please sign in to comment.