diff --git a/app/storage.py b/app/storage.py index f129250..6951f0f 100644 --- a/app/storage.py +++ b/app/storage.py @@ -8,14 +8,18 @@ import os import glob from datetime import datetime +# Base directory anchored to this file's location (project root), so paths work +# regardless of the current working directory when the app is launched. +_BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + # File paths - organized in data directory -SETTINGS_FILE = 'data/camera_settings.json' -PLAYERS_FILE = 'data/players.json' -TOURNAMENT_FILE = 'data/tournament_state.json' -RESULTS_FILE = 'data/tournament_results.json' -LEAGUE_FILE = 'data/league_state.json' -ARCHIVE_DIR = 'data/tournament_archives' -LEAGUE_ARCHIVE_DIR = 'data/league_archives' +SETTINGS_FILE = os.path.join(_BASE_DIR, 'data', 'camera_settings.json') +PLAYERS_FILE = os.path.join(_BASE_DIR, 'data', 'players.json') +TOURNAMENT_FILE = os.path.join(_BASE_DIR, 'data', 'tournament_state.json') +RESULTS_FILE = os.path.join(_BASE_DIR, 'data', 'tournament_results.json') +LEAGUE_FILE = os.path.join(_BASE_DIR, 'data', 'league_state.json') +ARCHIVE_DIR = os.path.join(_BASE_DIR, 'data', 'tournament_archives') +LEAGUE_ARCHIVE_DIR = os.path.join(_BASE_DIR, 'data', 'league_archives') # Default settings DEFAULT_SETTINGS = { @@ -40,7 +44,7 @@ class FileStorage: @staticmethod def _ensure_directory(directory): """Ensure directory exists""" - if not os.path.exists(directory): + if directory and not os.path.exists(directory): os.makedirs(directory) @staticmethod diff --git a/templates/draft.html b/templates/draft.html index aa75428..2f14c53 100644 --- a/templates/draft.html +++ b/templates/draft.html @@ -25,7 +25,7 @@ display: flex; flex-direction: column; padding: 0px; - gap: 15px; + gap: 0px; } .tournament-header { @@ -34,7 +34,7 @@ box-shadow: 0 2px 8px rgba(0,0,0,0.08); padding: 10px 16px; flex-shrink: 0; - margin: 10px 15px 5px 15px; + margin: 8px 15px 0px 15px; display: flex; align-items: center; gap: 12px; @@ -99,15 +99,15 @@ flex: 1; display: flex; flex-direction: column; - gap: 12px; + gap: 8px; min-height: 0; overflow-y: auto; overflow-x: hidden; - padding: 15px; + padding: 10px; background: white; border-radius: 12px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); - margin: 5px 15px 15px 15px; + margin: 8px 15px 8px 15px; } /* Custom scrollbar styling */ @@ -234,7 +234,7 @@ background: white; border: 2px solid #9ca3af; border-radius: 10px; - overflow: visible; + overflow: hidden; display: flex; flex-direction: row; transition: all 0.3s ease; diff --git a/templates/index.html b/templates/index.html index 2c684db..4fcda1f 100644 --- a/templates/index.html +++ b/templates/index.html @@ -772,7 +772,7 @@
- Version 1.0.1 + Version 1.0.2
diff --git a/templates/results_calculator.html b/templates/results_calculator.html index 5f9e029..44435cb 100644 --- a/templates/results_calculator.html +++ b/templates/results_calculator.html @@ -47,9 +47,9 @@ display: flex; flex-direction: row; align-items: stretch; - padding: 12px 16px; + padding: 8px; box-sizing: border-box; - gap: 12px; + gap: 8px; min-height: 0; } @@ -69,7 +69,7 @@ flex: 1; display: flex; flex-direction: column; - gap: 12px; + gap: 8px; min-height: 0; overflow: hidden; } diff --git a/templates/tournament.html b/templates/tournament.html index d53da17..ec564e6 100644 --- a/templates/tournament.html +++ b/templates/tournament.html @@ -28,8 +28,7 @@ overflow: hidden; display: flex; flex-direction: column; - padding-top: 16px !important; - padding-bottom: 16px !important; + padding: 8px !important; } /* Specific tournament styles */ diff --git a/tv_app.py b/tv_app.py index c80e228..17ba32d 100644 --- a/tv_app.py +++ b/tv_app.py @@ -20,7 +20,8 @@ from app.utils import ( from app.storage import ( SettingsStorage, PlayerStorage, TournamentStorage, ResultsStorage, LeagueStorage, ArchiveStorage, - TOURNAMENT_FILE, RESULTS_FILE, LEAGUE_FILE + TOURNAMENT_FILE, RESULTS_FILE, LEAGUE_FILE, + ARCHIVE_DIR, LEAGUE_ARCHIVE_DIR ) from app.models import Tournament, Scoring, RoundManager @@ -44,10 +45,6 @@ STREAMS = [ SUPPORTED_LANGUAGES = ['sl', 'en'] DEFAULT_LANGUAGE = 'sl' -# Data file paths (organized in data directory) -ARCHIVE_DIR = 'data/tournament_archives' -LEAGUE_ARCHIVE_DIR = 'data/league_archives' - # Convenience function wrappers that delegate to storage classes def load_settings(): return SettingsStorage.load_settings()