diff --git a/app/core/config.py b/app/core/config.py index 282fb797..6da02a2b 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -13,9 +13,9 @@ from dotenv import set_key from pydantic import BaseModel, BaseSettings, validator, Field from app.log import logger, log_settings, LogConfigModel +from app.schemas import MediaType from app.utils.system import SystemUtils from app.utils.url import UrlUtils -from app.schemas import MediaType from version import APP_VERSION @@ -515,7 +515,7 @@ class Settings(BaseSettings, ConfigModel, LogConfigModel): """ 全局用户代理字符串 """ - return f"{self.PROJECT_NAME}/{APP_VERSION[1:]} ({platform.system()}/{platform.release()})" + return f"{self.PROJECT_NAME}/{APP_VERSION[1:]} ({platform.system()} {platform.release()}; {SystemUtils.cpu_arch()})" @property def INNER_CONFIG_PATH(self): diff --git a/app/utils/system.py b/app/utils/system.py index bc47f5b3..1b3848ae 100644 --- a/app/utils/system.py +++ b/app/utils/system.py @@ -68,35 +68,57 @@ class SystemUtils: """ if SystemUtils.is_windows(): return False - return True if "synology" in SystemUtils.execute('uname -a') else False + return "synology" in SystemUtils.execute('uname -a') @staticmethod def is_windows() -> bool: """ 判断是否为Windows系统 """ - return True if os.name == "nt" else False + return os.name == "nt" @staticmethod def is_frozen() -> bool: """ 判断是否为冻结的二进制文件 """ - return True if getattr(sys, 'frozen', False) else False + return getattr(sys, 'frozen', False) @staticmethod def is_macos() -> bool: """ 判断是否为MacOS系统 """ - return True if platform.system() == 'Darwin' else False + return platform.system() == 'Darwin' @staticmethod def is_aarch64() -> bool: """ 判断是否为ARM64架构 """ - return True if platform.machine() == 'aarch64' else False + return platform.machine().lower() in ('aarch64', 'arm64') + + @staticmethod + def is_aarch() -> bool: + """ + 判断是否为ARM32架构 + """ + arch_name = platform.machine().lower() + return arch_name.startswith(('arm', 'aarch')) and arch_name not in ('aarch64', 'arm64') + + @staticmethod + def is_x86_64() -> bool: + """ + 判断是否为AMD64架构 + """ + return platform.machine().lower() in ('amd64', 'x86_64') + + @staticmethod + def is_x86_32() -> bool: + """ + 判断是否为AMD32架构 + """ + return platform.machine().lower() in ('i386', 'i686', 'x86', '386', 'x86_32') @staticmethod def platform() -> str: @@ -112,6 +134,22 @@ class SystemUtils: else: return "Linux" + @staticmethod + def cpu_arch() -> str: + """ + 获取CPU架构 + """ + if SystemUtils.is_x86_64(): + return "x86_64" + elif SystemUtils.is_x86_32(): + return "x86_32" + elif SystemUtils.is_aarch64(): + return "Arm64" + elif SystemUtils.is_aarch(): + return "Arm32" + else: + return platform.machine() + @staticmethod def copy(src: Path, dest: Path) -> Tuple[int, str]: """