126 lines
4.0 KiB
Python
126 lines
4.0 KiB
Python
from helpers import HButtonSelect, spawnDialog, spawnSimplePopup, errorTxt, isValidUsername
|
|
|
|
from prompt_toolkit.application.current import get_app
|
|
from prompt_toolkit.buffer import Buffer
|
|
from prompt_toolkit.layout.containers import HSplit
|
|
from prompt_toolkit.validation import Validator
|
|
from prompt_toolkit.widgets import Box, Button, Dialog, Label, TextArea, ValidationToolbar
|
|
|
|
|
|
class AccountSettings:
|
|
|
|
def __init__(self,name,guestLogin,server,floats):
|
|
self.name = name
|
|
self.server = server
|
|
self.floats = floats
|
|
acc = HButtonSelect([("Log out",self.logout),("Change username",self.changename),("Change password",self.changepass)])
|
|
if guestLogin:
|
|
acc = HSplit([
|
|
Box(HButtonSelect([("Log out",self.logout)]),padding=0),
|
|
Label("You are currently logged in as a guest."),
|
|
])
|
|
self.el = acc
|
|
|
|
def logout(self):
|
|
get_app().exit(result="login")
|
|
|
|
def changename(self):
|
|
usernameValidator = Validator.from_callable(isValidUsername, error_message='Invalid username')
|
|
|
|
def nameaccept(buf: Buffer):
|
|
# get_app().layout.focus(okbtn)
|
|
dlgclose(True)
|
|
return True
|
|
|
|
nntxtfield = TextArea(
|
|
text=self.name,
|
|
multiline=False,
|
|
password=False,
|
|
completer=None,
|
|
validator=usernameValidator,
|
|
accept_handler=nameaccept,
|
|
)
|
|
|
|
okbtn = Button("OK",handler=lambda: dlgclose(True))
|
|
cancelbtn = Button("Cancel",handler=lambda: dlgclose(False))
|
|
|
|
async def _changename():
|
|
res = await self.server.changename(nntxtfield.text)
|
|
if res["type"]=="error":
|
|
await spawnSimplePopup("Error",errorTxt(res),self.floats)
|
|
else:
|
|
get_app().exit(result="restart")
|
|
|
|
def dlgclose(res):
|
|
despawn()
|
|
if not res: return
|
|
get_app().create_background_task(_changename())
|
|
|
|
dlg = Dialog(
|
|
title="Change name",
|
|
body=HSplit([
|
|
Label(text="Insert your account's new name here:", dont_extend_height=True),
|
|
nntxtfield,
|
|
Label(text="Keep in mind that you can only change your name every 7 days.", dont_extend_height=True),
|
|
ValidationToolbar(),
|
|
]),
|
|
buttons=[okbtn, cancelbtn]
|
|
)
|
|
|
|
despawn = spawnDialog(dlg,self.floats)
|
|
|
|
def changepass(self):
|
|
def oldaccept(buf: Buffer):
|
|
get_app().layout.focus(newtxtfield)
|
|
return True
|
|
|
|
def newaccept(buf: Buffer):
|
|
# get_app().layout.focus(okbtn)
|
|
dlgclose(True)
|
|
return True
|
|
|
|
oldtxtfield = TextArea(
|
|
text="",
|
|
multiline=False,
|
|
password=True,
|
|
completer=None,
|
|
validator=None,
|
|
accept_handler=oldaccept,
|
|
)
|
|
|
|
newtxtfield = TextArea(
|
|
text="",
|
|
multiline=False,
|
|
password=True,
|
|
completer=None,
|
|
validator=None,
|
|
accept_handler=newaccept,
|
|
)
|
|
|
|
okbtn = Button("OK",handler=lambda: dlgclose(True))
|
|
cancelbtn = Button("Cancel",handler=lambda: dlgclose(False))
|
|
|
|
async def _changepass():
|
|
res = await self.server.changepass(oldtxtfield.text,newtxtfield.text)
|
|
if res["type"]=="error":
|
|
await spawnSimplePopup("Error",errorTxt(res),self.floats)
|
|
|
|
def dlgclose(res):
|
|
despawn()
|
|
if not res: return
|
|
get_app().create_background_task(_changepass())
|
|
|
|
dlg = Dialog(
|
|
title="Change password",
|
|
body=HSplit([
|
|
Label(text="Old password:", dont_extend_height=True),
|
|
oldtxtfield,
|
|
Label(text="New password:", dont_extend_height=True),
|
|
newtxtfield,
|
|
ValidationToolbar(),
|
|
]),
|
|
buttons=[okbtn, cancelbtn]
|
|
)
|
|
|
|
despawn = spawnDialog(dlg,self.floats)
|