2024-12-10 19:49:11 +08:00
|
|
|
from pathlib import Path
|
2024-08-23 18:41:35 +08:00
|
|
|
import shutil
|
|
|
|
|
import zipfile
|
2024-08-24 19:32:52 +08:00
|
|
|
|
2024-08-23 18:41:35 +08:00
|
|
|
from nonebot.utils import run_sync
|
2024-08-24 19:32:52 +08:00
|
|
|
|
2024-08-23 18:41:35 +08:00
|
|
|
from zhenxun.services.log import logger
|
2024-09-16 20:08:42 +08:00
|
|
|
from zhenxun.utils.github_utils import GithubUtils
|
2024-12-10 19:49:11 +08:00
|
|
|
from zhenxun.utils.http_utils import AsyncHttpx
|
2024-09-08 09:38:55 +08:00
|
|
|
|
2024-12-19 09:51:31 +08:00
|
|
|
from ..config import PUBLIC_PATH, TMP_PATH, WEBUI_DIST_GITHUB_URL
|
|
|
|
|
|
2024-09-08 09:38:55 +08:00
|
|
|
COMMAND_NAME = "WebUI资源管理"
|
2024-08-23 18:41:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
async def update_webui_assets():
|
|
|
|
|
webui_assets_path = TMP_PATH / "webui_assets.zip"
|
2024-09-16 20:08:42 +08:00
|
|
|
download_url = await GithubUtils.parse_github_url(
|
2024-09-08 09:38:55 +08:00
|
|
|
WEBUI_DIST_GITHUB_URL
|
2024-09-16 20:08:42 +08:00
|
|
|
).get_archive_download_urls()
|
2025-06-16 09:11:41 +08:00
|
|
|
logger.info("开始下载 webui_assets 资源...", COMMAND_NAME)
|
2024-08-23 18:41:35 +08:00
|
|
|
if await AsyncHttpx.download_file(
|
2024-09-08 09:38:55 +08:00
|
|
|
download_url, webui_assets_path, follow_redirects=True
|
2024-08-23 18:41:35 +08:00
|
|
|
):
|
|
|
|
|
logger.info("下载 webui_assets 成功...", COMMAND_NAME)
|
2024-08-24 19:32:52 +08:00
|
|
|
return await _file_handle(webui_assets_path)
|
|
|
|
|
raise Exception("下载 webui_assets 失败", COMMAND_NAME)
|
2024-08-23 18:41:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@run_sync
|
|
|
|
|
def _file_handle(webui_assets_path: Path):
|
|
|
|
|
logger.debug("开始解压 webui_assets...", COMMAND_NAME)
|
|
|
|
|
if webui_assets_path.exists():
|
|
|
|
|
tf = zipfile.ZipFile(webui_assets_path)
|
|
|
|
|
tf.extractall(TMP_PATH)
|
|
|
|
|
logger.debug("解压 webui_assets 成功...", COMMAND_NAME)
|
|
|
|
|
else:
|
2024-08-24 19:32:52 +08:00
|
|
|
raise Exception("解压 webui_assets 失败,文件不存在...", COMMAND_NAME)
|
2024-09-10 20:17:09 +08:00
|
|
|
download_file_path = next(f for f in TMP_PATH.iterdir() if f.is_dir())
|
2024-08-23 18:41:35 +08:00
|
|
|
shutil.rmtree(PUBLIC_PATH, ignore_errors=True)
|
|
|
|
|
shutil.copytree(download_file_path / "dist", PUBLIC_PATH, dirs_exist_ok=True)
|
|
|
|
|
logger.debug("复制 webui_assets 成功...", COMMAND_NAME)
|
|
|
|
|
shutil.rmtree(TMP_PATH, ignore_errors=True)
|
2024-09-25 19:41:45 +08:00
|
|
|
return [x.name for x in PUBLIC_PATH.iterdir() if x.is_dir()]
|