add mai2 rival management features to frontend and templates

This commit is contained in:
2025-07-27 03:06:30 +08:00
parent 2a12f84dd9
commit 1833e8abde
2 changed files with 160 additions and 1 deletions

View File

@ -46,6 +46,9 @@ class Mai2Frontend(FE_Base):
Route("/update.name", self.update_name, methods=['POST']),
Route("/version.change", self.version_change, methods=['POST']),
Route("/photo/{photo_id}", self.get_photo, methods=['GET']),
Route("/rival.add", self.rival_POST, methods=['POST']),
Route("/rival.delete", self.rival_POST, methods=['POST']),
Route("/rival.show", self.rival_POST, methods=['POST']),
]
async def render_GET(self, request: Request) -> bytes:
@ -61,11 +64,22 @@ class Mai2Frontend(FE_Base):
if usr_sesh.user_id > 0:
versions = await self.data.profile.get_all_profile_versions(usr_sesh.user_id)
profile = []
new_rival_list = []
if versions:
# maimai_version is -1 means it is not initialized yet, select a default version from existing.
if incoming_ver < 0:
usr_sesh.maimai_version = versions[0]['version']
profile = await self.data.profile.get_profile_detail(usr_sesh.user_id, usr_sesh.maimai_version)
rival_list = await self.data.profile.get_rivals(usr_sesh.user_id)
for rival in rival_list:
rivalid = rival["rival"]
rivalShow = rival["show"]
rivalprofile = await self.data.profile.get_profile_detail(rivalid, usr_sesh.maimai_version)
rivalName = rivalprofile["userName"] if rivalprofile else "UnknownName"
rivalRating = rivalprofile["playerRating"] if rivalprofile else 0
new_rival = (rivalName, rivalRating, rivalid, rivalShow)
new_rival_list.append(new_rival)
versions = [x['version'] for x in versions]
resp = Response(template.render(
@ -76,7 +90,8 @@ class Mai2Frontend(FE_Base):
profile=profile,
version_list=Mai2Constants.VERSION_STRING,
versions=versions,
cur_version=usr_sesh.maimai_version
cur_version=usr_sesh.maimai_version,
rival_list=new_rival_list
), media_type="text/html; charset=utf-8")
if incoming_ver < 0:
@ -420,3 +435,28 @@ class Mai2Frontend(FE_Base):
return FileResponse(f"{out_folder}.jpeg")
return Response(status_code=404)
async def rival_POST(self, request: Request):
uri = request.url.path
frm = await request.form()
usr_sesh = self.validate_session(request)
if not usr_sesh:
usr_sesh = UserSession()
if usr_sesh.user_id > 0:
if uri == "/game/mai2/rival.add":
rival_id = frm.get("rivalUserId")
await self.data.profile.add_rival(usr_sesh.user_id, rival_id)
# self.logger.info(f"{usr_sesh.user_id} added a rival")
return RedirectResponse("/game/mai2/", 303)
elif uri == "/game/mai2/rival.delete":
rival_id = frm.get("rivalUserId")
await self.data.profile.remove_rival(usr_sesh.user_id, rival_id)
# self.logger.info(f"{response}")
return RedirectResponse("/game/mai2/", 303)
elif uri == "/game/mai2/rival.show":
rival_id = frm.get("rivalUserId")
show = frm.get("showRival", "false") == "true"
await self.data.profile.set_rival_shown(usr_sesh.user_id, rival_id, show)
return RedirectResponse("/game/mai2/", 303)