fixed # 修复头像框资源位置错误的BUG

This commit is contained in:
2026-10-20 11:49:44 +08:00
parent 2b0fca8828
commit 92a3944e43
20 changed files with 754 additions and 74 deletions
+6 -1
View File
@@ -15,15 +15,20 @@ from zhenxun.utils.message import MessageUtils
from zhenxun.utils.platform import PlatformUtils
from .runtime import COMMANDS, Runtime
from .data_paths import data_directories
logger = logging.getLogger(__name__)
driver = get_driver()
data_dir, legacy_data_dir = data_directories(
DATA_PATH, getattr(driver.config, 'farm_preview_data_dir', None),
)
runtime = Runtime(
getattr(driver.config, "farm_preview_data_dir", DATA_PATH / "farm_preview"),
data_dir,
getattr(driver.config, "farm_preview_font", None),
getattr(driver.config, "farm_preview_deployment", "zhenxun-preview"),
str(getattr(driver.config, "farm_preview_image_format", "AUTO")).upper(),
font_dir=FONT_PATH,
legacy_data_dir=legacy_data_dir,
)
driver.on_startup(runtime.start)
driver.on_shutdown(runtime.close)
+30
View File
@@ -0,0 +1,30 @@
"""农场默认目录与旧预览目录的无覆盖迁移。"""
from pathlib import Path
def data_directories(base, configured=None):
if configured is not None:
return Path(configured), None
return Path(base) / 'farm_db', Path(base) / 'farm_preview'
def prepare_directory(target, legacy=None):
target = Path(target).absolute()
if legacy is not None:
legacy = Path(legacy).absolute()
if (target.name != 'farm_db' or legacy.name != 'farm_preview'
or target.parent != legacy.parent):
raise ValueError('Farm migration requires default sibling paths')
if target.is_symlink() or legacy.is_symlink():
raise ValueError('Farm migration does not follow directory links')
if (legacy / 'farm-preview.sqlite3').is_file():
if target.exists():
raise FileExistsError(
'farm_db already exists beside farm_preview; '
'select farm_preview_data_dir explicitly before startup'
)
legacy.rename(target)
return True
target.mkdir(parents=True, exist_ok=True)
return False
+6 -2
View File
@@ -12,6 +12,7 @@ from ._vendor.farm_core.storage import SCHEMA_VERSION
from ._vendor.farm_core.presentation import receipt_text, snapshot_text
from ._vendor.farm_render import FarmRenderer, RenderOptions, RenderService
from ._vendor.farm_render.seasons import season_for
from .data_paths import prepare_directory
logger = logging.getLogger(__name__)
COMMANDS = {
@@ -65,8 +66,9 @@ def operation_id(bot_id, platform, user_id, message_id, action):
class Runtime:
def __init__(self, data_dir, font_path=None, deployment="zhenxun-preview",
image_format="AUTO", *, font_dir=None):
image_format="AUTO", *, font_dir=None, legacy_data_dir=None):
self.data_dir = Path(data_dir).resolve()
self.legacy_data_dir = legacy_data_dir
self.font_path = font_path
self.font_dir = Path(font_dir or "resources/font")
self.deployment = deployment
@@ -80,7 +82,7 @@ class Runtime:
async def start(self):
if self.started:
return
self.data_dir.mkdir(parents=True, exist_ok=True)
migrated = prepare_directory(self.data_dir, self.legacy_data_dir)
self.log_handler = logging.FileHandler(
self.data_dir / "farm-preview.log", encoding="utf-8",
)
@@ -89,6 +91,8 @@ class Runtime:
))
logging.getLogger(__package__).setLevel(logging.INFO)
logging.getLogger(__package__).addHandler(self.log_handler)
if migrated:
logger.info('farm data directory migrated farm_preview -> farm_db')
try:
await self.store.initialize(catalogue=self.service.catalogue)
except Exception: