This commit is contained in:
2025-10-29 22:20:21 +08:00
commit 32b3b7b29a
111 changed files with 344425 additions and 0 deletions

202
app/core/utils/config.py Normal file
View File

@@ -0,0 +1,202 @@
# 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 ""
@property
def userEmail(self):
if self.userData:
return self.userData["data"].get("user_name", "")
else:
return ""
@property
def userGroup(self):
if self.userData:
return self.userData.get("data", {}).get("group", {}).get("name", "")
else:
return ""
@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()