fix: 版本信息转临时存储;允许强制请求版本信息
This commit is contained in:
@@ -37,7 +37,7 @@ async def check_update(version: UpdateCheckIn = Body(...)) -> UpdateCheckOut:
|
||||
|
||||
try:
|
||||
if_need, latest_version, update_info = await Updater.check_update(
|
||||
current_version=version.current_version
|
||||
current_version=version.current_version, if_force=version.if_force
|
||||
)
|
||||
except Exception as e:
|
||||
return UpdateCheckOut(
|
||||
|
||||
@@ -144,12 +144,6 @@ class GlobalConfig(ConfigBase):
|
||||
Data_LastWebConfigUpdated = ConfigItem(
|
||||
"Data", "LastWebConfigUpdated", "2000-01-01 00:00:00", DateTimeValidator()
|
||||
)
|
||||
Data_LastCheckVersion = ConfigItem(
|
||||
"Data", "LastCheckVersion", "2000-01-01 00:00:00", DateTimeValidator()
|
||||
)
|
||||
Data_UpdateVersionInfo = ConfigItem(
|
||||
"Data", "UpdateVersionInfo", "{ }", JSONValidator()
|
||||
)
|
||||
Data_WebConfig = ConfigItem("Data", "WebConfig", "{ }", JSONValidator())
|
||||
|
||||
|
||||
|
||||
@@ -788,6 +788,7 @@ class SettingUpdateIn(BaseModel):
|
||||
|
||||
class UpdateCheckIn(BaseModel):
|
||||
current_version: str = Field(..., description="当前前端版本号")
|
||||
if_force: bool = Field(..., description="是否强制拉取更新信息")
|
||||
|
||||
|
||||
class UpdateCheckOut(OutBase):
|
||||
|
||||
@@ -44,27 +44,28 @@ class _UpdateHandler:
|
||||
def __init__(self) -> None:
|
||||
self.is_locked: bool = False
|
||||
self.remote_version: Optional[str] = None
|
||||
self.last_check_time: Optional[datetime] = None
|
||||
self.update_version_info: Optional[Dict[str, List[str]]] = None
|
||||
self.mirror_chyan_download_url: Optional[str] = None
|
||||
|
||||
async def check_update(
|
||||
self, current_version: str
|
||||
self, current_version: str, if_force: bool = False
|
||||
) -> tuple[bool, str, Dict[str, List[str]]]:
|
||||
|
||||
if datetime.now() - timedelta(hours=4) < datetime.strptime(
|
||||
Config.get("Data", "LastCheckVersion"), "%Y-%m-%d %H:%M:%S"
|
||||
if (
|
||||
not if_force
|
||||
and self.remote_version is not None
|
||||
and self.last_check_time is not None
|
||||
and self.update_version_info is not None
|
||||
and self.last_check_time > datetime.now() - timedelta(hours=4)
|
||||
):
|
||||
logger.info("四小时内已进行过一次检查, 直接使用缓存的版本更新信息")
|
||||
return (
|
||||
(
|
||||
False
|
||||
if self.remote_version is None
|
||||
else bool(
|
||||
version.parse(self.remote_version)
|
||||
> version.parse(current_version)
|
||||
)
|
||||
bool(
|
||||
version.parse(self.remote_version) > version.parse(current_version)
|
||||
),
|
||||
current_version if self.remote_version is None else self.remote_version,
|
||||
json.loads(Config.get("Data", "UpdateVersionInfo")),
|
||||
self.remote_version,
|
||||
self.update_version_info,
|
||||
)
|
||||
|
||||
logger.info("开始检查更新")
|
||||
@@ -90,16 +91,15 @@ class _UpdateHandler:
|
||||
)
|
||||
|
||||
logger.success("获取版本信息成功")
|
||||
await Config.set(
|
||||
"Data", "LastCheckVersion", datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
)
|
||||
self.last_check_time = datetime.now()
|
||||
|
||||
remote_version = version_info["data"]["version_name"]
|
||||
self.remote_version = remote_version
|
||||
self.remote_version = version_info["data"]["version_name"]
|
||||
if self.remote_version is None:
|
||||
raise Exception("Mirror 酱未返回版本号, 请稍后重试")
|
||||
if "url" in version_info["data"]:
|
||||
self.mirror_chyan_download_url = version_info["data"]["url"]
|
||||
|
||||
if version.parse(remote_version) > version.parse(current_version):
|
||||
if version.parse(self.remote_version) > version.parse(current_version):
|
||||
|
||||
# 版本更新信息
|
||||
version_info_json: Dict[str, Dict[str, List[str]]] = json.loads(
|
||||
@@ -110,7 +110,7 @@ class _UpdateHandler:
|
||||
)
|
||||
)
|
||||
|
||||
update_version_info = {}
|
||||
self.update_version_info = {}
|
||||
for v_i in [
|
||||
info
|
||||
for ver, info in version_info_json.items()
|
||||
@@ -118,14 +118,11 @@ class _UpdateHandler:
|
||||
]:
|
||||
|
||||
for key, value in v_i.items():
|
||||
if key not in update_version_info:
|
||||
update_version_info[key] = []
|
||||
update_version_info[key] += value
|
||||
if key not in self.update_version_info:
|
||||
self.update_version_info[key] = []
|
||||
self.update_version_info[key] += value
|
||||
|
||||
await Config.set(
|
||||
"Data", "UpdateVersionInfo", json.dumps(update_version_info)
|
||||
)
|
||||
return True, remote_version, update_version_info
|
||||
return True, self.remote_version, self.update_version_info
|
||||
|
||||
else:
|
||||
return False, current_version, {}
|
||||
|
||||
Reference in New Issue
Block a user