From d238153a223277c192f16fca5c1c2d81beb1acff Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Wed, 11 Feb 2026 23:23:49 +0100 Subject: [PATCH] Fix tournament register button not updating state correctly --- .../pages/TournamentDetailsPage.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ezgg_lan_manager/pages/TournamentDetailsPage.py b/src/ezgg_lan_manager/pages/TournamentDetailsPage.py index 8e3f3e6..e481904 100644 --- a/src/ezgg_lan_manager/pages/TournamentDetailsPage.py +++ b/src/ezgg_lan_manager/pages/TournamentDetailsPage.py @@ -1,3 +1,4 @@ +from asyncio import sleep from typing import Optional, Union, Literal from from_root import from_root @@ -8,7 +9,6 @@ from src.ezgg_lan_manager import ConfigurationService, TournamentService, UserSe from src.ezgg_lan_manager.components.MainViewContentBox import MainViewContentBox from src.ezgg_lan_manager.components.TournamentDetailsInfoRow import TournamentDetailsInfoRow from src.ezgg_lan_manager.types.DateUtil import weekday_to_display_text -from src.ezgg_lan_manager.types.Participant import Participant from src.ezgg_lan_manager.types.SessionStorage import SessionStorage from src.ezgg_lan_manager.types.Tournament import Tournament from src.ezgg_lan_manager.types.TournamentBase import TournamentStatus, tournament_status_to_display_text, tournament_format_to_display_texts @@ -45,6 +45,14 @@ class TournamentDetailsPage(Component): self.loading_done() + @staticmethod + async def artificial_delay() -> None: + await sleep(0.8) # https://medium.com/design-bootcamp/ux-psychology-of-artificial-waiting-enhancing-user-experiences-through-deliberate-delays-d7822faf3930 + + async def update(self) -> None: + self.tournament = await self.session[TournamentService].get_tournament_by_id(self.tournament.id) + self.current_tournament_user_list = await self.session[TournamentService].get_users_from_participant_list(self.tournament.participants) + def open_close_participant_revealer(self, _: PointerEvent) -> None: self.participant_revealer_open = not self.participant_revealer_open @@ -60,13 +68,14 @@ class TournamentDetailsPage(Component): else: try: await self.session[TournamentService].register_user_for_tournament(self.user.user_id, self.tournament.id) + await self.artificial_delay() self.is_success = True self.message = f"Erfolgreich angemeldet!" except Exception as e: self.is_success = False self.message = f"Fehler: {e}" + await self.update() self.loading = False - await self.on_populate() async def unregister_pressed(self) -> None: self.loading = True @@ -75,13 +84,14 @@ class TournamentDetailsPage(Component): try: await self.session[TournamentService].unregister_user_from_tournament(self.user.user_id, self.tournament.id) + await self.artificial_delay() self.is_success = True self.message = f"Erfolgreich abgemeldet!" except Exception as e: self.is_success = False self.message = f"Fehler: {e}" + await self.update() self.loading = False - await self.on_populate() async def tree_button_clicked(self) -> None: pass # ToDo: Implement tournament tree view @@ -203,7 +213,7 @@ class TournamentDetailsPage(Component): content=Rectangle( content=TournamentDetailsInfoRow( "Teilnehmer ▴" if self.participant_revealer_open else "Teilnehmer ▾", - f"{len(self.tournament.participants)} / {self.tournament.max_participants}", + f"{len(self.current_tournament_user_list)} / {self.tournament.max_participants}", value_color=self.session.theme.danger_color if self.tournament.is_full else self.session.theme.background_color, key_color=self.session.theme.secondary_color ),