支持自动更新音·创库,支持更优美的错误提示,支持选择输出目录

This commit is contained in:
2024-02-08 04:36:42 +08:00
parent 28ec743b86
commit c64d9c440f
12 changed files with 1934 additions and 315 deletions

View File

@ -4,14 +4,14 @@
伶伦转换器 版本检查组件
Linglun Converter Version Checking Component
版权所有 © 2024 金羿 & 睿开发组
版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md
Terms & Conditions: ./Lisense.md
"""
from .io import TrimLog, urllib, Sequence, Iterable, Callable, Optional
from .io import TrimLog, requests, Sequence, Iterable, Callable, Optional, Dict, Union
def is_ver_char(text: str) -> bool:
@ -64,20 +64,21 @@ def is_ver_bigger(ver_1: Sequence[int], ver_2: Sequence[int]) -> bool:
return len_v1 > len_v2
def check_update(
def check_update_repo(
appname: str,
get_text_url: str,
version_now: str,
message_show_fun: Callable,
logger: TrimLog.Logger,
version_disp: Optional[str] = None,
version_renew_tip: str = "!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,您可以前往下载地址更新。",
):
if not version_disp:
version_disp = version_now
logger.info("当前版本信息{}".format(version_now))
logger.info("当前 {} 版本:{}".format(appname,version_now))
try:
code_content: str = urllib.request.urlopen(get_text_url).read().decode("utf-8")
code_content: str = requests.get(get_text_url).text
except Exception as E: # noinspection PyBroadException
logger.warning("无法获取更新版本信息:{}".format(E))
return
@ -86,7 +87,7 @@ def check_update(
code_content = code_content[code_content.find('"') + 1 :]
version_content = code_content[: code_content.find('"')]
logger.info("已获取新版本信息:{}".format(version_content))
logger.info("已获取 {} 新版本信息:{}".format(appname,version_content))
if is_ver_bigger(
[int(v) for v in cut_ver_str(version_content).split(".")],
@ -98,7 +99,7 @@ def check_update(
version_content = code_content[: code_content.find('"')]
message_show_fun(
"!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,您可以前往下载地址更新。".format(
version_renew_tip.format(
app=appname, latest=version_content, current=version_disp
)
)
@ -116,3 +117,42 @@ def check_update(
# return version_content[i:j]
# "".join([version_content[i] for i in range(version_content.__len__()) if is_ver_char(version_content[i]) and ((version_content[i-1] if i > 0 else False) or (version_content[i+1] if i < version_content.__len__() else False))]).split('.')
def check_update_release(
appname: str,
get_release_url: str,
version_now: str,
notice_fun: Callable[[str, str], bool],
logger: TrimLog.Logger,
version_renew_tip: str = "!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,是否更新?",
) -> Union[None, Dict[str, str]]:
logger.info("当前 {} 版本:{}".format(appname,version_now))
try:
code_content: Dict = requests.get(get_release_url).json()
except Exception as E: # noinspection PyBroadException
logger.warning("无法获取更新版本信息:{}".format(E))
return
version_content = code_content["release"]["tag"]["name"]
logger.info("已获取 {} 新版本信息:{}".format(appname,version_content))
if is_ver_bigger(
[int(v) for v in cut_ver_str(version_content).split(".")],
[int(v) for v in cut_ver_str(version_now).split(".")],
):
if notice_fun(
version_renew_tip.format(
app=appname, latest=version_content, current=version_now
),
code_content["release"]["release"]["description"],
):
return dict(
[
(d["name"], d["download_url"])
for d in code_content["release"]["release"]["attach_files"]
]
)