sync mvp-dev to main #2

Merged
Typhus merged 85 commits from mvp-dev into main 2025-01-23 19:25:01 +00:00
4 changed files with 125 additions and 5 deletions
Showing only changes of commit ec2b5f0b0d - Show all commits

View File

@ -1,12 +1,14 @@
import logging import logging
import sys
from pathlib import Path from pathlib import Path
from rio import App, Theme, Color, Font, Page, Session from rio import App, Theme, Color, Font, Page, Session
from from_root import from_root from from_root import from_root
from src.ez_lan_manager import pages, init_services from src.ez_lan_manager import pages, init_services, ConfigurationService
from src.ez_lan_manager.helpers.LoggedInGuard import logged_in_guard, not_logged_in_guard from src.ez_lan_manager.helpers.LoggedInGuard import logged_in_guard, not_logged_in_guard
from src.ez_lan_manager.services.DatabaseService import NoDatabaseConnectionError
from src.ez_lan_manager.types.SessionStorage import SessionStorage from src.ez_lan_manager.types.SessionStorage import SessionStorage
logger = logging.getLogger(__name__.split(".")[-1]) logger = logging.getLogger(__name__.split(".")[-1])
@ -26,7 +28,43 @@ if __name__ == "__main__":
font=Font(from_root("src/ez_lan_manager/assets/fonts/joystix.otf")) font=Font(from_root("src/ez_lan_manager/assets/fonts/joystix.otf"))
) )
services = init_services() try:
services = init_services()
except NoDatabaseConnectionError:
configuration_service = ConfigurationService(from_root("config.toml"))
lan_info = configuration_service.get_lan_info()
app = App(
name="EZ LAN Manager",
pages=[
Page(
name="DbErrorPage",
page_url="",
build=pages.DbErrorPage,
)
],
theme=theme,
default_attachments=[configuration_service],
assets_dir=Path(__file__).parent / "assets",
icon=from_root("src/ez_lan_manager/assets/img/favicon.png"),
meta_tags={
"robots": "INDEX,FOLLOW",
"description": f"Info und Verwaltungs-Seite der LAN Party '{lan_info.name} - {lan_info.iteration}'.",
"og:description": f"Info und Verwaltungs-Seite der LAN Party '{lan_info.name} - {lan_info.iteration}'.",
"keywords": "Gaming, Clan, Guild, Verein, Club, Einfach, Zocken, Genuss, Gesellschaft, Videospiele, "
"Videogames, LAN, Party, EZ, LAN, Manager",
"author": "David Rodenkirchen",
"publisher": "EZ GG e.V.",
"copyright": "EZ GG e.V.",
"audience": "Alle",
"page-type": "Management Application",
"page-topic": "LAN Party",
"expires": "",
"revisit-after": "2 days"
}
)
sys.exit(app.run_as_web_server())
lan_info = services[2].get_lan_info() lan_info = services[2].get_lan_info()
async def on_session_start(session: Session) -> None: async def on_session_start(session: Session) -> None:
@ -143,4 +181,4 @@ if __name__ == "__main__":
} }
) )
app.run_as_web_server() sys.exit(app.run_as_web_server())

View File

@ -0,0 +1,78 @@
from __future__ import annotations
from typing import * # type: ignore
from rio import Component, event, Spacer, Card, Container, Column, Row, TextStyle, Color, Text
from src.ez_lan_manager import ConfigurationService
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
class DbErrorPage(Component):
@event.on_window_size_change
async def on_window_size_change(self):
await self.force_refresh()
def build(self) -> Component:
content = Card(
content=MainViewContentBox(
content=Text(
text="Ouh-oh, da läuft gerade irgendwas schief mit unserer Datenbank.\n\nUnser Team kümmert sich bereits um das Problem.",
margin=2,
style=TextStyle(
fill=self.session.theme.danger_color,
font_size=1.3
),
wrap=True
)
),
color="secondary",
min_width=38,
corner_radius=(0, 0.5, 0, 0)
)
if self.session.window_width > 28:
return Container(
content=Column(
Column(
Row(
Spacer(grow_x=True, grow_y=True),
Card(
content=Spacer(),
color=self.session.theme.neutral_color,
min_width=15,
grow_y=True,
corner_radius=(0.5, 0, 0, 0),
margin_right=0.1
),
content,
Spacer(grow_x=True, grow_y=True),
grow_y=True
),
Row(
Spacer(grow_x=True, grow_y=False),
Card(
content=Text(f"EZ LAN Manager Version {self.session[ConfigurationService].APP_VERSION} © EZ GG e.V.", align_x=0.5, align_y=0.5, style=TextStyle(fill=self.session.theme.primary_color, font_size=0.5)),
color=self.session.theme.neutral_color,
corner_radius=(0, 0, 0.5, 0.5),
grow_x=False,
grow_y=False,
min_height=1.2,
min_width=53.1,
margin_bottom=3
),
Spacer(grow_x=True, grow_y=False),
grow_y=False
),
margin_top=4
)
),
grow_x=True,
grow_y=True
)
else:
return Text(
"Der EZ LAN Manager wird\nauf mobilen Endgeräten nur\nim Querformat unterstützt.\nBitte drehe dein Gerät.",
align_x=0.5,
align_y=0.5,
style=TextStyle(fill=Color.from_hex("FFFFFF"), font_size=0.8)
)

View File

@ -12,3 +12,4 @@ from .FaqPage import FaqPage
from .TournamentsPage import TournamentsPage from .TournamentsPage import TournamentsPage
from .GuestsPage import GuestsPage from .GuestsPage import GuestsPage
from .CateringPage import CateringPage from .CateringPage import CateringPage
from .DbErrorPage import DbErrorPage

View File

@ -21,6 +21,9 @@ logger = logging.getLogger(__name__.split(".")[-1])
class DuplicationError(Exception): class DuplicationError(Exception):
pass pass
class NoDatabaseConnectionError(Exception):
pass
class DatabaseService: class DatabaseService:
def __init__(self, database_config: DatabaseConfiguration) -> None: def __init__(self, database_config: DatabaseConfiguration) -> None:
self._database_config = database_config self._database_config = database_config
@ -37,8 +40,8 @@ class DatabaseService:
database=self._database_config.db_name database=self._database_config.db_name
) )
except mariadb.Error as e: except mariadb.Error as e:
logger.fatal(f"Error connecting to database: {e}") logger.error(f"Error connecting to database: {e}")
sys.exit(1) raise NoDatabaseConnectionError
def _get_cursor(self) -> Cursor: def _get_cursor(self) -> Cursor:
return self._connection.cursor() return self._connection.cursor()