kv-tube/app/services/settings.py
KV-Tube Deployer f429116ed0
Some checks failed
Docker Build & Push / build (push) Has been cancelled
v3.1: WebLLM summarization, improved translations, copy button, removed mini player
- Added WebLLM service for client-side AI summarization and translation
- Improved summary quality (5 sentences, 600 char limit)
- Added Vietnamese character detection for proper language labels
- Added Copy button for summary content
- Key Points now extract conceptual ideas, not transcript excerpts
- Removed mini player (scroll-to-minimize) feature
- Fixed main.js null container error
- Silent WebLLM loading (no overlay/toasts)
- Added transcript service with yt-dlp
2026-01-19 19:03:09 +07:00

55 lines
1.6 KiB
Python
Executable file

import json
import os
import logging
from config import Config
logger = logging.getLogger(__name__)
class SettingsService:
"""Manage application settings using a JSON file"""
SETTINGS_FILE = os.path.join(Config.DATA_DIR, 'settings.json')
# Default settings
DEFAULTS = {
'youtube_engine': 'auto', # auto, local, remote
}
@classmethod
def _load_settings(cls) -> dict:
"""Load settings from file or return defaults"""
try:
if os.path.exists(cls.SETTINGS_FILE):
with open(cls.SETTINGS_FILE, 'r') as f:
data = json.load(f)
# Merge with defaults to ensure all keys exist
return {**cls.DEFAULTS, **data}
except Exception as e:
logger.error(f"Error loading settings: {e}")
return cls.DEFAULTS.copy()
@classmethod
def get(cls, key: str, default=None):
"""Get a setting value"""
settings = cls._load_settings()
return settings.get(key, default if default is not None else cls.DEFAULTS.get(key))
@classmethod
def set(cls, key: str, value):
"""Set a setting value and persist"""
settings = cls._load_settings()
settings[key] = value
try:
with open(cls.SETTINGS_FILE, 'w') as f:
json.dump(settings, f, indent=2)
except Exception as e:
logger.error(f"Error saving settings: {e}")
raise
@classmethod
def get_all(cls):
"""Get all settings"""
return cls._load_settings()