Newest Main page regreshing. Updated calculator. Removed unused stuff.
This commit is contained in:
@@ -79,6 +79,7 @@ def load_results():
|
||||
def save_results(results_data):
|
||||
return ResultsStorage.save_results(results_data)
|
||||
|
||||
|
||||
def archive_tournament(tournament_data, results_data):
|
||||
return ArchiveStorage.archive_tournament(tournament_data, results_data)
|
||||
|
||||
@@ -1010,7 +1011,6 @@ def tournament():
|
||||
players_data = load_players()
|
||||
tournament_state = load_tournament_state()
|
||||
league_state = load_league_state()
|
||||
|
||||
return render_template('tournament.html',
|
||||
players=players_data['players'],
|
||||
tournament_state=tournament_state,
|
||||
@@ -1500,6 +1500,25 @@ def reset_tournament():
|
||||
except Exception as e:
|
||||
return jsonify({'status': 'error', 'message': str(e)}), 400
|
||||
|
||||
|
||||
@app.route('/api/tournament/cancel', methods=['POST'])
|
||||
def cancel_league_tournament():
|
||||
"""Cancel the current tournament within a league, rolling back the tournament counter"""
|
||||
try:
|
||||
if os.path.exists(TOURNAMENT_FILE):
|
||||
os.remove(TOURNAMENT_FILE)
|
||||
if os.path.exists(RESULTS_FILE):
|
||||
os.remove(RESULTS_FILE)
|
||||
# Roll back league's current_tournament counter
|
||||
league_state = load_league_state()
|
||||
if league_state and league_state.get('current_tournament', 1) > 1:
|
||||
league_state['current_tournament'] -= 1
|
||||
save_league_state(league_state)
|
||||
return jsonify({'status': 'success'})
|
||||
except Exception as e:
|
||||
return jsonify({'status': 'error', 'message': str(e)}), 400
|
||||
|
||||
|
||||
# RESULTS API Routes (Updated)
|
||||
@app.route('/api/results/participant/<int:player_id>', methods=['POST'])
|
||||
def update_participant_scores(player_id):
|
||||
@@ -1736,6 +1755,10 @@ def api_dashboard_state():
|
||||
"""Get current dashboard state for polling updates (TV display sync)"""
|
||||
tournament_state = load_tournament_state()
|
||||
league_state = load_league_state()
|
||||
results = load_results()
|
||||
|
||||
tournament_finished = results.get('tournament_finished', False) if results else False
|
||||
league_finished = league_state.get('league_finished', False) if league_state else False
|
||||
|
||||
response_data = {
|
||||
'tournament_active': tournament_state is not None,
|
||||
@@ -1744,7 +1767,9 @@ def api_dashboard_state():
|
||||
'league_active': league_state is not None,
|
||||
'league_tournament': None,
|
||||
'league_total': None,
|
||||
'player_names': []
|
||||
'player_names': [],
|
||||
'tournament_finished': tournament_finished,
|
||||
'league_finished': league_finished,
|
||||
}
|
||||
|
||||
if tournament_state:
|
||||
@@ -1769,8 +1794,56 @@ def api_dashboard_state():
|
||||
response_data['league_tournament'] = league_state.get('current_tournament', 1)
|
||||
response_data['league_total'] = league_state.get('total_tournaments', 6)
|
||||
|
||||
settings = load_settings()
|
||||
response_data['tv_view'] = settings.get('tv_view', 'cameras')
|
||||
response_data['tv_url'] = settings.get('tv_url')
|
||||
|
||||
response_data['event_active'] = False
|
||||
response_data['event_player_names'] = []
|
||||
|
||||
# When no active tournament/results, expose latest archive filename so clients can redirect correctly
|
||||
response_data['archive_filename'] = None
|
||||
response_data['league_archive_filename'] = None
|
||||
if not tournament_state and not results:
|
||||
try:
|
||||
archive_files = sorted(
|
||||
glob.glob(os.path.join(ARCHIVE_DIR, 'tournament_*.json')),
|
||||
key=os.path.getmtime, reverse=True
|
||||
)
|
||||
if archive_files:
|
||||
response_data['archive_filename'] = os.path.basename(archive_files[0])
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
league_archive_files = sorted(
|
||||
glob.glob(os.path.join(LEAGUE_ARCHIVE_DIR, 'league_*.json')),
|
||||
key=os.path.getmtime, reverse=True
|
||||
)
|
||||
if league_archive_files:
|
||||
response_data['league_archive_filename'] = os.path.basename(league_archive_files[0])
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return jsonify(response_data)
|
||||
|
||||
@app.route('/api/tv/view', methods=['POST'])
|
||||
def set_tv_view():
|
||||
"""Set the desired TV display view (cameras or draft)"""
|
||||
data = request.get_json() or {}
|
||||
view = data.get('view', 'cameras')
|
||||
if view not in ('cameras', 'draft', 'results'):
|
||||
return jsonify({'status': 'error', 'message': 'Invalid view'}), 400
|
||||
settings = load_settings()
|
||||
settings['tv_view'] = view
|
||||
# Optional explicit URL for the TV to navigate to (e.g. a specific league archive)
|
||||
tv_url = data.get('tv_url')
|
||||
if tv_url:
|
||||
settings['tv_url'] = tv_url
|
||||
elif view == 'cameras':
|
||||
settings.pop('tv_url', None)
|
||||
save_settings(settings)
|
||||
return jsonify({'status': 'success', 'tv_view': view})
|
||||
|
||||
# Add this route to your Flask app (around line 850, with the other mobile routes)
|
||||
|
||||
@app.route('/mobile/remote')
|
||||
|
||||
Reference in New Issue
Block a user