feat(content processor): update processing method

This commit is contained in:
Haoyu Xu
2021-12-31 20:56:19 -05:00
parent a6212dee51
commit 7a97b5284f
5 changed files with 100 additions and 83 deletions

View File

@@ -1 +1 @@
2.1.2 2.1.3

View File

@@ -20,22 +20,22 @@ operators:
fallback_name: char_1013_chen2_2 fallback_name: char_1013_chen2_2
id: char_1013_chen2 id: char_1013_chen2
operator_logo: logo_rhodes_override operator_logo: logo_rhodes_override
title: Ch'en the Holungday title: 'Arknights: Ch''en/Chen the Holungday - 明日方舟:假日威龙陈'
version: __get_version version: ${func:get_version()}
project.json: project.json:
description: 'Arknights: Ch''en/Chen the Holungday Live 2D\n明日方舟假日威龙陈 Live description: 'Arknights: Ch''en/Chen the Holungday Live 2D\n明日方舟假日威龙陈 Live
2D\nThe model is extracted from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease 2D\nThe model is extracted from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease
set your FPS target in Wallpaper Engine > Settings > Performance > FPS\n请在 set your FPS target in Wallpaper Engine > Settings > Performance > FPS\n请在
Wallpaper Engine > 设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/chen\nGithub: Wallpaper Engine > 设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/chen\nGithub:
https://github.com/Halyul/aklive2d' https://github.com/Halyul/aklive2d'
title: 'Arknights: Ch''en/Chen the Holungday - 明日方舟:假日威龙陈' title: ${var:index.html->title}
ui_logo_opacity: 100 ui_logo_opacity: ${var:_operator_settings.js->opacity}
ui_logo_ratio: 61.8 ui_logo_ratio: 61.8
ui_operator_logo: 'true' ui_operator_logo: 'true'
ui_position_padding_bottom: 1 ui_position_padding_bottom: ${var:_operator_settings.js->viewport_bottom}
ui_position_padding_left: 0 ui_position_padding_left: ${var:_operator_settings.js->viewport_left}
ui_position_padding_right: 0 ui_position_padding_right: ${var:_operator_settings.js->viewport_right}
ui_position_padding_top: 1 ui_position_padding_top: ${var:_operator_settings.js->viewport_top}
workshopid: 2564643862 workshopid: 2564643862
nearl: nearl:
_operator_settings.js: _operator_settings.js:
@@ -52,22 +52,22 @@ operators:
fallback_name: char_1014_nearl2_2 fallback_name: char_1014_nearl2_2
id: char_1014_nearl2 id: char_1014_nearl2
operator_logo: logo_kazimierz operator_logo: logo_kazimierz
title: Nearl the Radiant Knight title: 'Arknights: Nearl the Radiant Knight - 明日方舟:耀骑士临光'
version: __get_version version: ${func:get_version()}
project.json: project.json:
description: 'Arknights: Nearl the Radiant Knight Live 2D\n明日方舟耀骑士临光 Live 2D\nThe description: 'Arknights: Nearl the Radiant Knight Live 2D\n明日方舟耀骑士临光 Live 2D\nThe
model is extracted from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease model is extracted from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease
set your FPS target in Wallpaper Engine > Settings > Performance > FPS\n请在 set your FPS target in Wallpaper Engine > Settings > Performance > FPS\n请在
Wallpaper Engine > 设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/nearl\nGithub: Wallpaper Engine > 设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/nearl\nGithub:
https://github.com/Halyul/aklive2d' https://github.com/Halyul/aklive2d'
title: 'Arknights: Nearl the Radiant Knight - 明日方舟:耀骑士临光' title: ${var:index.html->title}
ui_logo_opacity: 30 ui_logo_opacity: ${var:_operator_settings.js->opacity}
ui_logo_ratio: 61.8 ui_logo_ratio: 61.8
ui_operator_logo: 'true' ui_operator_logo: 'true'
ui_position_padding_bottom: 0 ui_position_padding_bottom: ${var:_operator_settings.js->viewport_bottom}
ui_position_padding_left: 2 ui_position_padding_left: ${var:_operator_settings.js->viewport_left}
ui_position_padding_right: 3 ui_position_padding_right: ${var:_operator_settings.js->viewport_right}
ui_position_padding_top: 10 ui_position_padding_top: ${var:_operator_settings.js->viewport_top}
workshopid: 2642836787 workshopid: 2642836787
nian: nian:
_operator_settings.js: _operator_settings.js:
@@ -75,6 +75,7 @@ operators:
fallbackImage_width: 2048 fallbackImage_width: 2048
filename: dyn_illust_char_2014_nian filename: dyn_illust_char_2014_nian
fps: 60 fps: 60
opacity: 30
viewport_bottom: 5 viewport_bottom: 5
viewport_left: 2 viewport_left: 2
viewport_right: 2 viewport_right: 2
@@ -83,22 +84,22 @@ operators:
fallback_name: char_2014_nian_2 fallback_name: char_2014_nian_2
id: char_2014_nian id: char_2014_nian
operator_logo: logo_sui operator_logo: logo_sui
title: Nian title: 'Arknights: Nian - 明日方舟:年'
version: __get_version version: ${func:get_version()}
project.json: project.json:
description: 'Arknights: Nian Live 2D\n明日方舟年 Live 2D\nThe model is extracted description: 'Arknights: Nian Live 2D\n明日方舟年 Live 2D\nThe model is extracted
from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease set your FPS target from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease set your FPS target
in Wallpaper Engine > Settings > Performance > FPS\n请在 Wallpaper Engine > in Wallpaper Engine > Settings > Performance > FPS\n请在 Wallpaper Engine >
设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/nian\nGithub: 设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/nian\nGithub:
https://github.com/Halyul/aklive2d' https://github.com/Halyul/aklive2d'
title: 'Arknights: Nian - 明日方舟:年' title: ${var:index.html->title}
ui_logo_opacity: 30 ui_logo_opacity: ${var:_operator_settings.js->opacity}
ui_logo_ratio: 61.8 ui_logo_ratio: 61.8
ui_operator_logo: 'true' ui_operator_logo: 'true'
ui_position_padding_bottom: 5 ui_position_padding_bottom: ${var:_operator_settings.js->viewport_bottom}
ui_position_padding_left: 2 ui_position_padding_left: ${var:_operator_settings.js->viewport_left}
ui_position_padding_right: 2 ui_position_padding_right: ${var:_operator_settings.js->viewport_right}
ui_position_padding_top: 3 ui_position_padding_top: ${var:_operator_settings.js->viewport_top}
workshopid: 2564642594 workshopid: 2564642594
rosmontis: rosmontis:
_operator_settings.js: _operator_settings.js:
@@ -115,22 +116,22 @@ operators:
fallback_name: char_391_rosmon_2 fallback_name: char_391_rosmon_2
id: char_391_rosmon id: char_391_rosmon
operator_logo: logo_rhodes_override operator_logo: logo_rhodes_override
title: Rosmontis title: 'Arknights: Rosmontis - 明日方舟:迷迭香'
version: __get_version version: ${func:get_version()}
project.json: project.json:
description: 'Arknights: Rosmontis Live 2D\n明日方舟迷迭香 Live 2D\nThe model is extracted description: 'Arknights: Rosmontis Live 2D\n明日方舟迷迭香 Live 2D\nThe model is extracted
from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease set your FPS target from game with Spine support.\n模型来自游戏内提取支持Spine\nPlease set your FPS target
in Wallpaper Engine > Settings > Performance > FPS\n请在 Wallpaper Engine > in Wallpaper Engine > Settings > Performance > FPS\n请在 Wallpaper Engine >
设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/rosmontis\nGithub: 设置 > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/rosmontis\nGithub:
https://github.com/Halyul/aklive2d' https://github.com/Halyul/aklive2d'
title: 'Arknights: Rosmontis - 明日方舟:迷迭香' title: ${var:index.html->title}
ui_logo_opacity: 100 ui_logo_opacity: ${var:_operator_settings.js->opacity}
ui_logo_ratio: 61.8 ui_logo_ratio: 61.8
ui_operator_logo: 'true' ui_operator_logo: 'true'
ui_position_padding_bottom: -1 ui_position_padding_bottom: ${var:_operator_settings.js->viewport_bottom}
ui_position_padding_left: 0 ui_position_padding_left: ${var:_operator_settings.js->viewport_left}
ui_position_padding_right: -14 ui_position_padding_right: ${var:_operator_settings.js->viewport_right}
ui_position_padding_top: -38 ui_position_padding_top: ${var:_operator_settings.js->viewport_top}
workshopid: 2642834981 workshopid: 2642834981
skadi: skadi:
_operator_settings.js: _operator_settings.js:
@@ -138,6 +139,7 @@ operators:
fallbackImage_width: 2048 fallbackImage_width: 2048
filename: dyn_illust_char_1012_skadi2 filename: dyn_illust_char_1012_skadi2
fps: 60 fps: 60
opacity: 30
viewport_bottom: -12 viewport_bottom: -12
viewport_left: -5 viewport_left: -5
viewport_right: -10 viewport_right: -10
@@ -146,22 +148,22 @@ operators:
fallback_name: char_1012_skadi2_2 fallback_name: char_1012_skadi2_2
id: char_1012_skadi2 id: char_1012_skadi2
operator_logo: logo_egir operator_logo: logo_egir
title: Skadi the Corrupting Heart title: 'Arknights: Skadi the Corrupting Heart - 明日方舟:浊心斯卡蒂'
version: __get_version version: ${func:get_version()}
project.json: project.json:
description: 'Arknights: Skadi the Corrupting Heart Live 2Di\r\n明日方舟浊心斯卡蒂 Live description: 'Arknights: Skadi the Corrupting Heart Live 2Di\r\n明日方舟浊心斯卡蒂 Live
2Di\r\nThe model is extracted from game with Spine support.\r\n模型来自游戏内提取支持Spine\r\nPlease 2Di\r\nThe model is extracted from game with Spine support.\r\n模型来自游戏内提取支持Spine\r\nPlease
set your FPS target in Wallpaper Engine > Settings > Performance > FPS\r\n请在 set your FPS target in Wallpaper Engine > Settings > Performance > FPS\r\n请在
Wallpaper Engine > 设置 > 性能 > FPS 下设置FPS\r\n\r\nLive preview on: https://arknights.halyul.dev/skadi\r\nGithub: Wallpaper Engine > 设置 > 性能 > FPS 下设置FPS\r\n\r\nLive preview on: https://arknights.halyul.dev/skadi\r\nGithub:
https://github.com/Halyul/aklive2d' https://github.com/Halyul/aklive2d'
title: 'Arknights: Skadi the Corrupting Heart - 明日方舟:浊心斯卡蒂' title: ${var:index.html->title}
ui_logo_opacity: 30 ui_logo_opacity: ${var:_operator_settings.js->opacity}
ui_logo_ratio: 61.8 ui_logo_ratio: 61.8
ui_operator_logo: 'true' ui_operator_logo: 'true'
ui_position_padding_bottom: -12 ui_position_padding_bottom: ${var:_operator_settings.js->viewport_bottom}
ui_position_padding_left: -5 ui_position_padding_left: ${var:_operator_settings.js->viewport_left}
ui_position_padding_right: -10 ui_position_padding_right: ${var:_operator_settings.js->viewport_right}
ui_position_padding_top: 0 ui_position_padding_top: ${var:_operator_settings.js->viewport_top}
workshopid: 2492307783 workshopid: 2492307783
w: w:
_operator_settings.js: _operator_settings.js:
@@ -178,22 +180,22 @@ operators:
fallback_name: char_113_cqbw_2 fallback_name: char_113_cqbw_2
id: char_113_cqbw id: char_113_cqbw
operator_logo: logo_babel operator_logo: logo_babel
title: W title: 'Arknights: W - 明日方舟W'
version: __get_version version: ${func:get_version()}
project.json: project.json:
description: 'Arknights: W Live 2D\n明日方舟W Live 2D\nThe model is extracted from description: 'Arknights: W Live 2D\n明日方舟W Live 2D\nThe model is extracted from
game with Spine support.\n模型来自游戏内提取支持Spine\nPlease set your FPS target in game with Spine support.\n模型来自游戏内提取支持Spine\nPlease set your FPS target in
Wallpaper Engine > Settings > Performance > FPS\n请在 Wallpaper Engine > 设置 Wallpaper Engine > Settings > Performance > FPS\n请在 Wallpaper Engine > 设置
> 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/w\nGithub: > 性能 > FPS 下设置FPS\n\nLive preview on: https://arknights.halyul.dev/w\nGithub:
https://github.com/Halyul/aklive2d' https://github.com/Halyul/aklive2d'
title: 'Arknights: W - 明日方舟W' title: ${var:index.html->title}
ui_logo_opacity: 30 ui_logo_opacity: ${var:_operator_settings.js->opacity}
ui_logo_ratio: 61.8 ui_logo_ratio: 61.8
ui_operator_logo: 'true' ui_operator_logo: 'true'
ui_position_padding_bottom: 1 ui_position_padding_bottom: ${var:_operator_settings.js->viewport_bottom}
ui_position_padding_left: 3 ui_position_padding_left: ${var:_operator_settings.js->viewport_left}
ui_position_padding_right: -3 ui_position_padding_right: ${var:_operator_settings.js->viewport_right}
ui_position_padding_top: 0 ui_position_padding_top: ${var:_operator_settings.js->viewport_top}
workshopid: 2642838078 workshopid: 2642838078
server: server:
operator_folder: ./operator/ operator_folder: ./operator/

View File

@@ -44,17 +44,13 @@ class Config:
viewport_right=int, viewport_right=int,
viewport_top=int, viewport_top=int,
viewport_bottom=int, viewport_bottom=int,
opacity=int,
), ),
"project.json": dict( "project.json": dict(
description=str, description=str,
title=str, title=str,
ui_logo_opacity=int,
ui_logo_ratio=float, ui_logo_ratio=float,
ui_operator_logo=str, ui_operator_logo=str,
ui_position_padding_left=int,
ui_position_padding_right=int,
ui_position_padding_top=int,
ui_position_padding_bottom=int,
workshopid=int, workshopid=int,
) )
} }

View File

@@ -7,9 +7,6 @@ class ContentProcessor:
self.config = config["operators"][operator_name] self.config = config["operators"][operator_name]
self.file_to_process = [key for key, value in self.config.items() if key.startswith("_") is False] self.file_to_process = [key for key, value in self.config.items() if key.startswith("_") is False]
self.settings = self.config self.settings = self.config
self.evalable = [
"__get_version"
]
self.__process_value() self.__process_value()
def process(self, file_path): def process(self, file_path):
@@ -17,8 +14,8 @@ class ContentProcessor:
with open(file_path, "r") as f: with open(file_path, "r") as f:
content = f.read() content = f.read()
if file_path.name in self.file_to_process: if file_path.name in self.file_to_process:
content = Formatter(content, "{# ", " #}") content = Matcher(content, "${format:", "}", self.settings)
return content.format(**self.settings[file_path.name]) return content.format(file_path.name)
else: else:
return content return content
@@ -36,32 +33,54 @@ class ContentProcessor:
def __process_value(self): def __process_value(self):
for item_key, item_value in self.settings.items(): for item_key, item_value in self.settings.items():
for key, value in item_value.items(): for key, value in item_value.items():
replace_value = value matcher = Matcher(value, "${", "}", self.settings)
# if value in evalable if matcher.match():
if value in self.evalable: replace_value = matcher.process()
if value == "__get_version": else:
replace_value = self.__get_version() replace_value = value
else:
raise Exception("Unsupported function name: {}".format(value))
self.settings[item_key][key] = replace_value self.settings[item_key][key] = replace_value
# copy dict value _operator_settings.js to {id}_settings.js # copy dict value _operator_settings.js to {id}_settings.js
settings_filename = "{}_settings.js".format(self.settings["index.html"]["id"]) settings_filename = "{}_settings.js".format(self.settings["index.html"]["id"])
self.settings[settings_filename] = self.settings["_operator_settings.js"] self.settings[settings_filename] = self.settings["_operator_settings.js"]
self.file_to_process.append(settings_filename) self.file_to_process.append(settings_filename)
def __get_version(self): class Evalable:
def get_version():
with open(pathlib.Path.cwd().joinpath("Version"), "r") as f: with open(pathlib.Path.cwd().joinpath("Version"), "r") as f:
version = f.read() version = f.read()
return version return version
class Formatter: class Matcher:
def __init__(self, content, start, end): def __init__(self, content, start, end, settings):
self.content = content
self.start = start self.start = start
self.end = end self.end = end
self.content = str(content)
self.settings = settings
def match(self):
return self.content.startswith(self.start) and self.content.endswith(self.end)
def format(self, **kwargs): def process(self):
for key, value in kwargs.items(): type = self.content.replace(self.start, "").replace(self.end, "").split(":")[0]
name = self.content.replace(self.start, "").replace(self.end, "").split(":")[1]
if type == "func":
try:
replace_value = eval("Evalable." + name)
except Exception as e:
raise e
elif type == "var":
replace_value = self.settings
for var in name.split("->"):
try:
replace_value = replace_value[var]
except Exception as e:
raise e
else:
raise Exception("Unsupported type: {}".format(type))
return replace_value
def format(self, filename):
for key, value in self.settings[filename].items():
identifier = self.start + key + self.end identifier = self.start + key + self.end
self.content = self.content.replace(identifier, str(value)) self.content = self.content.replace(identifier, str(value))
return self.content return self.content

View File

@@ -6,24 +6,24 @@
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1,user-scalable=no"> <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1,user-scalable=no">
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>{# title #}</title> <title>${format:title}</title>
<link rel="stylesheet" href="./assets/style.css?v={# version #}"> <link rel="stylesheet" href="./assets/style.css?v=${format:version}">
<link rel="stylesheet" href="./assets/spine-player.css?v={# version #}"> <link rel="stylesheet" href="./assets/spine-player.css?v=${format:version}">
</head> </head>
<body style="background-image: url('./operator/operator_bg.png');"> <body style="background-image: url('./operator/operator_bg.png');">
<div id="dev"></div> <div id="dev"></div>
<image src="./operator/{# operator_logo #}.png" class="logo invert-filter" id="logo" alt="operator logo" /> <image src="./operator/${format:operator_logo}.png" class="logo invert-filter" id="logo" alt="operator logo" />
<div id="widget-wrapper"> <div id="widget-wrapper">
<div id="container"></div> <div id="container"></div>
<div id="fallback" class="hide" style="background-image: url('./operator/{# fallback_name #}.png');"></div> <div id="fallback" class="hide" style="background-image: url('./operator/${format:fallback_name}.png');"></div>
</div> </div>
</body> </body>
<script type="text/javascript" src="./assets/spine-player.js?v={# version #}"></script> <script type="text/javascript" src="./assets/spine-player.js?v=${format:version}"></script>
<script type="text/javascript" src="./operator/{# id #}_assets.js?v={# version #}"></script> <script type="text/javascript" src="./operator/${format:id}_assets.js?v=${format:version}"></script>
<script type="text/javascript" src="./operator/{# id #}_settings.js?v={# version #}"></script> <script type="text/javascript" src="./operator/${format:id}_settings.js?v=${format:version}"></script>
<script type="text/javascript" src="./assets/settings.js?v={# version #}"></script> <script type="text/javascript" src="./assets/settings.js?v=${format:version}"></script>
<script type="text/javascript" src="./assets/runner.js?v={# version #}"></script> <script type="text/javascript" src="./assets/runner.js?v=${format:version}"></script>
</html> </html>