fix: 更新检查后端限制4h请求一次

This commit is contained in:
DLmaster361
2025-09-11 23:06:23 +08:00
parent 90b8020c0a
commit 80eb0bc49d
3 changed files with 53 additions and 5 deletions

View File

@@ -118,20 +118,25 @@ class GlobalConfig(ConfigBase):
Data_UID = ConfigItem("Data", "UID", str(uuid.uuid4()), UUIDValidator()) Data_UID = ConfigItem("Data", "UID", str(uuid.uuid4()), UUIDValidator())
Data_LastStatisticsUpload = ConfigItem( Data_LastStatisticsUpload = ConfigItem(
"Data", "LastStatisticsUpload", "2000-01-01 00:00:00" "Data", "LastStatisticsUpload", "2000-01-01 00:00:00", DateTimeValidator()
) )
Data_LastStageUpdated = ConfigItem( Data_LastStageUpdated = ConfigItem(
"Data", "LastStageUpdated", "2000-01-01 00:00:00" "Data", "LastStageUpdated", "2000-01-01 00:00:00", DateTimeValidator()
)
Data_StageTimeStamp = ConfigItem(
"Data", "StageTimeStamp", "2000-01-01 00:00:00", DateTimeValidator()
) )
Data_StageTimeStamp = ConfigItem("Data", "StageTimeStamp", "2000-01-01 00:00:00")
Data_Stage = ConfigItem("Data", "Stage", "{ }") Data_Stage = ConfigItem("Data", "Stage", "{ }")
Data_LastNoticeUpdated = ConfigItem( Data_LastNoticeUpdated = ConfigItem(
"Data", "LastNoticeUpdated", "2000-01-01 00:00:00" "Data", "LastNoticeUpdated", "2000-01-01 00:00:00", DateTimeValidator()
) )
Data_IfShowNotice = ConfigItem("Data", "IfShowNotice", True, BoolValidator()) Data_IfShowNotice = ConfigItem("Data", "IfShowNotice", True, BoolValidator())
Data_Notice = ConfigItem("Data", "Notice", "{ }") Data_Notice = ConfigItem("Data", "Notice", "{ }")
Data_LastWebConfigUpdated = ConfigItem( Data_LastWebConfigUpdated = ConfigItem(
"Data", "LastWebConfigUpdated", "2000-01-01 00:00:00" "Data", "LastWebConfigUpdated", "2000-01-01 00:00:00", DateTimeValidator()
)
Data_LastCheckVersion = ConfigItem(
"Data", "LastCheckVersion", "2000-01-01 00:00:00", DateTimeValidator()
) )
Data_WebConfig = ConfigItem("Data", "WebConfig", "{ }") Data_WebConfig = ConfigItem("Data", "WebConfig", "{ }")

View File

@@ -24,6 +24,7 @@ import json
import uuid import uuid
import win32com.client import win32com.client
from copy import deepcopy from copy import deepcopy
from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import List, Any, Dict, Union, Optional from typing import List, Any, Dict, Union, Optional
@@ -112,6 +113,27 @@ class UUIDValidator(ConfigValidator):
return value if self.validate(value) else str(uuid.uuid4()) return value if self.validate(value) else str(uuid.uuid4())
class DateTimeValidator(ConfigValidator):
def validate(self, value: Any) -> bool:
if not isinstance(value, str):
return False
try:
datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
return True
except ValueError:
return False
def correct(self, value: Any) -> str:
if not isinstance(value, str):
return "2000-01-01 00:00:00"
try:
datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
return value
except ValueError:
return "2000-01-01 00:00:00"
class EncryptValidator(ConfigValidator): class EncryptValidator(ConfigValidator):
"""加密数据验证器""" """加密数据验证器"""

View File

@@ -27,6 +27,7 @@ import zipfile
import requests import requests
import subprocess import subprocess
from packaging import version from packaging import version
from datetime import datetime, timedelta
from typing import List, Dict, Optional from typing import List, Dict, Optional
from pathlib import Path from pathlib import Path
@@ -49,6 +50,23 @@ class _UpdateHandler:
self, current_version: str self, current_version: str
) -> tuple[bool, str, Dict[str, List[str]]]: ) -> 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"
):
logger.info("四小时内已进行过一次检查, 直接使用缓存的版本更新信息")
return (
(
False
if self.remote_version is None
else bool(
version.parse(self.remote_version)
> version.parse(current_version)
)
),
current_version if self.remote_version is None else self.remote_version,
{},
)
logger.info("开始检查更新") logger.info("开始检查更新")
response = requests.get( response = requests.get(
@@ -72,6 +90,9 @@ class _UpdateHandler:
) )
logger.success("获取版本信息成功") logger.success("获取版本信息成功")
await Config.set(
"Data", "LastCheckVersion", datetime.now().strftime("%Y-%m-%d %H:%M:%S")
)
remote_version = version_info["data"]["version_name"] remote_version = version_info["data"]["version_name"]
self.remote_version = remote_version self.remote_version = remote_version