# coding:utf-8 import sys from datetime import datetime from PyQt6.QtGui import QPixmap from qfluentwidgets import ( BoolValidator, ConfigItem, ConfigSerializer, OptionsConfigItem, OptionsValidator, qconfig, QConfig, FolderValidator, Theme, setThemeColor, ) from .encryption import encrypt from .setting import CONFIG_FILE, DOWNLOAD_FOLDER def isWin11(): return sys.platform == "win32" and sys.getwindowsversion().build >= 22000 class EncrpytionSerializer(ConfigSerializer): """QColor serializer""" def serialize(self, value): return encrypt.encrypt(value) def deserialize(self, value): return encrypt.decrypt(value) class Config(QConfig): """Config of application""" # TODO: ADD YOUR CONFIG GROUP HERE # register rememberMe = ConfigItem( "UmVnaXN0ZXI=", "UmVtZW1iZXJNZQ==", True, serializer=EncrpytionSerializer() ) email = ConfigItem( "UmVnaXN0ZXI=", "RW1haWw=", "", serializer=EncrpytionSerializer() ) activationCode = ConfigItem( "UmVnaXN0ZXI=", "QWN0aXZhdGlvbkNvZGU=", "", serializer=EncrpytionSerializer() ) # main window micaEnabled = ConfigItem("MainWindow", "MicaEnabled", isWin11(), BoolValidator()) dpiScale = OptionsConfigItem( "MainWindow", "DpiScale", "Auto", OptionsValidator([1, 1.25, 1.5, 1.75, 2, "Auto"]), restart=True, ) # software update checkUpdateAtStartUp = ConfigItem( "Update", "CheckUpdateAtStartUp", True, BoolValidator() ) # bg customBackground = ConfigItem( "Background", "CustomBackground", "app\\resource\\images\\bg0.png", ) customOpactity = ConfigItem("Background", "Opactity", 0.2) downloadSavePath = ConfigItem( "Download", "SavePath", DOWNLOAD_FOLDER, validator=FolderValidator() ) # language language = OptionsConfigItem( "General", "Language", "zh", OptionsValidator(["zh", "en"]), restart=False ) class UserConfig: def __init__(self, userData): self.userData = userData self.token = None self.avaterPixmap = None @property def userId(self): if self.userData: return self.userData["data"].get("id", "") else: return None @property def userAvatarURL(self): if self.userData and "avatar" in self.userData["data"]: return self.userData["data"].get("avatar", "") else: return "" @property def userName(self): if self.userData: return self.userData["data"].get("nickname", "") else: return None @property def userEmail(self): if self.userData: return self.userData["data"].get("email", "") else: return None @property def userGroup(self): if self.userData: return self.userData.get("data", {}).get("group", {}).get("name", "") else: return None # @property # def userScore(self): # if self.userData: # return str(self.userData["data"].get("score", 0)) @property def userCreatedTime(self): if self.userData: return self.format_date(self.userData["data"].get("created_at", "")) def setUserAvatarPixmap(self, avaterPixmap): self.avaterPixmap: QPixmap = avaterPixmap def returnAvatarPixmap(self): return self.avaterPixmap def setToken(self, token): """设置JWT token""" self.token = token def getToken(self): """获取JWT token""" return self.token def format_date(self, date_str): """格式化日期时间""" try: # 处理带小数秒的情况 if "." in date_str: # 分割日期和小数秒部分 date_part, fractional_part = date_str.split(".", 1) # 去除末尾的"Z"并截取前6位小数 fractional_sec = fractional_part.rstrip("Z")[:6] # 重新组合日期字符串 normalized_date_str = f"{date_part}.{fractional_sec}Z" date_time = datetime.strptime( normalized_date_str, "%Y-%m-%dT%H:%M:%S.%fZ" ) else: # 处理没有小数秒的情况 date_time = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%SZ") except ValueError: # 如果所有格式都失败,返回原始字符串 return date_str return date_time.strftime("%Y-%m-%d %H:%M:%S") class PolicyConfig: def __init__(self): self.currentPolicy = {} self.currentPath = "/" def returnPolicy(self): return self.currentPolicy def setPolicy(self, policy): self.currentPolicy = policy def setCurrentPath(self, path): self.currentPath = path def returnCurrentPath(self): return self.currentPath cfg = Config() cfg.themeMode.value = Theme.AUTO # 设置默认主题色为蓝色 (使用RGB值) setThemeColor('#2F80ED') # 这是一个标准的蓝色RGB值 qconfig.load(str(CONFIG_FILE.absolute()), cfg) userConfig = UserConfig(None) policyConfig = PolicyConfig()