mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-14 11:47:28 +08:00
Added maimai DX FESTiVAL PLUS support
- Added Card Maker support for FESTiVAL PLUS - Bumped SDEZ database to version 8 - Updated docs for FESTiVAL PLUS
This commit is contained in:
@@ -23,6 +23,7 @@ from titles.mai2.splashplus import Mai2SplashPlus
|
||||
from titles.mai2.universe import Mai2Universe
|
||||
from titles.mai2.universeplus import Mai2UniversePlus
|
||||
from titles.mai2.festival import Mai2Festival
|
||||
from titles.mai2.festivalplus import Mai2FestivalPlus
|
||||
|
||||
|
||||
class Mai2Servlet:
|
||||
@@ -47,7 +48,7 @@ class Mai2Servlet:
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Mai2Finale,
|
||||
Mai2Finale,
|
||||
Mai2DX,
|
||||
Mai2DXPlus,
|
||||
Mai2Splash,
|
||||
@@ -55,6 +56,7 @@ class Mai2Servlet:
|
||||
Mai2Universe,
|
||||
Mai2UniversePlus,
|
||||
Mai2Festival,
|
||||
Mai2FestivalPlus,
|
||||
]
|
||||
|
||||
self.logger = logging.getLogger("mai2")
|
||||
@@ -110,22 +112,34 @@ class Mai2Servlet:
|
||||
)
|
||||
|
||||
def setup(self):
|
||||
if self.game_cfg.uploads.photos and self.game_cfg.uploads.photos_dir and not path.exists(self.game_cfg.uploads.photos_dir):
|
||||
if (
|
||||
self.game_cfg.uploads.photos
|
||||
and self.game_cfg.uploads.photos_dir
|
||||
and not path.exists(self.game_cfg.uploads.photos_dir)
|
||||
):
|
||||
try:
|
||||
mkdir(self.game_cfg.uploads.photos_dir)
|
||||
except Exception:
|
||||
self.logger.error(f"Failed to make photo upload directory at {self.game_cfg.uploads.photos_dir}")
|
||||
self.logger.error(
|
||||
f"Failed to make photo upload directory at {self.game_cfg.uploads.photos_dir}"
|
||||
)
|
||||
|
||||
if self.game_cfg.uploads.movies and self.game_cfg.uploads.movies_dir and not path.exists(self.game_cfg.uploads.movies_dir):
|
||||
if (
|
||||
self.game_cfg.uploads.movies
|
||||
and self.game_cfg.uploads.movies_dir
|
||||
and not path.exists(self.game_cfg.uploads.movies_dir)
|
||||
):
|
||||
try:
|
||||
mkdir(self.game_cfg.uploads.movies_dir)
|
||||
except Exception:
|
||||
self.logger.error(f"Failed to make movie upload directory at {self.game_cfg.uploads.movies_dir}")
|
||||
self.logger.error(
|
||||
f"Failed to make movie upload directory at {self.game_cfg.uploads.movies_dir}"
|
||||
)
|
||||
|
||||
def render_POST(self, request: Request, version: int, url_path: str) -> bytes:
|
||||
if url_path.lower() == "ping":
|
||||
return zlib.compress(b'{"returnCode": "1"}')
|
||||
|
||||
|
||||
elif url_path.startswith("api/movie/"):
|
||||
self.logger.info(f"Movie data: {url_path} - {request.content.getvalue()}")
|
||||
return b""
|
||||
@@ -140,18 +154,20 @@ class Mai2Servlet:
|
||||
if request.uri.startswith(b"/SDEZ"):
|
||||
if version < 105: # 1.0
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX
|
||||
elif version >= 105 and version < 110: # Plus
|
||||
elif version >= 105 and version < 110: # PLUS
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_PLUS
|
||||
elif version >= 110 and version < 115: # Splash
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH
|
||||
elif version >= 115 and version < 120: # Splash Plus
|
||||
elif version >= 115 and version < 120: # Splash PLUS
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH_PLUS
|
||||
elif version >= 120 and version < 125: # Universe
|
||||
elif version >= 120 and version < 125: # UNiVERSE
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE
|
||||
elif version >= 125 and version < 130: # Universe Plus
|
||||
elif version >= 125 and version < 130: # UNiVERSE PLUS
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE_PLUS
|
||||
elif version >= 130: # Festival
|
||||
elif version >= 130 and version < 135: # FESTiVAL
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL
|
||||
elif version >= 135: # FESTiVAL PLUS
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL_PLUS
|
||||
|
||||
else:
|
||||
if version < 110: # 1.0
|
||||
@@ -180,15 +196,20 @@ class Mai2Servlet:
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_MILK_PLUS
|
||||
elif version >= 197: # Finale
|
||||
internal_ver = Mai2Constants.VER_MAIMAI_FINALE
|
||||
|
||||
if request.getHeader('Mai-Encoding') is not None or request.getHeader('X-Mai-Encoding') is not None:
|
||||
|
||||
if (
|
||||
request.getHeader("Mai-Encoding") is not None
|
||||
or request.getHeader("X-Mai-Encoding") is not None
|
||||
):
|
||||
# The has is some flavor of MD5 of the endpoint with a constant bolted onto the end of it.
|
||||
# See cake.dll's Obfuscator function for details. Hopefully most DLL edits will remove
|
||||
# these two(?) headers to not cause issues, but given the general quality of SEGA data...
|
||||
enc_ver = request.getHeader('Mai-Encoding')
|
||||
enc_ver = request.getHeader("Mai-Encoding")
|
||||
if enc_ver is None:
|
||||
enc_ver = request.getHeader('X-Mai-Encoding')
|
||||
self.logger.debug(f"Encryption v{enc_ver} - User-Agent: {request.getHeader('User-Agent')}")
|
||||
enc_ver = request.getHeader("X-Mai-Encoding")
|
||||
self.logger.debug(
|
||||
f"Encryption v{enc_ver} - User-Agent: {request.getHeader('User-Agent')}"
|
||||
)
|
||||
|
||||
try:
|
||||
unzip = zlib.decompress(req_raw)
|
||||
@@ -231,10 +252,12 @@ class Mai2Servlet:
|
||||
self.logger.debug(f"v{version} GET {url_path}")
|
||||
url_split = url_path.split("/")
|
||||
|
||||
if (url_split[0] == "api" and url_split[1] == "movie") or url_split[0] == "movie":
|
||||
if (url_split[0] == "api" and url_split[1] == "movie") or url_split[
|
||||
0
|
||||
] == "movie":
|
||||
if url_split[2] == "moviestart":
|
||||
return json.dumps({"moviestart":{"status":"OK"}}).encode()
|
||||
|
||||
return json.dumps({"moviestart": {"status": "OK"}}).encode()
|
||||
|
||||
else:
|
||||
request.setResponseCode(404)
|
||||
return b""
|
||||
@@ -251,20 +274,24 @@ class Mai2Servlet:
|
||||
elif url_split[1].startswith("friend"):
|
||||
self.logger.info(f"v{version} old server friend inquire")
|
||||
return zlib.compress(b"{}")
|
||||
|
||||
|
||||
else:
|
||||
request.setResponseCode(404)
|
||||
return b""
|
||||
|
||||
|
||||
elif url_split[0] == "usbdl":
|
||||
if url_split[1] == "CONNECTIONTEST":
|
||||
self.logger.info(f"v{version} usbdl server test")
|
||||
return b""
|
||||
|
||||
elif self.game_cfg.deliver.udbdl_enable and path.exists(f"{self.game_cfg.deliver.content_folder}/usb/{url_split[-1]}"):
|
||||
with open(f"{self.game_cfg.deliver.content_folder}/usb/{url_split[-1]}", 'rb') as f:
|
||||
|
||||
elif self.game_cfg.deliver.udbdl_enable and path.exists(
|
||||
f"{self.game_cfg.deliver.content_folder}/usb/{url_split[-1]}"
|
||||
):
|
||||
with open(
|
||||
f"{self.game_cfg.deliver.content_folder}/usb/{url_split[-1]}", "rb"
|
||||
) as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
else:
|
||||
request.setResponseCode(404)
|
||||
return b""
|
||||
@@ -272,12 +299,18 @@ class Mai2Servlet:
|
||||
elif url_split[0] == "deliver":
|
||||
file = url_split[len(url_split) - 1]
|
||||
self.logger.info(f"v{version} {file} deliver inquire")
|
||||
self.logger.debug(f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}")
|
||||
|
||||
if self.game_cfg.deliver.enable and path.exists(f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}"):
|
||||
with open(f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}", 'rb') as f:
|
||||
self.logger.debug(
|
||||
f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}"
|
||||
)
|
||||
|
||||
if self.game_cfg.deliver.enable and path.exists(
|
||||
f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}"
|
||||
):
|
||||
with open(
|
||||
f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}", "rb"
|
||||
) as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
else:
|
||||
request.setResponseCode(404)
|
||||
return b""
|
||||
|
||||
Reference in New Issue
Block a user