1570ba320c style: 代码格式化和字符串处理优化
- 优化代码缩进和换行,提高可读性
- 统一使用单引号或双引号,保持一致性
- 移除冗余的空格和括号,精简代码
2025-02-15 21:30:24 +08:00

95 lines
2.7 KiB
Python

from textual import work
from textual.app import ComposeResult
from textual.containers import Grid
from textual.screen import ModalScreen
from textual.widgets import Label
from textual.widgets import LoadingIndicator
from ..application import XHS
from ..module import (
RELEASES,
)
from ..translation import _
__all__ = ["Update"]
class Update(ModalScreen):
def __init__(
self,
app: XHS,
):
super().__init__()
self.xhs = app
def compose(self) -> ComposeResult:
yield Grid(
Label(_("正在检查新版本,请稍等...")),
LoadingIndicator(),
classes="loading",
)
@work(exclusive=True)
async def check_update(self) -> None:
try:
url = await self.xhs.html.request_url(
RELEASES,
False,
None,
timeout=5,
)
version = url.split("/")[-1]
match self.compare_versions(
f"{XHS.VERSION_MAJOR}.{XHS.VERSION_MINOR}", version, XHS.VERSION_BETA
):
case 4:
args = (
_("检测到新版本:{0}.{1}").format(
XHS.VERSION_MAJOR,
XHS.VERSION_MINOR,
),
"warning",
)
case 3:
args = (
_("当前版本为开发版, 可更新至正式版"),
"warning",
)
case 2:
args = (
_("当前已是最新开发版"),
"warning",
)
case 1:
args = (
_("当前已是最新正式版"),
"information",
)
case _:
raise ValueError
except ValueError:
args = (
_("检测新版本失败"),
"error",
)
self.dismiss(args)
def on_mount(self) -> None:
self.check_update()
@staticmethod
def compare_versions(
current_version: str, target_version: str, is_development: bool
) -> int:
current_major, current_minor = map(int, current_version.split("."))
target_major, target_minor = map(int, target_version.split("."))
if target_major > current_major:
return 4
if target_major == current_major:
if target_minor > current_minor:
return 4
if target_minor == current_minor:
return 3 if is_development else 1
return 2