From bcee4f2c20445928bfc22c091a00421a63c31db5 Mon Sep 17 00:00:00 2001 From: manajoe Date: Tue, 9 Jun 2020 21:14:00 +0100 Subject: [PATCH 01/41] implemented shutdownwithreducingvolume --- scripts/playout_controls.sh | 74 ++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/scripts/playout_controls.sh b/scripts/playout_controls.sh index 6252a2655..58f2cb545 100755 --- a/scripts/playout_controls.sh +++ b/scripts/playout_controls.sh @@ -22,11 +22,13 @@ NOW=`date +%Y-%m-%d.%H:%M:%S` # shutdown # shutdownsilent # shutdownafter +# shutdownwithreducingvolume # reboot # scan # mute # setvolume # setmaxvolume +# setmaxvolumetemp # setstartupvolume # getstartupvolume # setvolumetostartup @@ -34,6 +36,7 @@ NOW=`date +%Y-%m-%d.%H:%M:%S` # volumedown # getvolume # getmaxvolume +# getmaxvolumetemp # setvolstep # getvolstep # playerstop @@ -159,6 +162,20 @@ case $COMMAND in echo "${PATHDATA}/playout_controls.sh -c=shutdownsilent" | at -q t now + ${VALUE} minute fi ;; + shutdownwithreducingvolume) + # get current volume in percent + VOLPERCENT=$(echo -e status\\nclose | nc -w 1 localhost 6600 | grep -o -P '(?<=volume: ).*') + # divide current volume by 10 to get a step size for reducing the volume + VOLSTEP=`expr $((VOLPERCENT / 10))`; + # divide VALUE by 10, volume will be reduced every TIMESTEP minutes (e.g. for a value of "30" it will be every "3" minutes) + TIMESTEP=`expr $((VALUE / 10))`; + # loop 10 times to reduce the volume by VOLSTEP every TIMESTEP minutes + for i in $(seq 1 10); do + VOLPERCENT=`expr ${VOLPERCENT} - ${VOLSTEP}`; echo "${PATHDATA}/playout_controls.sh -c=setvolume -v="$VOLPERCENT | at -q t now + `expr $(((i * TIMESTEP)-1))` minute; + done + # schedule shutdown after VALUE minutes + echo "${PATHDATA}/playout_controls.sh -c=shutdownsilent" | at -q t now + ${VALUE} minute + ;; reboot) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi ${PATHDATA}/resume_play.sh -c=savepos && mpc clear @@ -196,7 +213,7 @@ case $COMMAND in setvolume) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi #increase volume only if VOLPERCENT is below the max volume limit and above min volume limit - if [ ${VALUE} -le $AUDIOVOLMAXLIMIT ] && [ ${VALUE} -ge $AUDIOVOLMINLIMIT ]; + if [ ${VALUE} -le $AUDIOVOLMAXLIMIT ] && [ ${VALUE} -ge $AUDIOVOLMINLIMIT ] && [ ${VALUE} -le $AUDIOVOLMAXTEMP ]; then # set volume level in percent echo -e setvol $VALUE\\nclose | nc -w 1 localhost 6600 @@ -206,6 +223,11 @@ case $COMMAND in # if we are over the max volume limit, set the volume to maxvol echo -e setvol $AUDIOVOLMAXLIMIT\\nclose | nc -w 1 localhost 6600 fi + if [ ${VALUE} -gt $AUDIOVOLMAXTEMP ]; + then + # if we are over the max volume temü limit, set the volume to maxvoltemp + echo -e setvol $AUDIOVOLMAXTEMP\\nclose | nc -w 1 localhost 6600 + fi if [ ${VALUE} -lt $AUDIOVOLMINLIMIT ]; then # if we are unter the min volume limit, set the volume to minvol @@ -235,14 +257,30 @@ case $COMMAND in # increase by $AUDIOVOLCHANGESTEP VOLPERCENT=`expr ${VOLPERCENT} + \( ${AUDIOVOLCHANGESTEP} \* ${VALUE} \)` #increase volume only if VOLPERCENT is below the max volume limit - if [ $VOLPERCENT -le $AUDIOVOLMAXLIMIT ]; - then - # set volume level in percent - echo -e setvol +$VOLPERCENT\\nclose | nc -w 1 localhost 6600 - else - # if we are over the max volume limit, set the volume to maxvol - echo -e setvol $AUDIOVOLMAXLIMIT\\nclose | nc -w 1 localhost 6600 - fi + #is max volume limit above max volume temp? + if [ $AUDIOVOLMAXLIMIT -gt $AUDIOVOLMAXTEMP ]; + then + #increase volume only if VOLPERCENT is below the max volume temp + if [ $VOLPERCENT -le $AUDIOVOLMAXTEMP ]; + then + # set volume level in percent + echo -e setvol +$VOLPERCENT\\nclose | nc -w 1 localhost 6600 + else + # if we are over the max volume temp, set the volume to maxvoltemp + echo -e setvol $AUDIOVOLMAXTEMP\\nclose | nc -w 1 localhost 6600 + fi + #otherwise max volume temp must be above or equal max volume limit + elif [ $AUDIOVOLMAXTEMP -ge $AUDIOVOLMAXLIMIT ]; + then + if [ $VOLPERCENT -le $AUDIOVOLMAXLIMIT ]; + then + # set volume level in percent + echo -e setvol +$VOLPERCENT\\nclose | nc -w 1 localhost 6600 + else + # if we are over the max volume limit, set the volume to maxvol + echo -e setvol $AUDIOVOLMAXLIMIT\\nclose | nc -w 1 localhost 6600 + fi + fi else # $VOLFILE DOES exist == audio off # read volume level from $VOLFILE and set as percent @@ -315,10 +353,28 @@ case $COMMAND in # create global config file because individual setting got changed . ${PATHDATA}/inc.writeGlobalConfig.sh ;; + setmaxvolumetemp) + if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi + # read volume in percent + VOLPERCENT=$(echo -e status\\nclose | nc -w 1 localhost 6600 | grep -o -P '(?<=volume: ).*') + # if volume of the box is greater than wanted maxvolumetemp, set volume to maxvolumetemp + if [ $VOLPERCENT -gt ${VALUE} ]; + then + echo -e setvol ${VALUE} | nc -w 1 localhost 6600 + fi + # write new value to file + echo "$VALUE" > ${PATHDATA}/../settings/Max_Volume_Limit_Temp + # create global config file because individual setting got changed + . ${PATHDATA}/inc.writeGlobalConfig.sh + ;; getmaxvolume) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi echo $AUDIOVOLMAXLIMIT ;; + getmaxvolumetemp) + if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi + echo $AUDIOVOLMAXTEMP + ;; setvolstep) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi # write new value to file From ebe8f27e11d5ca2d250950ac7844a125d192ae43 Mon Sep 17 00:00:00 2001 From: manajoe Date: Tue, 9 Jun 2020 21:19:08 +0100 Subject: [PATCH 02/41] implemented shutdownwithreducingvolume --- scripts/playout_controls.sh | 63 +++++++------------------------------ 1 file changed, 11 insertions(+), 52 deletions(-) diff --git a/scripts/playout_controls.sh b/scripts/playout_controls.sh index 58f2cb545..f3a2d983c 100755 --- a/scripts/playout_controls.sh +++ b/scripts/playout_controls.sh @@ -28,7 +28,6 @@ NOW=`date +%Y-%m-%d.%H:%M:%S` # mute # setvolume # setmaxvolume -# setmaxvolumetemp # setstartupvolume # getstartupvolume # setvolumetostartup @@ -36,7 +35,6 @@ NOW=`date +%Y-%m-%d.%H:%M:%S` # volumedown # getvolume # getmaxvolume -# getmaxvolumetemp # setvolstep # getvolstep # playerstop @@ -175,7 +173,7 @@ case $COMMAND in done # schedule shutdown after VALUE minutes echo "${PATHDATA}/playout_controls.sh -c=shutdownsilent" | at -q t now + ${VALUE} minute - ;; + ;; reboot) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi ${PATHDATA}/resume_play.sh -c=savepos && mpc clear @@ -213,7 +211,7 @@ case $COMMAND in setvolume) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi #increase volume only if VOLPERCENT is below the max volume limit and above min volume limit - if [ ${VALUE} -le $AUDIOVOLMAXLIMIT ] && [ ${VALUE} -ge $AUDIOVOLMINLIMIT ] && [ ${VALUE} -le $AUDIOVOLMAXTEMP ]; + if [ ${VALUE} -le $AUDIOVOLMAXLIMIT ] && [ ${VALUE} -ge $AUDIOVOLMINLIMIT ]; then # set volume level in percent echo -e setvol $VALUE\\nclose | nc -w 1 localhost 6600 @@ -223,11 +221,6 @@ case $COMMAND in # if we are over the max volume limit, set the volume to maxvol echo -e setvol $AUDIOVOLMAXLIMIT\\nclose | nc -w 1 localhost 6600 fi - if [ ${VALUE} -gt $AUDIOVOLMAXTEMP ]; - then - # if we are over the max volume temü limit, set the volume to maxvoltemp - echo -e setvol $AUDIOVOLMAXTEMP\\nclose | nc -w 1 localhost 6600 - fi if [ ${VALUE} -lt $AUDIOVOLMINLIMIT ]; then # if we are unter the min volume limit, set the volume to minvol @@ -257,30 +250,14 @@ case $COMMAND in # increase by $AUDIOVOLCHANGESTEP VOLPERCENT=`expr ${VOLPERCENT} + \( ${AUDIOVOLCHANGESTEP} \* ${VALUE} \)` #increase volume only if VOLPERCENT is below the max volume limit - #is max volume limit above max volume temp? - if [ $AUDIOVOLMAXLIMIT -gt $AUDIOVOLMAXTEMP ]; - then - #increase volume only if VOLPERCENT is below the max volume temp - if [ $VOLPERCENT -le $AUDIOVOLMAXTEMP ]; - then - # set volume level in percent - echo -e setvol +$VOLPERCENT\\nclose | nc -w 1 localhost 6600 - else - # if we are over the max volume temp, set the volume to maxvoltemp - echo -e setvol $AUDIOVOLMAXTEMP\\nclose | nc -w 1 localhost 6600 - fi - #otherwise max volume temp must be above or equal max volume limit - elif [ $AUDIOVOLMAXTEMP -ge $AUDIOVOLMAXLIMIT ]; - then - if [ $VOLPERCENT -le $AUDIOVOLMAXLIMIT ]; - then - # set volume level in percent - echo -e setvol +$VOLPERCENT\\nclose | nc -w 1 localhost 6600 - else - # if we are over the max volume limit, set the volume to maxvol - echo -e setvol $AUDIOVOLMAXLIMIT\\nclose | nc -w 1 localhost 6600 - fi - fi + if [ $VOLPERCENT -le $AUDIOVOLMAXLIMIT ]; + then + # set volume level in percent + echo -e setvol +$VOLPERCENT\\nclose | nc -w 1 localhost 6600 + else + # if we are over the max volume limit, set the volume to maxvol + echo -e setvol $AUDIOVOLMAXLIMIT\\nclose | nc -w 1 localhost 6600 + fi else # $VOLFILE DOES exist == audio off # read volume level from $VOLFILE and set as percent @@ -353,28 +330,10 @@ case $COMMAND in # create global config file because individual setting got changed . ${PATHDATA}/inc.writeGlobalConfig.sh ;; - setmaxvolumetemp) - if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi - # read volume in percent - VOLPERCENT=$(echo -e status\\nclose | nc -w 1 localhost 6600 | grep -o -P '(?<=volume: ).*') - # if volume of the box is greater than wanted maxvolumetemp, set volume to maxvolumetemp - if [ $VOLPERCENT -gt ${VALUE} ]; - then - echo -e setvol ${VALUE} | nc -w 1 localhost 6600 - fi - # write new value to file - echo "$VALUE" > ${PATHDATA}/../settings/Max_Volume_Limit_Temp - # create global config file because individual setting got changed - . ${PATHDATA}/inc.writeGlobalConfig.sh - ;; getmaxvolume) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi echo $AUDIOVOLMAXLIMIT ;; - getmaxvolumetemp) - if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi - echo $AUDIOVOLMAXTEMP - ;; setvolstep) if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo " ${COMMAND}" >> ${PATHDATA}/../logs/debug.log; fi # write new value to file @@ -761,4 +720,4 @@ case $COMMAND in echo Unknown COMMAND $COMMAND VALUE $VALUE if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo "Unknown COMMAND ${COMMAND} VALUE ${VALUE}" >> ${PATHDATA}/../logs/debug.log; fi ;; -esac +esac \ No newline at end of file From ea07b55d8c71b5f81dbff9463b78adb3af1830b5 Mon Sep 17 00:00:00 2001 From: manajoe Date: Tue, 9 Jun 2020 21:20:20 +0100 Subject: [PATCH 03/41] fixed type --- scripts/playout_controls.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/playout_controls.sh b/scripts/playout_controls.sh index f3a2d983c..d1cda4d55 100755 --- a/scripts/playout_controls.sh +++ b/scripts/playout_controls.sh @@ -720,4 +720,4 @@ case $COMMAND in echo Unknown COMMAND $COMMAND VALUE $VALUE if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then echo "Unknown COMMAND ${COMMAND} VALUE ${VALUE}" >> ${PATHDATA}/../logs/debug.log; fi ;; -esac \ No newline at end of file +esac From eb1ecfffdd3fd006836819ec222dc13b90b16289 Mon Sep 17 00:00:00 2001 From: Felix Bachmair Date: Sat, 21 Nov 2020 17:32:05 +0100 Subject: [PATCH 04/41] activation of shutdown button class in gpio_control --- .../gpio_control/GPIODevices/shutdown_button.py | 16 +++++++++++----- .../example_configs/gpio_settings_test.ini | 2 +- components/gpio_control/gpio_control.py | 9 +++++++++ .../gpio_control/test/gpio_settings_test.ini | 2 +- .../gpio_control/test/test_shutdown_button.py | 8 ++++---- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/components/gpio_control/GPIODevices/shutdown_button.py b/components/gpio_control/GPIODevices/shutdown_button.py index 5682a7a7f..40129f325 100644 --- a/components/gpio_control/GPIODevices/shutdown_button.py +++ b/components/gpio_control/GPIODevices/shutdown_button.py @@ -4,19 +4,20 @@ import logging from .simple_button import SimpleButton - logger = logging.getLogger(__name__) class ShutdownButton(SimpleButton): def __init__(self, pin, action=lambda *args: None, name=None, bouncetime=500, edge=GPIO.FALLING, - hold_time=.1, led_pin=None, time_pressed=2): + hold_time=.1, led_pin=None, time_pressed=2, hold_repeat=False, pull_up_down=GPIO.PUD_UP,iteration_time=.2): self.led_pin = led_pin - self.time_pressed = 2 - self.iteration_time = .2 + self.time_pressed = time_pressed + self.iteration_time = iteration_time super(ShutdownButton, self).__init__(pin=pin, action=action, name=name, bouncetime=bouncetime, edge=edge, - hold_time=hold_time, hold_repeat=False) + hold_time=hold_time, hold_repeat=hold_repeat, pull_up_down=pull_up_down, + ) + pass # function to provide user feedback (= flashing led) while the shutdown button is pressed # do not directly call shutdown, in case it was hit accedently @@ -47,3 +48,8 @@ def callbackFunctionHandler(self, *args): self.set_led(GPIO.HIGH) # leave it on for the moment, it will be off when the system is down self.when_pressed(*args) + + def __repr__(self): + return ''.format( + self.name, self.pin, self.hold_repeat, self.hold_time + ) diff --git a/components/gpio_control/example_configs/gpio_settings_test.ini b/components/gpio_control/example_configs/gpio_settings_test.ini index 78b859287..a1ab63273 100644 --- a/components/gpio_control/example_configs/gpio_settings_test.ini +++ b/components/gpio_control/example_configs/gpio_settings_test.ini @@ -35,7 +35,7 @@ hold_repeat: False [Shutdown] enabled: True -Type: Button +Type: ShutdownButton Pin: 3 hold_time: 2 functionCall: functionCallShutdown diff --git a/components/gpio_control/gpio_control.py b/components/gpio_control/gpio_control.py index e4be1ac5d..3e6134495 100755 --- a/components/gpio_control/gpio_control.py +++ b/components/gpio_control/gpio_control.py @@ -69,6 +69,15 @@ def generate_device(config, deviceName): getFunctionCall(config.get('functionCallDown')), config.getfloat('timeBase', fallback=0.1), name=deviceName) + elif device_type == 'ShutdownButton': + return ShutdownButton(pin=config.getint('Pin'), + action=getFunctionCall(config.get('functionCall',fallback='functionCallShutdown')), + name=deviceName, + bouncetime=config.getint('bouncetime', fallback=500), + edge=config.get('edge', fallback='FALLING'), + hold_repeat=config.getboolean('hold_repeat', False), + hold_time=config.getfloat('hold_time', fallback=0.3), + pull_up_down=config.get('pull_up_down', fallback=GPIO.PUD_UP)) logger.warning('cannot find {}'.format(deviceName)) return None diff --git a/components/gpio_control/test/gpio_settings_test.ini b/components/gpio_control/test/gpio_settings_test.ini index 78b859287..a1ab63273 100644 --- a/components/gpio_control/test/gpio_settings_test.ini +++ b/components/gpio_control/test/gpio_settings_test.ini @@ -35,7 +35,7 @@ hold_repeat: False [Shutdown] enabled: True -Type: Button +Type: ShutdownButton Pin: 3 hold_time: 2 functionCall: functionCallShutdown diff --git a/components/gpio_control/test/test_shutdown_button.py b/components/gpio_control/test/test_shutdown_button.py index 223106c58..18ae10672 100644 --- a/components/gpio_control/test/test_shutdown_button.py +++ b/components/gpio_control/test/test_shutdown_button.py @@ -16,12 +16,12 @@ def shutdown_button(): return ShutdownButton(pin=1, action=mocked_function) -class TestShutdownButton(): +class TestShutDownButton(): def test_init(self): ShutdownButton(pin=1) @patch('time.sleep', mock_time) - def test_action(self, shutdown_button): + def test_action_too_short_press(self, shutdown_button): for i in range(9): GPIO.input.reset_mock() GPIO.input.side_effect = i * [0] + [1] @@ -30,13 +30,13 @@ def test_action(self, shutdown_button): mocked_function.assert_not_called() @patch('time.sleep', mock_time) - def test_action2(self, shutdown_button): + def test_action_invalid_press(self, shutdown_button): GPIO.input.side_effect = lambda *args: 1 shutdown_button.callbackFunctionHandler() mocked_function.assert_not_called() @patch('time.sleep', mock_time) - def test_action3(self, shutdown_button): + def test_action_valid_press(self, shutdown_button): GPIO.input.side_effect = lambda *args: 0 shutdown_button.callbackFunctionHandler() mocked_function.assert_called_once() From 305325d5a9c094e4c47efe6f8ec6d5d7d0fd10d1 Mon Sep 17 00:00:00 2001 From: s-martin Date: Mon, 23 Nov 2020 23:45:06 +0100 Subject: [PATCH 05/41] add mission date of 2.2 release (#1160) * update to next version number * fixed date for 2.2 release * go back for commit to master --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a66eeef3..494db0b35 100755 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ A contactless jukebox for the Raspberry Pi, playing audio files, playlists, podc * **Gitter Community** we got ourselves a gitter community; chat us up at https://gitter.im/phoniebox -* **Phoniebox [2.2](https://github.com/MiczFlor/RPi-Jukebox-RFID/milestone/4?closed=1) released (2020-xx-xx)** +* **Phoniebox [2.2](https://github.com/MiczFlor/RPi-Jukebox-RFID/milestone/4?closed=1) released (2020-11-23)** The [2.2](https://github.com/MiczFlor/RPi-Jukebox-RFID/milestone/4?closed=1) release was pushed through the doors with many contributors (some of which in alphabetical order): @andreasbrett @BerniPi @juhrmann @Luegengladiator @MarkusProchaska @MarlonKrug @patrickweigelt @princemaxwell @RalfAlbers @s-martin @themorlan @veloxidSchweiz @xn--nding-jua. [List of all contributors](https://github.com/MiczFlor/RPi-Jukebox-RFID/graphs/contributors) From 6d504e5158f8ebff98fbf90c11b5410bd406b10d Mon Sep 17 00:00:00 2001 From: Schneelocke <75278644+Schneelocke@users.noreply.github.com> Date: Tue, 1 Dec 2020 20:30:17 +0100 Subject: [PATCH 06/41] Set Own Repo --- scripts/installscripts/buster-install-default.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/installscripts/buster-install-default.sh b/scripts/installscripts/buster-install-default.sh index 4fc1efe49..561676436 100755 --- a/scripts/installscripts/buster-install-default.sh +++ b/scripts/installscripts/buster-install-default.sh @@ -19,7 +19,7 @@ # The absolute path to the folder which contains this script PATHDATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" GIT_BRANCH=${GIT_BRANCH:-master} -GIT_URL=${GIT_URL:-https://github.com/MiczFlor/RPi-Jukebox-RFID.git} +GIT_URL=${GIT_URL:-https://github.com/Schneelocke/RPi-Jukebox-RFID.git} echo GIT_BRANCH $GIT_BRANCH echo GIT_URL $GIT_URL From cdd33bf1df252e923761d9ed02c305db2c2b1a21 Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Sun, 13 Dec 2020 20:53:58 +0100 Subject: [PATCH 07/41] Revert "Set Own Repo" This reverts commit 6d504e5158f8ebff98fbf90c11b5410bd406b10d. --- scripts/installscripts/buster-install-default.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/installscripts/buster-install-default.sh b/scripts/installscripts/buster-install-default.sh index e8b90952b..b4b4f553f 100755 --- a/scripts/installscripts/buster-install-default.sh +++ b/scripts/installscripts/buster-install-default.sh @@ -19,7 +19,7 @@ # The absolute path to the folder which contains this script PATHDATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" GIT_BRANCH=${GIT_BRANCH:-master} -GIT_URL=${GIT_URL:-https://github.com/Schneelocke/RPi-Jukebox-RFID.git} +GIT_URL=${GIT_URL:-https://github.com/MiczFlor/RPi-Jukebox-RFID.git} echo GIT_BRANCH $GIT_BRANCH echo GIT_URL $GIT_URL From 066d80762d91cffa33bec672cad35abfb6e75326 Mon Sep 17 00:00:00 2001 From: s-martin Date: Tue, 15 Dec 2020 23:03:47 +0100 Subject: [PATCH 08/41] Add Discussions link to Readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 494db0b35..e0defd681 100755 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ A contactless jukebox for the Raspberry Pi, playing audio files, playlists, podc ## Important updates / news +* **Discussions forums** we use Github's Discussions feature for a more forum style. Please ask questions there, bugs and enhancements should still be in issues; see here https://github.com/MiczFlor/RPi-Jukebox-RFID/discussions + * **Gitter Community** we got ourselves a gitter community; chat us up at https://gitter.im/phoniebox * **Phoniebox [2.2](https://github.com/MiczFlor/RPi-Jukebox-RFID/milestone/4?closed=1) released (2020-11-23)** From 11cc776f68aca6cc04f0fcf8de398caef0d5d455 Mon Sep 17 00:00:00 2001 From: s-martin Date: Sat, 19 Dec 2020 23:13:08 +0100 Subject: [PATCH 09/41] Create codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 67 +++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000..0c63344c5 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,67 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ develop ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ develop ] + schedule: + - cron: '16 18 * * 0' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + language: [ 'cpp', 'javascript', 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From 42f66ded243521d1036c6840c175165000ac3bd2 Mon Sep 17 00:00:00 2001 From: s-martin Date: Sat, 19 Dec 2020 23:16:43 +0100 Subject: [PATCH 10/41] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0c63344c5..df6b2837a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -28,7 +28,7 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'cpp', 'javascript', 'python' ] + language: [ 'javascript', 'python' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed From ab02337fbaaba907655a22e07ad8ad8d0dca8ca5 Mon Sep 17 00:00:00 2001 From: s-martin Date: Sat, 2 Jan 2021 10:32:14 +0100 Subject: [PATCH 11/41] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0defd681..fdafd81f5 100755 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ A contactless jukebox for the Raspberry Pi, playing audio files, playlists, podc ## Important updates / news -* **Discussions forums** we use Github's Discussions feature for a more forum style. Please ask questions there, bugs and enhancements should still be in issues; see here https://github.com/MiczFlor/RPi-Jukebox-RFID/discussions +* **Discussions forums** we use Github's Discussions feature for a more forum style. Please ask general questions in [Discussions](https://github.com/MiczFlor/RPi-Jukebox-RFID/discussions), bugs and enhancements should still be in [Issues](https://github.com/MiczFlor/RPi-Jukebox-RFID/issues). * **Gitter Community** we got ourselves a gitter community; chat us up at https://gitter.im/phoniebox From 7e38d76763521ca640d1ede26b88de0f26bc0265 Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Thu, 3 Dec 2020 23:29:25 +0100 Subject: [PATCH 12/41] Improve performance in player.php by avoiding system calls --- htdocs/api/common.php | 14 ++++++++++++++ htdocs/api/player.php | 33 +++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/htdocs/api/common.php b/htdocs/api/common.php index 7955989c7..3089b5472 100755 --- a/htdocs/api/common.php +++ b/htdocs/api/common.php @@ -36,7 +36,21 @@ function execSuccessfully($command) { echo "Execution failed\nCommand: {$command}\nOutput: {$formattedOutput}\nRC: .${rc}"; http_response_code(500); exit(); + } + return $output; +} + +function execMPDCommand($command) { + $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); + $stream = socket_connect($socket,"localhost" ,6600); + socket_write($socket, $command, strlen($command)); + socket_shutdown ($socket,1); + $output = array(); + while ($out = socket_read($socket, 2048)) { + $output = array_merge($output,explode("\n", $out)); } + socket_close($socket); return $output; } + ?> diff --git a/htdocs/api/player.php b/htdocs/api/player.php index a67fb8417..98f049a83 100755 --- a/htdocs/api/player.php +++ b/htdocs/api/player.php @@ -12,6 +12,8 @@ * DEBUG_WebApp_API="TRUE" */ $debugLoggingConf = parse_ini_file("../../settings/debugLogging.conf"); +$globalConf = parse_ini_file("../../settings/global.conf"); +$globalConf['ENABLE_CHAPTERS_FOR_EXTENSIONS'] = "mp4,m4a,m4b,m4r"; if ($debugLoggingConf['DEBUG_WebApp_API'] == "TRUE") { file_put_contents("../../logs/debug.log", "\n# WebApp API # " . __FILE__, FILE_APPEND | LOCK_EX); @@ -51,8 +53,11 @@ function handlePut() { function handleGet() { global $debugLoggingConf; - $statusCommand = "echo 'status\ncurrentsong\nclose' | nc -w 1 localhost 6600"; - $commandResponseList = execSuccessfully($statusCommand); + global $globalConf; + //$statusCommand = "echo 'status\ncurrentsong\nclose' | nc -w 1 localhost 6600"; + //$commandResponseList = execSuccessfully($statusCommand); + $statusCommand = "status\ncurrentsong\nclose"; + $commandResponseList = execMPDCommand($statusCommand); $responseList = array(); forEach ($commandResponseList as $commandResponse) { preg_match("/(?P.+?): (?P.*)/", $commandResponse, $match); @@ -60,16 +65,24 @@ function handleGet() { $responseList[strtolower($match['key'])] = $match['value']; } } + // get volume separately from mpd, because we might use amixer to control volume - $command = "playout_controls.sh -c=getvolume"; - $output = execScript($command); - $responseList['volume'] = implode('\n', $output); - - $command = "playout_controls.sh -c=getchapters"; - $output = execScript($command); - $jsonChapters = trim(implode("\n", $output)); - $chapters = @json_decode($jsonChapters, true); + if ($globalConf['VOLUMEMANAGER'] != "mpd"){ + $command = "playout_controls.sh -c=getvolume"; + $output = execScript($command); + $responseList['volume'] = implode('\n', $output); + } + // get chapter info if file extension indicates supports + $fileExtension = pathinfo ( $responseList['file'], PATHINFO_EXTENSION); + if (in_array($fileExtension, explode(',', $globalConf['ENABLE_CHAPTERS_FOR_EXTENSIONS']))) { + $command = "playout_controls.sh -c=getchapters"; + $output = execScript($command); + $jsonChapters = trim(implode("\n", $output)); + $chapters = @json_decode($jsonChapters, true); + } + + $currentChapterIndex = null; $mappedChapters = array_filter(array_map(function($chapter) use($responseList, &$currentChapterIndex) { static $i = 1; From 804b8a36ba0b97de9be7c13c9c85d21089637684 Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Thu, 3 Dec 2020 23:51:56 +0100 Subject: [PATCH 13/41] removed old code --- htdocs/api/player.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/api/player.php b/htdocs/api/player.php index 98f049a83..3c4d6ff66 100755 --- a/htdocs/api/player.php +++ b/htdocs/api/player.php @@ -53,9 +53,7 @@ function handlePut() { function handleGet() { global $debugLoggingConf; - global $globalConf; - //$statusCommand = "echo 'status\ncurrentsong\nclose' | nc -w 1 localhost 6600"; - //$commandResponseList = execSuccessfully($statusCommand); + global $globalConf; $statusCommand = "status\ncurrentsong\nclose"; $commandResponseList = execMPDCommand($statusCommand); $responseList = array(); From f6b9afa59c45cb4868b0292af85c36af3053f0e2 Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Tue, 8 Dec 2020 22:12:05 +0100 Subject: [PATCH 14/41] Added chapter exts and minduration to global conf --- htdocs/api/player.php | 3 +-- scripts/inc.writeGlobalConfig.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/htdocs/api/player.php b/htdocs/api/player.php index 3c4d6ff66..9d2d92f16 100755 --- a/htdocs/api/player.php +++ b/htdocs/api/player.php @@ -13,7 +13,6 @@ */ $debugLoggingConf = parse_ini_file("../../settings/debugLogging.conf"); $globalConf = parse_ini_file("../../settings/global.conf"); -$globalConf['ENABLE_CHAPTERS_FOR_EXTENSIONS'] = "mp4,m4a,m4b,m4r"; if ($debugLoggingConf['DEBUG_WebApp_API'] == "TRUE") { file_put_contents("../../logs/debug.log", "\n# WebApp API # " . __FILE__, FILE_APPEND | LOCK_EX); @@ -73,7 +72,7 @@ function handleGet() { // get chapter info if file extension indicates supports $fileExtension = pathinfo ( $responseList['file'], PATHINFO_EXTENSION); - if (in_array($fileExtension, explode(',', $globalConf['ENABLE_CHAPTERS_FOR_EXTENSIONS']))) { + if (in_array($fileExtension, explode(',', $globalConf['CHAPTEREXTENSIONS']))) { $command = "playout_controls.sh -c=getchapters"; $output = execScript($command); $jsonChapters = trim(implode("\n", $output)); diff --git a/scripts/inc.writeGlobalConfig.sh b/scripts/inc.writeGlobalConfig.sh index 88909e0ee..85aa4c224 100755 --- a/scripts/inc.writeGlobalConfig.sh +++ b/scripts/inc.writeGlobalConfig.sh @@ -273,6 +273,28 @@ fi # 2. then|or read value from file VERSION=`cat $PATHDATA/../settings/version` +############################################## +# CHAPTEREXTENSIONS +# Only files with the extensions listed will be scanned for chapters +# 1. create a default if file does not exist +if [ ! -f $PATHDATA/../settings/CHAPTEREXTENSIONS ]; then + echo "mp4,m4a,m4b,m4r" > $PATHDATA/../settings/CHAPTEREXTENSIONS + chmod 777 $PATHDATA/../settings/CHAPTEREXTENSIONS +fi +# 2. then|or read value from file +CHAPTEREXTENSIONS=`cat $PATHDATA/../settings/CHAPTEREXTENSIONS` + +############################################## +# CHAPTERMINDURATION +# Only files with play length bigger than minimum will be scanned for chapters +# 1. create a default if file does not exist +if [ ! -f $PATHDATA/../settings/CHAPTERMINDURATION ]; then + echo "600" > $PATHDATA/../settings/CHAPTERMINDURATION + chmod 777 $PATHDATA/../settings/CHAPTERMINDURATION +fi +# 2. then|or read value from file +CHAPTERMINDURATION=`cat $PATHDATA/../settings/CHAPTERMINDURATION` + ############################################## # read control card ids # 1. read all values from file @@ -306,6 +328,8 @@ CMDSEEKBACK=`grep 'CMDSEEKBACK' $PATHDATA/../settings/rfid_trigger_play.conf|tai # EDITION # LANG # VERSION +# CHAPTEREXTENSIONS +# CHAPTERMINDURATION # CMDVOLUP # CMDVOLDOWN # CMDNEXT @@ -337,6 +361,8 @@ echo "READWLANIPYN=\"${READWLANIPYN}\"" >> "${PATHDATA}/../settings/global.conf" echo "EDITION=\"${EDITION}\"" >> "${PATHDATA}/../settings/global.conf" echo "LANG=\"${LANG}\"" >> "${PATHDATA}/../settings/global.conf" echo "VERSION=\"${VERSION}\"" >> "${PATHDATA}/../settings/global.conf" +echo "CHAPTEREXTENSIONS=\"${CHAPTEREXTENSIONS}\"" >> "${PATHDATA}/../settings/global.conf" +echo "CHAPTERMINDURATION=\"${CHAPTERMINDURATION}\"" >> "${PATHDATA}/../settings/global.conf" echo "CMDVOLUP=\"${CMDVOLUP}\"" >> "${PATHDATA}/../settings/global.conf" echo "CMDVOLDOWN=\"${CMDVOLDOWN}\"" >> "${PATHDATA}/../settings/global.conf" echo "CMDNEXT=\"${CMDNEXT}\"" >> "${PATHDATA}/../settings/global.conf" From 397a581eef05f94bb5cf66d9a3479a666c17cbaf Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Tue, 8 Dec 2020 22:36:08 +0100 Subject: [PATCH 15/41] Removed the old variables from .sh script --- scripts/playout_controls.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/playout_controls.sh b/scripts/playout_controls.sh index 3e8fc9592..6302d4388 100755 --- a/scripts/playout_controls.sh +++ b/scripts/playout_controls.sh @@ -112,8 +112,6 @@ shortcutCommands="^(setvolume|volumedown|volumeup|mute)$" # Run the code from this block only, if the current command is not in "shortcutCommands" if [[ ! "$COMMAND" =~ $shortcutCommands ]] then - ENABLE_CHAPTERS_FOR_EXTENSIONS="mp4,m4a,m4b,m4r" - ENABLE_CHAPTERS_MIN_DURATION="600" function dbg { if [ "${DEBUG_playout_controls_sh}" == "TRUE" ]; then @@ -152,7 +150,7 @@ then CHAPTERS_FILE="${CURRENT_SONG_DIR}/${CURRENT_SONG_BASENAME%.*}.chapters.json" dbg "chapters file: $CHAPTERS_FILE" - if [ "$(grep -wo "$CURRENT_SONG_FILE_EXT" <<< "$ENABLE_CHAPTERS_FOR_EXTENSIONS")" == "$CURRENT_SONG_FILE_EXT" ]; then + if [ "$(grep -wo "$CURRENT_SONG_FILE_EXT" <<< "$CHAPTEREXTENSIONS")" == "$CURRENT_SONG_FILE_EXT" ]; then CHAPTER_SUPPORT_FOR_EXTENSION="1" else CHAPTER_SUPPORT_FOR_EXTENSION="0" @@ -160,7 +158,7 @@ then dbg "chapters for extension enabled: $CHAPTER_SUPPORT_FOR_EXTENSION" - if [ "$(printf "${CURRENT_SONG_DURATION}\n${ENABLE_CHAPTERS_MIN_DURATION}\n" | sort -g | head -1)" == "${ENABLE_CHAPTERS_MIN_DURATION}" ]; then + if [ "$(printf "${CURRENT_SONG_DURATION}\n${CHAPTERMINDURATION}\n" | sort -g | head -1)" == "${CHAPTERMINDURATION}" ]; then CHAPTER_SUPPORT_FOR_DURATION="1" else CHAPTER_SUPPORT_FOR_DURATION="0" From f71d1c7da1e8acf1f9ca304445692d37060cfdb2 Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Sun, 13 Dec 2020 21:53:38 +0100 Subject: [PATCH 16/41] Fixed Socket Read for long content --- htdocs/api/common.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/api/common.php b/htdocs/api/common.php index 3089b5472..f6855561c 100755 --- a/htdocs/api/common.php +++ b/htdocs/api/common.php @@ -47,9 +47,10 @@ function execMPDCommand($command) { socket_shutdown ($socket,1); $output = array(); while ($out = socket_read($socket, 2048)) { - $output = array_merge($output,explode("\n", $out)); + $outputTemp .= $out; } - socket_close($socket); + $output = array_merge($output,explode("\n", $outputTemp)); + socket_close($socket); return $output; } From 378cb278f3532cfcd86c30806c1e89bc5c3b28d8 Mon Sep 17 00:00:00 2001 From: Schneelocke Date: Mon, 4 Jan 2021 23:59:19 +0100 Subject: [PATCH 17/41] Improved Error-Handling with folders that have wrong permission. --- htdocs/func.php | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/htdocs/func.php b/htdocs/func.php index ff829c25b..88ac8cb6a 100755 --- a/htdocs/func.php +++ b/htdocs/func.php @@ -251,20 +251,28 @@ function dir_list_recursively($rootdir = "") { * The dir path will end without '/'. */ - $iter = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($rootdir, RecursiveDirectoryIterator::SKIP_DOTS + RecursiveDirectoryIterator::FOLLOW_SYMLINKS), - RecursiveIteratorIterator::SELF_FIRST, - RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied" - ); - - $paths = array($rootdir); - foreach ($iter as $path => $dir) { - if ($dir->isDir()) { - $paths[] = $path; - } - } - - return $paths; + try{ + $iter = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($rootdir, RecursiveDirectoryIterator::SKIP_DOTS + RecursiveDirectoryIterator::FOLLOW_SYMLINKS), + RecursiveIteratorIterator::SELF_FIRST, + RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied" + ); + } + catch (UnexpectedValueException $e) { + global $debug; + if($debug == "true") { + file_put_contents("../logs/debug.log", "\n # Directory ".$rootdir." is a directory we can not recurse into. Please check permissions. " , FILE_APPEND | LOCK_EX); + } + } + + $paths = array($rootdir); + foreach ($iter as $path => $dir) { + if ($dir->isDir()) { + $paths[] = $path; + } + } + + return $paths; } function index_folders_print($item, $key) @@ -513,7 +521,7 @@ function getSubDirectories( $path = '.', $level = 0, $showfiles = 0 ){ // Open the directory to the handle $dh $dh = @opendir($path); - while( false !== ( $file = readdir( $dh ) ) ){ + while( false !== $dh && false !== ( $file = readdir( $dh ) ) ){ // Loop through the directory if( !in_array( $file, $ignore ) ){ From fed57e794f78707c4eb91b865fe5762f4168be14 Mon Sep 17 00:00:00 2001 From: manajoe Date: Tue, 5 Jan 2021 21:17:50 +0100 Subject: [PATCH 18/41] shutdownreducingvolume webUI --- htdocs/inc.header.php | 2 + htdocs/inc.setShutdownReduceVolume.php | 79 ++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 htdocs/inc.setShutdownReduceVolume.php diff --git a/htdocs/inc.header.php b/htdocs/inc.header.php index 8d4a0b3b9..0ecdacb55 100755 --- a/htdocs/inc.header.php +++ b/htdocs/inc.header.php @@ -202,6 +202,7 @@ function fileGetContentOrDefault($filename, $defaultValue) 'scan', 'idletime', 'shutdownafter', + 'shutdownwithreducingvolume', 'stopplayoutafter', 'enableresume', 'disableresume', @@ -303,6 +304,7 @@ function fileGetContentOrDefault($filename, $defaultValue) 'volumedown' => "/usr/bin/sudo ".$conf['scripts_abs']."/playout_controls.sh -c=volumedown", // volume down 'idletime' => "/usr/bin/sudo ".$conf['scripts_abs']."/playout_controls.sh -c=setidletime -v=%s", // set idletime 'shutdownafter' => "/usr/bin/sudo ".$conf['scripts_abs']."/playout_controls.sh -c=shutdownafter -v=%s", // set shutdownafter time (sleeptimer) + 'shutdownwithreducingvolume' => "/usr/bin/sudo ".$conf['scripts_abs']."/playout_controls.sh -c=shutdownwithreducingvolume -v=%s", // set time to shutdown with reducing volume 'stopplayoutafter' => "/usr/bin/sudo ".$conf['scripts_abs']."/playout_controls.sh -c=playerstopafter -v=%s",// set playerstopafter time (auto stop timer) 'playpos' => "/usr/bin/sudo ".$conf['scripts_abs']."/playout_controls.sh -c=playerplay -v=%s", // play from playlist position, 'DebugLogClear' => "sudo rm ../logs/debug.log; sudo touch ../logs/debug.log; sudo chmod 777 ../logs/debug.log", diff --git a/htdocs/inc.setShutdownReduceVolume.php b/htdocs/inc.setShutdownReduceVolume.php new file mode 100644 index 000000000..36d03ba4a --- /dev/null +++ b/htdocs/inc.setShutdownReduceVolume.php @@ -0,0 +1,79 @@ + + + + strtotime($shut_reduce_volume_value)) { + $unixtime = $unixtime - 86400; + } + $remainingshut_reduce_volume_ = (strtotime($shut_reduce_volume_value)-$unixtime)/60; + if($remainingshut_reduce_volume_ > 60) { + $remainingshut_reduce_volume_ = 60; + } + $remainingshut_reduce_volume_select = round($remainingshut_reduce_volume_); + } + else { + $remainingshut_reduce_volume_select = 0; + } + //$remainingshut_reduce_volume_select = 10; // debug + ?> +
+
+
+

+
'> +
+ + + '/> + +
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+ From 494873466dd6224cb48ce5cda354436053cb7158 Mon Sep 17 00:00:00 2001 From: manajoe Date: Tue, 5 Jan 2021 21:19:49 +0100 Subject: [PATCH 19/41] Updated settings.php --- htdocs/settings.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/settings.php b/htdocs/settings.php index 13a0b9224..ea2e16675 100755 --- a/htdocs/settings.php +++ b/htdocs/settings.php @@ -156,6 +156,7 @@ From 1541af1ec9bb6e38d08f785e198a61cd149112c7 Mon Sep 17 00:00:00 2001 From: manajoe Date: Tue, 5 Jan 2021 21:25:49 +0100 Subject: [PATCH 20/41] configured lang.php-files --- htdocs/inc.setShutdownReduceVolume.php | 2 +- htdocs/lang/lang-de-DE.php | 1 + htdocs/lang/lang-en-UK.php | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/inc.setShutdownReduceVolume.php b/htdocs/inc.setShutdownReduceVolume.php index 36d03ba4a..2b0d182ff 100644 --- a/htdocs/inc.setShutdownReduceVolume.php +++ b/htdocs/inc.setShutdownReduceVolume.php @@ -38,7 +38,7 @@
-

+

'>
+ + +