|
|
@@ -1,5 +1,14 @@
|
|
|
-from Interfaces import page_class_handles, PageBase
|
|
|
+from Interfaces import page_class_handles, PageBase, require, format_code
|
|
|
+import json
|
|
|
|
|
|
+def get_args(kwargs):
|
|
|
+ if setter := kwargs.get('setter'):
|
|
|
+ return setter.override
|
|
|
+ return {}
|
|
|
+
|
|
|
+def is_true(string:str):
|
|
|
+ return string and isinstance(string,str) and string.lower() != 'false'
|
|
|
+
|
|
|
@page_class_handles('apis/status')
|
|
|
class StatusPage(PageBase):
|
|
|
|
|
|
@@ -8,4 +17,55 @@ class StatusPage(PageBase):
|
|
|
return 'api/status'
|
|
|
|
|
|
def generate(self, *args, **kwargs):
|
|
|
- return 'ok'
|
|
|
+ return 'ok'
|
|
|
+
|
|
|
+mcv = require('MinecraftVersions') # 需求前置 MinecraftVersions
|
|
|
+latest_version = mcv.get_latest()
|
|
|
+
|
|
|
+@page_class_handles('apis/versions/latest')
|
|
|
+class LatestVersionAPI(PageBase):
|
|
|
+
|
|
|
+ def __init__(self, project):
|
|
|
+ super().__init__(project)
|
|
|
+ self.latest_release = self.project.base_library.get_card(mcv.get_latest('release'),False)
|
|
|
+ if mcv.get_version_type(latest_version) == 'snapshot':
|
|
|
+ self.latest_snapshot = self.project.base_library.get_card(mcv.get_latest(),False)
|
|
|
+ else:
|
|
|
+ self.latest_snapshot = None
|
|
|
+ self.respond = None
|
|
|
+
|
|
|
+ @property
|
|
|
+ def display_name(self):
|
|
|
+ return 'api/versions/latest'
|
|
|
+
|
|
|
+ def pregen_respond(self):
|
|
|
+ respond = {}
|
|
|
+ if self.latest_snapshot:
|
|
|
+ respond['snapshot'] = self.extract_version_info(self.latest_snapshot)
|
|
|
+ respond['release'] = self.extract_version_info(self.latest_release)
|
|
|
+ self.respond = respond
|
|
|
+
|
|
|
+ def extract_version_info(self,card):
|
|
|
+ respond = {}
|
|
|
+ expendedcard = self.project.template_manager.expend_card_placeholders(card,'')
|
|
|
+ self.copyinfo(respond,expendedcard,'version-type')
|
|
|
+ self.copyinfo(respond,expendedcard,'intro')
|
|
|
+ self.copyinfo(respond,expendedcard,'version-image-link')
|
|
|
+ self.copyinfo(respond,expendedcard,'server-jar')
|
|
|
+ self.copyinfo(respond,expendedcard,'translator')
|
|
|
+ self.copyinfo(respond,expendedcard,'official-link')
|
|
|
+ self.copyinfo(respond,expendedcard,'wiki-link')
|
|
|
+ self.copyinfo(respond,expendedcard,'version-id')
|
|
|
+ self.copyinfo(respond,expendedcard,'title')
|
|
|
+ respond['homepage-json-link'] = f"https://news.bugjump.net/VersionDetail.json?ver={expendedcard['version-id']}"
|
|
|
+ return respond
|
|
|
+
|
|
|
+ def copyinfo(self,respond,card,key):
|
|
|
+ respond[key] = card.get(key)
|
|
|
+
|
|
|
+ def generate(self, *args, **kwargs):
|
|
|
+ args = get_args(kwargs)
|
|
|
+ ensure_ascii = is_true(args.get('ascii',False))
|
|
|
+ if not self.respond:
|
|
|
+ self.pregen_respond()
|
|
|
+ return json.dumps(self.respond,ensure_ascii=ensure_ascii)
|