initial commit
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
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
|
||||
)
|
||||
Reference in New Issue
Block a user