fix: mai2 photos cant be merged
This commit is contained in:
parent
8a6250bebd
commit
f4dff9b4c1
@ -55,7 +55,7 @@ class Mai2Frontend(FE_Base):
|
|||||||
usr_sesh = self.validate_session(request)
|
usr_sesh = self.validate_session(request)
|
||||||
if not usr_sesh:
|
if not usr_sesh:
|
||||||
usr_sesh = UserSession()
|
usr_sesh = UserSession()
|
||||||
|
|
||||||
incoming_ver = usr_sesh.maimai_version
|
incoming_ver = usr_sesh.maimai_version
|
||||||
|
|
||||||
if usr_sesh.user_id > 0:
|
if usr_sesh.user_id > 0:
|
||||||
@ -103,10 +103,10 @@ class Mai2Frontend(FE_Base):
|
|||||||
if not path_index or int(path_index) < 1:
|
if not path_index or int(path_index) < 1:
|
||||||
index = 0
|
index = 0
|
||||||
else:
|
else:
|
||||||
index = int(path_index) - 1 # 0 and 1 are 1st page
|
index = int(path_index) - 1 # 0 and 1 are 1st page
|
||||||
user_id = usr_sesh.user_id
|
user_id = usr_sesh.user_id
|
||||||
playlog_count = await self.data.score.get_user_playlogs_count(user_id)
|
playlog_count = await self.data.score.get_user_playlogs_count(user_id)
|
||||||
if playlog_count < index * 20 :
|
if playlog_count < index * 20:
|
||||||
return Response(template.render(
|
return Response(template.render(
|
||||||
title=f"{self.core_config.server.name} | {self.nav_name}",
|
title=f"{self.core_config.server.name} | {self.nav_name}",
|
||||||
game_list=self.environment.globals["game_list"],
|
game_list=self.environment.globals["game_list"],
|
||||||
@ -116,17 +116,17 @@ class Mai2Frontend(FE_Base):
|
|||||||
playlog = await self.data.score.get_playlogs(user_id, index, 20)
|
playlog = await self.data.score.get_playlogs(user_id, index, 20)
|
||||||
playlog_with_title = []
|
playlog_with_title = []
|
||||||
for record in playlog:
|
for record in playlog:
|
||||||
music_chart = await self.data.static.get_music_chart(usr_sesh.maimai_version, record.musicId, record.level)
|
music_chart = await self.data.static.get_music_chart(usr_sesh.maimai_version, record.musicId, record.level)
|
||||||
if music_chart:
|
if music_chart:
|
||||||
difficultyNum=music_chart.chartId
|
difficultyNum = music_chart.chartId
|
||||||
difficulty=music_chart.difficulty
|
difficulty = music_chart.difficulty
|
||||||
artist=music_chart.artist
|
artist = music_chart.artist
|
||||||
title=music_chart.title
|
title = music_chart.title
|
||||||
else:
|
else:
|
||||||
difficultyNum=0
|
difficultyNum = 0
|
||||||
difficulty=0
|
difficulty = 0
|
||||||
artist="unknown"
|
artist = "unknown"
|
||||||
title="musicid: " + str(record.musicId)
|
title = "musicid: " + str(record.musicId)
|
||||||
playlog_with_title.append({
|
playlog_with_title.append({
|
||||||
"raw": record,
|
"raw": record,
|
||||||
"title": title,
|
"title": title,
|
||||||
@ -156,29 +156,29 @@ class Mai2Frontend(FE_Base):
|
|||||||
if usr_sesh.user_id > 0:
|
if usr_sesh.user_id > 0:
|
||||||
if usr_sesh.maimai_version < 0:
|
if usr_sesh.maimai_version < 0:
|
||||||
return RedirectResponse("/game/mai2/", 303)
|
return RedirectResponse("/game/mai2/", 303)
|
||||||
|
|
||||||
photos = await self.data.profile.get_user_photos_by_user(usr_sesh.user_id)
|
photos = await self.data.profile.get_user_photos_by_user(usr_sesh.user_id)
|
||||||
|
|
||||||
photos_fixed = []
|
photos_fixed = []
|
||||||
for photo in photos:
|
for photo in photos:
|
||||||
if datetime.now().timestamp() > (photo['when_upload'] + timedelta(days=7)).timestamp():
|
if datetime.now().timestamp() > (photo['when_upload'] + timedelta(days=7)).timestamp():
|
||||||
await self.data.profile.delete_user_photo_by_id(photo['id'])
|
await self.data.profile.delete_user_photo_by_id(photo['id'])
|
||||||
|
|
||||||
if path.exists(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}.jpeg"):
|
if path.exists(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}.jpeg"):
|
||||||
remove(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}.jpeg")
|
remove(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}.jpeg")
|
||||||
|
|
||||||
if path.exists(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}"):
|
if path.exists(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}"):
|
||||||
shutil.rmtree(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}")
|
shutil.rmtree(f"{self.game_cfg.uploads.photos_dir}/{photo['id']}")
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
photos_fixed.append({
|
photos_fixed.append({
|
||||||
"id": photo['id'],
|
"id": photo['id'],
|
||||||
"playlog_num": photo['playlog_num'],
|
"playlog_num": photo['playlog_num'],
|
||||||
"track_num": photo['track_num'],
|
"track_num": photo['track_num'],
|
||||||
"when_upload": photo['when_upload'],
|
"when_upload": photo['when_upload'],
|
||||||
})
|
})
|
||||||
|
|
||||||
return Response(template.render(
|
return Response(template.render(
|
||||||
title=f"{self.core_config.server.name} | {self.nav_name}",
|
title=f"{self.core_config.server.name} | {self.nav_name}",
|
||||||
game_list=self.environment.globals["game_list"],
|
game_list=self.environment.globals["game_list"],
|
||||||
@ -195,7 +195,7 @@ class Mai2Frontend(FE_Base):
|
|||||||
return RedirectResponse("/gate/", 303)
|
return RedirectResponse("/gate/", 303)
|
||||||
|
|
||||||
form_data = await request.form()
|
form_data = await request.form()
|
||||||
new_name: str = form_data.get("new_name")
|
new_name: str = form_data.get("new_name")
|
||||||
new_name_full = ""
|
new_name_full = ""
|
||||||
|
|
||||||
if not new_name:
|
if not new_name:
|
||||||
@ -204,7 +204,7 @@ class Mai2Frontend(FE_Base):
|
|||||||
if len(new_name) > 8:
|
if len(new_name) > 8:
|
||||||
return RedirectResponse("/gate/?e=8", 303)
|
return RedirectResponse("/gate/?e=8", 303)
|
||||||
|
|
||||||
for x in new_name: # FIXME: This will let some invalid characters through atm
|
for x in new_name: # FIXME: This will let some invalid characters through atm
|
||||||
o = ord(x)
|
o = ord(x)
|
||||||
try:
|
try:
|
||||||
if o == 0x20:
|
if o == 0x20:
|
||||||
@ -235,13 +235,13 @@ class Mai2Frontend(FE_Base):
|
|||||||
resp = RedirectResponse("/game/mai2/events/", 303)
|
resp = RedirectResponse("/game/mai2/events/", 303)
|
||||||
else:
|
else:
|
||||||
resp = RedirectResponse("/game/mai2/", 303)
|
resp = RedirectResponse("/game/mai2/", 303)
|
||||||
|
|
||||||
if usr_sesh.user_id > 0:
|
if usr_sesh.user_id > 0:
|
||||||
form_data = await request.form()
|
form_data = await request.form()
|
||||||
maimai_version = form_data.get("version")
|
maimai_version = form_data.get("version")
|
||||||
self.logger.info(f"version change to: {maimai_version}")
|
self.logger.info(f"version change to: {maimai_version}")
|
||||||
if(maimai_version.isdigit()):
|
if (maimai_version.isdigit()):
|
||||||
usr_sesh.maimai_version=int(maimai_version)
|
usr_sesh.maimai_version = int(maimai_version)
|
||||||
encoded_sesh = self.encode_session(usr_sesh)
|
encoded_sesh = self.encode_session(usr_sesh)
|
||||||
self.logger.debug(f"Created session with JWT {encoded_sesh}")
|
self.logger.debug(f"Created session with JWT {encoded_sesh}")
|
||||||
resp.set_cookie("ARTEMIS_SESH", encoded_sesh)
|
resp.set_cookie("ARTEMIS_SESH", encoded_sesh)
|
||||||
@ -253,20 +253,20 @@ class Mai2Frontend(FE_Base):
|
|||||||
usr_sesh = self.validate_session(request)
|
usr_sesh = self.validate_session(request)
|
||||||
if not usr_sesh:
|
if not usr_sesh:
|
||||||
return RedirectResponse("/gate/", 303)
|
return RedirectResponse("/gate/", 303)
|
||||||
|
|
||||||
if not self.test_perm(usr_sesh.permissions, PermissionOffset.SYSADMIN):
|
if not self.test_perm(usr_sesh.permissions, PermissionOffset.SYSADMIN):
|
||||||
return RedirectResponse("/game/mai2/", 303)
|
return RedirectResponse("/game/mai2/", 303)
|
||||||
|
|
||||||
template = self.environment.get_template(
|
template = self.environment.get_template(
|
||||||
"titles/mai2/templates/events/mai2_events.jinja"
|
"titles/mai2/templates/events/mai2_events.jinja"
|
||||||
)
|
)
|
||||||
|
|
||||||
incoming_ver = usr_sesh.maimai_version
|
incoming_ver = usr_sesh.maimai_version
|
||||||
evts = []
|
evts = []
|
||||||
|
|
||||||
if incoming_ver < 0:
|
if incoming_ver < 0:
|
||||||
usr_sesh.maimai_version = Mai2Constants.VER_MAIMAI_DX
|
usr_sesh.maimai_version = Mai2Constants.VER_MAIMAI_DX
|
||||||
|
|
||||||
event_list = await self.data.static.get_game_events(usr_sesh.maimai_version)
|
event_list = await self.data.static.get_game_events(usr_sesh.maimai_version)
|
||||||
self.logger.info(f"Get events for v{usr_sesh.maimai_version}")
|
self.logger.info(f"Get events for v{usr_sesh.maimai_version}")
|
||||||
|
|
||||||
@ -280,88 +280,88 @@ class Mai2Frontend(FE_Base):
|
|||||||
"startDate": event['startDate'].strftime("%x %X"),
|
"startDate": event['startDate'].strftime("%x %X"),
|
||||||
"enabled": "true" if event['enabled'] else "false",
|
"enabled": "true" if event['enabled'] else "false",
|
||||||
})
|
})
|
||||||
|
|
||||||
resp = Response(template.render(
|
resp = Response(template.render(
|
||||||
title=f"{self.core_config.server.name} | {self.nav_name} Events",
|
title=f"{self.core_config.server.name} | {self.nav_name} Events",
|
||||||
game_list=self.environment.globals["game_list"],
|
game_list=self.environment.globals["game_list"],
|
||||||
sesh=vars(usr_sesh),
|
sesh=vars(usr_sesh),
|
||||||
version_list=Mai2Constants.VERSION_STRING,
|
version_list=Mai2Constants.VERSION_STRING,
|
||||||
events=evts
|
events=evts
|
||||||
), media_type="text/html; charset=utf-8")
|
), media_type="text/html; charset=utf-8")
|
||||||
|
|
||||||
if incoming_ver < 0:
|
if incoming_ver < 0:
|
||||||
encoded_sesh = self.encode_session(usr_sesh)
|
encoded_sesh = self.encode_session(usr_sesh)
|
||||||
resp.delete_cookie("ARTEMIS_SESH")
|
resp.delete_cookie("ARTEMIS_SESH")
|
||||||
resp.set_cookie("ARTEMIS_SESH", encoded_sesh)
|
resp.set_cookie("ARTEMIS_SESH", encoded_sesh)
|
||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
async def render_event_edit(self, request: Request) -> Response:
|
async def render_event_edit(self, request: Request) -> Response:
|
||||||
usr_sesh = self.validate_session(request)
|
usr_sesh = self.validate_session(request)
|
||||||
if not usr_sesh:
|
if not usr_sesh:
|
||||||
return RedirectResponse("/gate/", 303)
|
return RedirectResponse("/gate/", 303)
|
||||||
|
|
||||||
if not self.test_perm(usr_sesh.permissions, PermissionOffset.SYSADMIN):
|
if not self.test_perm(usr_sesh.permissions, PermissionOffset.SYSADMIN):
|
||||||
return RedirectResponse("/game/mai2/", 303)
|
return RedirectResponse("/game/mai2/", 303)
|
||||||
|
|
||||||
template = self.environment.get_template(
|
template = self.environment.get_template(
|
||||||
"titles/mai2/templates/events/mai2_event_edit.jinja"
|
"titles/mai2/templates/events/mai2_event_edit.jinja"
|
||||||
)
|
)
|
||||||
|
|
||||||
evt_id = request.path_params.get("event_id")
|
evt_id = request.path_params.get("event_id")
|
||||||
|
|
||||||
event_id = await self.data.static.get_event_by_id(evt_id)
|
event_id = await self.data.static.get_event_by_id(evt_id)
|
||||||
if not event_id:
|
if not event_id:
|
||||||
return RedirectResponse("/game/mai2/events/", 303)
|
return RedirectResponse("/game/mai2/events/", 303)
|
||||||
|
|
||||||
return Response(template.render(
|
return Response(template.render(
|
||||||
title=f"{self.core_config.server.name} | {self.nav_name} Edit Event {evt_id}",
|
title=f"{self.core_config.server.name} | {self.nav_name} Edit Event {evt_id}",
|
||||||
game_list=self.environment.globals["game_list"],
|
game_list=self.environment.globals["game_list"],
|
||||||
sesh=vars(usr_sesh),
|
sesh=vars(usr_sesh),
|
||||||
user_id=usr_sesh.user_id,
|
user_id=usr_sesh.user_id,
|
||||||
version_list=Mai2Constants.VERSION_STRING,
|
version_list=Mai2Constants.VERSION_STRING,
|
||||||
cur_version=usr_sesh.maimai_version,
|
cur_version=usr_sesh.maimai_version,
|
||||||
event=event_id._asdict()
|
event=event_id._asdict()
|
||||||
), media_type="text/html; charset=utf-8")
|
), media_type="text/html; charset=utf-8")
|
||||||
|
|
||||||
async def update_event(self, request: Request) -> RedirectResponse:
|
async def update_event(self, request: Request) -> RedirectResponse:
|
||||||
usr_sesh = self.validate_session(request)
|
usr_sesh = self.validate_session(request)
|
||||||
if not usr_sesh:
|
if not usr_sesh:
|
||||||
return RedirectResponse("/gate/", 303)
|
return RedirectResponse("/gate/", 303)
|
||||||
|
|
||||||
if not self.test_perm(usr_sesh.permissions, PermissionOffset.SYSADMIN):
|
if not self.test_perm(usr_sesh.permissions, PermissionOffset.SYSADMIN):
|
||||||
return RedirectResponse("/game/mai2/", 303)
|
return RedirectResponse("/game/mai2/", 303)
|
||||||
|
|
||||||
form_data = await request.form()
|
form_data = await request.form()
|
||||||
print(form_data)
|
print(form_data)
|
||||||
event_id: int = form_data.get("evtId", None)
|
event_id: int = form_data.get("evtId", None)
|
||||||
new_enabled: bool = bool(form_data.get("evtEnabled", False))
|
new_enabled: bool = bool(form_data.get("evtEnabled", False))
|
||||||
try:
|
try:
|
||||||
new_start_date: datetime = datetime.strptime(form_data.get("evtStart", None), "%Y-%m-%dT%H:%M:%S")
|
new_start_date: datetime = datetime.strptime(form_data.get("evtStart", None), "%Y-%m-%dT%H:%M:%S")
|
||||||
except:
|
except:
|
||||||
new_start_date = None
|
new_start_date = None
|
||||||
|
|
||||||
print(f"{event_id} {new_enabled} {new_start_date}")
|
print(f"{event_id} {new_enabled} {new_start_date}")
|
||||||
if event_id is None or new_start_date is None:
|
if event_id is None or new_start_date is None:
|
||||||
return RedirectResponse("/game/mai2/events/?e=4", 303)
|
return RedirectResponse("/game/mai2/events/?e=4", 303)
|
||||||
|
|
||||||
await self.data.static.update_event_by_id(int(event_id), new_enabled, new_start_date)
|
await self.data.static.update_event_by_id(int(event_id), new_enabled, new_start_date)
|
||||||
|
|
||||||
return RedirectResponse("/game/mai2/events/?s=1", 303)
|
return RedirectResponse("/game/mai2/events/?s=1", 303)
|
||||||
|
|
||||||
async def get_photo(self, request: Request) -> RedirectResponse:
|
async def get_photo(self, request: Request) -> RedirectResponse:
|
||||||
usr_sesh = self.validate_session(request)
|
usr_sesh = self.validate_session(request)
|
||||||
if not usr_sesh:
|
if not usr_sesh:
|
||||||
return RedirectResponse("/gate/", 303)
|
return RedirectResponse("/gate/", 303)
|
||||||
|
|
||||||
photo_jpeg = request.path_params.get("photo_id", None)
|
photo_jpeg = request.path_params.get("photo_id", None)
|
||||||
if not photo_jpeg:
|
if not photo_jpeg:
|
||||||
return Response(status_code=400)
|
return Response(status_code=400)
|
||||||
|
|
||||||
matcher = re.match(r"^([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}).jpeg$", photo_jpeg)
|
matcher = re.match(r"^([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}).jpeg$", photo_jpeg)
|
||||||
if not matcher:
|
if not matcher:
|
||||||
return Response(status_code=400)
|
return Response(status_code=400)
|
||||||
|
|
||||||
photo_id = matcher.groups()[0]
|
photo_id = matcher.groups()[0]
|
||||||
photo_info = await self.data.profile.get_user_photo_by_id(photo_id)
|
photo_info = await self.data.profile.get_user_photo_by_id(photo_id)
|
||||||
if not photo_info:
|
if not photo_info:
|
||||||
@ -379,18 +379,18 @@ class Mai2Frontend(FE_Base):
|
|||||||
|
|
||||||
if path.exists(f"{out_folder}"):
|
if path.exists(f"{out_folder}"):
|
||||||
shutil.rmtree(out_folder)
|
shutil.rmtree(out_folder)
|
||||||
|
|
||||||
return Response(status_code=404)
|
return Response(status_code=404)
|
||||||
|
|
||||||
if path.exists(f"{out_folder}"):
|
if path.exists(f"{out_folder}"):
|
||||||
self.logger.info(f"Photo Path Exist.")
|
self.logger.info(f"Photo Path Exist.")
|
||||||
max_idx = 0
|
max_idx = 0
|
||||||
p = ImageFile.Parser()
|
p = ImageFile.Parser()
|
||||||
for _, _, files in walk("out_folder"):
|
for _, _, files in walk(f"{out_folder}"):
|
||||||
if not files:
|
if not files:
|
||||||
break
|
break
|
||||||
|
|
||||||
matcher = re.match("^(\d+)_(\d+)$", files[0])
|
matcher = re.match(r"^(\d+)_(\d+)\.bin$", files[0])
|
||||||
if not matcher:
|
if not matcher:
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -400,18 +400,18 @@ class Mai2Frontend(FE_Base):
|
|||||||
self.logger.error(f"Expected {max_idx + 1} files, found {len(files)}")
|
self.logger.error(f"Expected {max_idx + 1} files, found {len(files)}")
|
||||||
max_idx = 0
|
max_idx = 0
|
||||||
break
|
break
|
||||||
|
|
||||||
if max_idx == 0:
|
if max_idx == 0:
|
||||||
return Response(status_code=500)
|
return Response(status_code=500)
|
||||||
|
|
||||||
for i in range(max_idx + 1):
|
for i in range(max_idx + 1):
|
||||||
with open(f"{out_folder}/{i}_{max_idx}", "rb") as f:
|
with open(f"{out_folder}/{i}_{max_idx}.bin", "rb") as f:
|
||||||
p.feed(f.read())
|
p.feed(f.read())
|
||||||
try:
|
try:
|
||||||
im = p.close()
|
im = p.close()
|
||||||
im.save(f"{out_folder}.jpeg")
|
im.save(f"{out_folder}.jpeg")
|
||||||
self.logger.info(f"{out_folder}.jpeg generated.")
|
self.logger.info(f"{out_folder}.jpeg generated.")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"{photo_id} failed PIL validation! - {e}")
|
self.logger.error(f"{photo_id} failed PIL validation! - {e}")
|
||||||
|
|
||||||
@ -420,5 +420,5 @@ class Mai2Frontend(FE_Base):
|
|||||||
if path.exists(f"{out_folder}.jpeg"):
|
if path.exists(f"{out_folder}.jpeg"):
|
||||||
self.logger.info(f"{out_folder}.jpeg exists")
|
self.logger.info(f"{out_folder}.jpeg exists")
|
||||||
return FileResponse(f"{out_folder}.jpeg")
|
return FileResponse(f"{out_folder}.jpeg")
|
||||||
|
|
||||||
return Response(status_code=404)
|
return Response(status_code=404)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user