From 5675dfd20b24f1e0eef06b11d9ec41a894d3a5bf Mon Sep 17 00:00:00 2001 From: salmonik Date: Tue, 28 Apr 2026 20:05:36 +0200 Subject: multitude of changes. but primarly, use db for all data. Signed-off-by: salmonik --- cogs/utils/settings.py | 69 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 23 deletions(-) (limited to 'cogs/utils/settings.py') diff --git a/cogs/utils/settings.py b/cogs/utils/settings.py index d66ce7f..7146b6c 100644 --- a/cogs/utils/settings.py +++ b/cogs/utils/settings.py @@ -3,16 +3,18 @@ # Copyright (C) 2026 Salmonik @ salmonik@tuta.io # https://codeberg.org/salmonik/senator-sperma -import json import logging -import aiofiles +import sqlite3 import os from dataclasses import dataclass, field +from cogs.utils.database import get_connection, init_database + logger = logging.getLogger(__name__) -settings_file = "data/settings.json" -DEFAULT_BASEURL = "http://localhost:8080" +DEFAULT_BASEURL = "http://localhost:3939" + +init_database() @dataclass @@ -28,24 +30,22 @@ class Settings: } try: - if os.path.exists(settings_file): - async with aiofiles.open(settings_file, "r") as f: - content = await f.read() - if content.strip(): - self._data = json.loads(content) - self._sync_from_data() - logger.info("Settings loaded into memory") - else: - self._data = default_settings.copy() - self._sync_from_data() - await self.save() - logger.warning("Empty settings.json, reset to defaults") + conn = get_connection() + c = conn.cursor() + c.execute("SELECT key, value FROM settings") + rows = c.fetchall() + conn.close() + + if rows: + self._data = {row[0]: row[1] for row in rows} + self._sync_from_data() + logger.info("Settings loaded from database") else: self._data = default_settings.copy() self._sync_from_data() await self.save() - logger.info("Created default settings.json") - except json.JSONDecodeError as e: + logger.info("Created default settings in database") + except Exception as e: logger.error(f"Error loading settings: {e}") self._data = default_settings.copy() self._sync_from_data() @@ -53,17 +53,28 @@ class Settings: return self def _sync_from_data(self): - self.volume = self._data.get("volume", 1.0) + try: + self.volume = float(self._data.get("volume", 1.0)) + except (ValueError, TypeError): + self.volume = 1.0 self.baseurl = self._data.get("baseurl", DEFAULT_BASEURL) def _sync_to_data(self): - self._data["volume"] = self.volume + self._data["volume"] = str(self.volume) self._data["baseurl"] = self.baseurl async def save(self): self._sync_to_data() - async with aiofiles.open(settings_file, "w") as f: - await f.write(json.dumps(self._data, indent=2)) + conn = get_connection() + c = conn.cursor() + c.execute("PRAGMA foreign_keys = ON") + for key, value in self._data.items(): + c.execute( + "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", + (key, value), + ) + conn.commit() + conn.close() _settings_instance: Settings | None = None @@ -90,4 +101,16 @@ def get_volume() -> float: def get_baseurl() -> str: - return _settings_instance.baseurl.rstrip("/") if _settings_instance else DEFAULT_BASEURL + url = os.getenv("COPYPARTY_URL") + if not url: + logger.warning("COPYPARTY_URL not set! Using default http://localhost:3939") + return DEFAULT_BASEURL + return url.rstrip("/") + + +def get_uploadurl() -> str: + url = os.getenv("COPYPARTY_URL_UPLOAD") + if not url: + logger.warning("COPYPARTY_URL_UPLOAD not set! Using default http://localhost:3939") + return DEFAULT_BASEURL + return url.rstrip("/") -- cgit v1.2.3 From 355d8efefc1650e9aca2c9f0c58c45dc48904ccb Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 29 Apr 2026 14:43:19 +0200 Subject: proper context for settings Signed-off-by: salmonik --- cogs/utils/settings.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'cogs/utils/settings.py') diff --git a/cogs/utils/settings.py b/cogs/utils/settings.py index 7146b6c..b1a585c 100644 --- a/cogs/utils/settings.py +++ b/cogs/utils/settings.py @@ -30,11 +30,10 @@ class Settings: } try: - conn = get_connection() - c = conn.cursor() - c.execute("SELECT key, value FROM settings") - rows = c.fetchall() - conn.close() + with get_connection() as conn: + c = conn.cursor() + c.execute("SELECT key, value FROM settings") + rows = c.fetchall() if rows: self._data = {row[0]: row[1] for row in rows} @@ -65,16 +64,15 @@ class Settings: async def save(self): self._sync_to_data() - conn = get_connection() - c = conn.cursor() - c.execute("PRAGMA foreign_keys = ON") - for key, value in self._data.items(): - c.execute( - "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", - (key, value), - ) - conn.commit() - conn.close() + with get_connection() as conn: + c = conn.cursor() + c.execute("PRAGMA foreign_keys = ON") + for key, value in self._data.items(): + c.execute( + "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", + (key, value), + ) + conn.commit() _settings_instance: Settings | None = None -- cgit v1.2.3