added config file with caching and bitrate

This commit is contained in:
JISAUAY committed 2025-09-16 16:25:58 -05:00
1 parent e3e94f35df
commit 7b6a1ed30c
3 files changed
+22 -4

No files matched your search

+4 -1
View File
@@ -306,11 +306,14 @@ class SubpyConn:
return starred return starred
# Returns a requests Response object, the data stream can be found in Response.content # Returns a requests Response object, the data stream can be found in Response.content
def stream(self, song_id: str) -> requests.Response: def stream(self, song_id: str, maxBitRate: int | None = None) -> requests.Response:
url = self.base_url + '/rest/stream?' url = self.base_url + '/rest/stream?'
payload = self._getBasePayload() payload = self._getBasePayload()
if maxBitRate:
payload['maxBitRate'] = maxBitRate
payload['id'] = song_id payload['id'] = song_id
return requests.get(url + self._encodePayload(payload), stream=True) return requests.get(url + self._encodePayload(payload), stream=True)
+15 -3
View File
@@ -1,8 +1,10 @@
import configparser
import logging import logging
import asyncio
import random import random
import os import os
import re
import io import io
import asyncio
LOG_FILE = 'textual.log' LOG_FILE = 'textual.log'
LOGGING_LEVEL = logging.DEBUG LOGGING_LEVEL = logging.DEBUG
@@ -12,7 +14,14 @@ LOG_FORMAT = '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
if os.path.exists(LOG_FILE): if os.path.exists(LOG_FILE):
os.remove(LOG_FILE) os.remove(LOG_FILE)
CACHE = True # Read config file
config = configparser.ConfigParser()
config.read('config.ini')
CACHE = config.getboolean('STREAMING', 'Cache')
BITRATE = config.get('STREAMING', 'Bitrate')
BITRATE = re.findall(r'[0-9]+', BITRATE)[0]
BITRATE = int(BITRATE) if BITRATE else BITRATE
os.makedirs(".cache/art/", exist_ok=True) os.makedirs(".cache/art/", exist_ok=True)
os.makedirs(".cache/audio/", exist_ok=True) os.makedirs(".cache/audio/", exist_ok=True)
@@ -30,7 +39,7 @@ from textual import on, events, work
from textual.binding import Binding from textual.binding import Binding
from textual.reactive import reactive from textual.reactive import reactive
from textual.app import App, ComposeResult, RenderResult from textual.app import App, ComposeResult, RenderResult
from textual.widgets import Footer, Header, OptionList, DataTable, ProgressBar, Label, Input, Placeholder from textual.widgets import Footer, Header, OptionList, DataTable, ProgressBar, Label, Input
from textual.widget import Widget from textual.widget import Widget
from textual.containers import Horizontal, Vertical, Container from textual.containers import Horizontal, Vertical, Container
from textual.screen import Screen from textual.screen import Screen
@@ -639,6 +648,9 @@ class TextualSubpyPlayer(App):
asyncio.create_task(asyncio.to_thread(conn.scrobble, song.id, submission=False)) asyncio.create_task(asyncio.to_thread(conn.scrobble, song.id, submission=False))
else: else:
# Run the blocking stream call in a separate thread # Run the blocking stream call in a separate thread
if BITRATE:
r = await asyncio.to_thread(conn.stream, song.id, maxBitRate=BITRATE)
else:
r = await asyncio.to_thread(conn.stream, song.id) r = await asyncio.to_thread(conn.stream, song.id)
audio_content = r.content audio_content = r.content
+3
View File
@@ -0,0 +1,3 @@
[STREAMING]
Cache = true
Bitrate = 320kbps