From c927d4d94b4eb33dd92e3c07a5e0f31ed68e165f Mon Sep 17 00:00:00 2001 From: oberon Date: Wed, 18 Feb 2026 22:41:07 +0100 Subject: [PATCH] fixed random playback --- app/__pycache__/__init__.cpython-314.pyc | Bin 0 -> 2753 bytes app/routes/__pycache__/api.cpython-314.pyc | Bin 0 -> 27719 bytes app/routes/api.py | 12 +++++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 app/__pycache__/__init__.cpython-314.pyc create mode 100644 app/routes/__pycache__/api.cpython-314.pyc diff --git a/app/__pycache__/__init__.cpython-314.pyc b/app/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..597b17f7a3d8695e8a372e37841ad4145660cdd0 GIT binary patch literal 2753 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 literal 0 HcmV?d00001 diff --git a/app/routes/api.py b/app/routes/api.py index 2436513..93c0a0f 100644 --- a/app/routes/api.py +++ b/app/routes/api.py @@ -12,6 +12,7 @@ from flask import Blueprint, jsonify, request, current_app import app.state as state from app.bluetooth.manager import MouldKing, advertiser, tracer from app.utils.helpers import load_default_sounds, load_soundboard_configs, load_soundboard_config +from config import Config logger = logging.getLogger(__name__) audio_lock = threading.Lock() @@ -43,8 +44,13 @@ def _load_sound(file_path): return snd -def _play_sound_entry(sound_entry, channel_req=None, loop_req=0): - sounds_dir = current_app.config['SOUNDS_DIR'] +def _play_sound_entry(sound_entry, channel_req=None, loop_req=0, sounds_dir=None): + if sounds_dir is None: + try: + sounds_dir = current_app.config['SOUNDS_DIR'] + except Exception: + sounds_dir = Config.SOUNDS_DIR + base_path = sound_entry.get('base_path') or sounds_dir file_path = os.path.join(base_path, sound_entry['file']) if not os.path.exists(file_path): @@ -120,7 +126,7 @@ def _auto_random_tick(): # Play one random sound sound_entry, err = _pick_random_sound() if sound_entry: - _play_sound_entry(sound_entry, sound_entry.get('channel'), sound_entry.get('loop')) + _play_sound_entry(sound_entry, sound_entry.get('channel'), sound_entry.get('loop'), Config.SOUNDS_DIR) # schedule next delay = rand_between(imin, imax) * 60 with auto_random_lock: