1753d67752
Co-authored-by: David Rodenkirchen <drodenkirchen@linetco.com> Reviewed-on: #1
87 lines
3.7 KiB
Python
87 lines
3.7 KiB
Python
from rio import Component, Rectangle, Color, Column, Image, Text, Spacer, NoFileSelectedError
|
|
|
|
from elm.components import ElmButton
|
|
from elm.types import UserSession
|
|
from elm.services import ConfigurationService, UserService
|
|
|
|
|
|
class AvatarEditBox(Component):
|
|
avatar_info_text: str = ""
|
|
avatar_info_text_is_error: bool = False
|
|
|
|
async def upload_new_pfp(self) -> None:
|
|
try:
|
|
new_pfp = await self.session.pick_file(file_types=("png", "jpg", "jpeg"), multiple=False)
|
|
except NoFileSelectedError:
|
|
self.avatar_info_text = "Keine Datei ausgewählt!"
|
|
self.avatar_info_text_is_error = True
|
|
return
|
|
|
|
if new_pfp.size_in_bytes > 2 * 1_000_000:
|
|
self.avatar_info_text = "Bild zu groß! (> 2MB)"
|
|
self.avatar_info_text_is_error = True
|
|
return
|
|
|
|
image_data = await new_pfp.read_bytes()
|
|
user = await self.session[UserService].get_user(self.session[UserSession].user_name)
|
|
if user is not None:
|
|
user.user_picture = image_data
|
|
await user.save()
|
|
self.session[UserSession].profile_picture = image_data
|
|
self.avatar_info_text = "Erfolgreich aktualisiert"
|
|
self.avatar_info_text_is_error = False
|
|
else:
|
|
self.avatar_info_text = "Unbekannter Fehler"
|
|
self.avatar_info_text_is_error = True
|
|
|
|
async def delete_current_pfp(self) -> None:
|
|
user = await self.session[UserService].get_user(self.session[UserSession].user_name)
|
|
if user is not None:
|
|
user.user_picture = None
|
|
await user.save()
|
|
self.session[UserSession].profile_picture = None
|
|
self.avatar_info_text = "Erfolgreich gelöscht"
|
|
self.avatar_info_text_is_error = False
|
|
else:
|
|
self.avatar_info_text = "Unbekannter Fehler"
|
|
self.avatar_info_text_is_error = True
|
|
|
|
def build(self) -> Component:
|
|
return Rectangle(
|
|
content=Column(
|
|
Rectangle(
|
|
content=Rectangle(
|
|
content=Text("Avatar", margin=0.5, selectable=False, overflow="wrap"),
|
|
fill=self.session.theme.header_box_background_color,
|
|
margin=0.4
|
|
),
|
|
stroke_width=0.1,
|
|
stroke_color=self.session.theme.box_border_color,
|
|
),
|
|
Column(
|
|
Image(
|
|
image=self.session[UserSession].profile_picture if self.session[UserSession].profile_picture is not None else self.session[ConfigurationService].DEFAULT_PROFILE_PICTURE,
|
|
min_width=10,
|
|
min_height=10,
|
|
grow_x=False,
|
|
grow_y=False,
|
|
corner_radius=0.3
|
|
),
|
|
Text(
|
|
text=self.avatar_info_text,
|
|
overflow="wrap",
|
|
justify="center",
|
|
fill=self.session.theme.danger_color if self.avatar_info_text_is_error else self.session.theme.success_color
|
|
),
|
|
ElmButton(text="Bild hochladen", style="small" if self.session.is_mobile() else "normal", on_press=self.upload_new_pfp),
|
|
ElmButton(text="Bild löschen", style="small" if self.session.is_mobile() else "normal", on_press=self.delete_current_pfp),
|
|
Spacer(),
|
|
margin=1,
|
|
spacing=1
|
|
)
|
|
),
|
|
fill=self.session.theme.box_color,
|
|
stroke_width=0.1,
|
|
stroke_color=self.session.theme.box_border_color,
|
|
min_height=15
|
|
) |