update rio and fix broken user sessions (#5)

Co-authored-by: David Rodenkirchen <davidr.develop@gmail.com>
Reviewed-on: Vereins-IT/ez-lan-manager#5
This commit was merged in pull request #5.
This commit is contained in:
2025-02-01 23:43:21 +00:00
parent f0f8a08f87
commit 6ff7adb165
18 changed files with 87 additions and 31 deletions
@@ -21,7 +21,7 @@ class AnimatedText(Component):
)
for c in text:
self.text_comp.text = self.text_comp.text + c
await self.text_comp.force_refresh()
self.text_comp.force_refresh()
await sleep(speed)
else:
self.text_comp.style = TextStyle(
@@ -30,7 +30,7 @@ class AnimatedText(Component):
)
for c in text:
self.text_comp.text = self.text_comp.text + c
await self.text_comp.force_refresh()
self.text_comp.force_refresh()
await sleep(speed)
self._display_printing[0] = False
@@ -1,21 +1,38 @@
from copy import copy, deepcopy
from typing import Optional
from typing import Optional, Callable
from rio import *
from src.ez_lan_manager import ConfigurationService, UserService
from src.ez_lan_manager import ConfigurationService, UserService, LocalDataService
from src.ez_lan_manager.components.DesktopNavigationButton import DesktopNavigationButton
from src.ez_lan_manager.components.UserInfoAndLoginBox import UserInfoAndLoginBox
from src.ez_lan_manager.services.LocalDataService import LocalData
from src.ez_lan_manager.types.SessionStorage import SessionStorage
from src.ez_lan_manager.types.User import User
class DesktopNavigation(Component):
user: Optional[User] = None
force_login_box_refresh: list[Callable] = []
@event.on_populate
async def async_init(self) -> None:
self.session[SessionStorage].subscribe_to_logged_in_or_out_event(str(self.__class__), self.async_init)
local_data = self.session[LocalData]
if local_data.stored_session_token:
session_ = self.session[LocalDataService].verify_token(local_data.stored_session_token)
if session_:
self.session.detach(SessionStorage)
self.session.attach(session_)
self.user = await self.session[UserService].get_user(session_.user_id)
try:
# Hack-around, maybe fix in the future
self.force_login_box_refresh[-1]()
except IndexError:
pass
return
if self.session[SessionStorage].user_id:
self.user = await self.session[UserService].get_user(self.session[SessionStorage].user_id)
else:
@@ -23,6 +40,8 @@ class DesktopNavigation(Component):
def build(self) -> Component:
lan_info = self.session[ConfigurationService].get_lan_info()
user_info_and_login_box = UserInfoAndLoginBox()
self.force_login_box_refresh.append(user_info_and_login_box.force_refresh)
user_navigation = [
DesktopNavigationButton("News", "./news"),
Spacer(min_height=1),
@@ -62,7 +81,7 @@ class DesktopNavigation(Component):
Column(
Text(lan_info.name, align_x=0.5, margin_top=0.3, style=TextStyle(fill=self.session.theme.hud_color, font_size=2.5)),
Text(f"Edition {lan_info.iteration}", align_x=0.5, style=TextStyle(fill=self.session.theme.hud_color, font_size=1.2), margin_top=0.3, margin_bottom=2),
UserInfoAndLoginBox(),
user_info_and_login_box,
*nav_to_use,
align_y=0
),
+6 -2
View File
@@ -1,6 +1,7 @@
from rio import Component, TextStyle, Color, TextInput, Button, Text, Rectangle, Column, Row, Spacer, \
EventHandler
from src.ez_lan_manager.services.LocalDataService import LocalDataService, LocalData
from src.ez_lan_manager.services.UserService import UserService
from src.ez_lan_manager.types.SessionStorage import SessionStorage
from src.ez_lan_manager.types.User import User
@@ -27,13 +28,16 @@ class LoginBox(Component):
self.login_button_is_loading = False
self.is_account_locked = False
await self.session[SessionStorage].set_user_id_and_team_member_flag(user.user_id, user.is_team_member)
await self.status_change_cb()
token = self.session[LocalDataService].set_session(self.session[SessionStorage])
self.session[LocalData].stored_session_token = token
self.session.attach(self.session[LocalData])
self.status_change_cb()
else:
self.user_name_input_is_valid = False
self.password_input_is_valid = False
self.login_button_is_loading = False
self.is_account_locked = False
await self.force_refresh()
self.force_refresh()
def build(self) -> Component:
user_name_input = TextInput(
@@ -33,11 +33,11 @@ class ShoppingCartAndOrders(Component):
except IndexError:
return
catering_service.save_cart(user_id, cart)
await self.force_refresh()
self.force_refresh()
async def on_empty_cart_pressed(self) -> None:
self.session[CateringService].save_cart(self.session[SessionStorage].user_id, [])
await self.force_refresh()
self.force_refresh()
async def on_add_item(self, article_id: int) -> None:
catering_service = self.session[CateringService]
@@ -48,20 +48,20 @@ class ShoppingCartAndOrders(Component):
item_to_add = await catering_service.get_menu_item_by_id(article_id)
cart.append(item_to_add)
catering_service.save_cart(user_id, cart)
await self.force_refresh()
self.force_refresh()
async def show_popup(self, text: str, is_error: bool) -> None:
self.popup_is_error = is_error
self.popup_message = text
self.popup_is_shown = True
await self.force_refresh()
self.force_refresh()
await sleep(POPUP_CLOSE_TIMEOUT_SECONDS)
self.popup_is_shown = False
await self.force_refresh()
self.force_refresh()
async def on_order_pressed(self) -> None:
self.order_button_loading = True
await self.force_refresh()
self.force_refresh()
user_id = self.session[SessionStorage].user_id
cart = self.session[CateringService].get_cart(user_id)
+5 -1
View File
@@ -4,6 +4,7 @@ from typing import Optional
from rio import Component, TextStyle, Color, Button, Text, Rectangle, Column, Row, Spacer, Link, event, EventHandler
from src.ez_lan_manager.components.UserInfoBoxButton import UserInfoBoxButton
from src.ez_lan_manager.services.LocalDataService import LocalData, LocalDataService
from src.ez_lan_manager.services.UserService import UserService
from src.ez_lan_manager.services.AccountingService import AccountingService
from src.ez_lan_manager.services.TicketingService import TicketingService
@@ -52,7 +53,10 @@ class UserInfoBox(Component):
async def logout(self) -> None:
await self.session[SessionStorage].clear()
self.user = None
await self.status_change_cb()
self.session[LocalDataService].del_session(self.session[LocalData].stored_session_token)
self.session[LocalData].stored_session_token = None
self.session.attach(self.session[LocalData])
self.status_change_cb()
self.session.navigate_to("/")
@event.on_populate