| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- """
- 旧 API,为兼容性考虑保留
- """
- import json
- from homepagebuilder.interfaces import page_class_handles, require
- from homepagebuilder.core.page import CodeBasedPage
- from homepagebuilder.core.types import Context
- mcv = require('minecraft_versions') # 需求前置 MinecraftVersions
- MCVM = mcv.MCVM
- def get_args(context):
- if setter := context.setter:
- return setter.override.get('args', {})
- return {}
- def is_true(string: str) -> bool:
- return bool(string and isinstance(string, str) and string.lower() != 'false')
- @page_class_handles('apis/status')
- class StatusPage(CodeBasedPage):
- @property
- def display_name(self):
- return 'api/status'
- def generate(self, *args, **kwargs):
- return 'ok'
- def get_content_type(self, *args, **kwargs):
- return 'text/plain'
- @page_class_handles('apis/versions/latest')
- class LatestVersionAPI(CodeBasedPage):
- def __init__(self, project):
- super().__init__(project)
- self.latest_release = self.project.base_library.get_card(MCVM.get_latest_version('release').id, False)
- if latest_developing := MCVM.get_latest_version('developing'):
- self.latest_developing = self.project.base_library.get_card(latest_developing.id, False)
- else:
- self.latest_developing = None
- self.respond = None
- @property
- def display_name(self):
- return 'api/versions/latest'
- def pregen_respond(self):
- respond = {}
- if self.latest_developing:
- respond['snapshot'] = self.extract_version_info(self.latest_developing)
- respond['release'] = self.extract_version_info(self.latest_release)
- self.respond = respond
- def extract_version_info(self, card):
- respond = {}
- context = Context.get_current_context()
- expendedcard = context.builder.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):
- context = Context.get_current_context()
- args = get_args(context)
- ensure_ascii = is_true(args.get('ascii', False))
- if not self.respond:
- self.pregen_respond()
- return json.dumps(self.respond, ensure_ascii=ensure_ascii)
- def get_content_type(self, *args, **kwargs):
- return 'application/json'
- @page_class_handles('apis/versions/latest-card')
- class LatestVersionCardAPI(CodeBasedPage):
- def generate(self, *args, **kwargs):
- context = Context.get_current_context()
- setter = context.setter
- card = self.project.base_library.get_card('VersionLatestListCard', False)
- card = setter.decorate(card)
- return context.builder.template_manager.build(card)
- def get_content_type(self, *args, **kwargs):
- return 'application/xml'
|