添加更新服务器选项

This commit is contained in:
zhbaor 2024-08-09 10:01:01 +08:00
parent dd4614295b
commit 40a0c230a8
4 changed files with 59 additions and 6 deletions

View file

@ -108,6 +108,8 @@ class ExtraPart(ConfModel):
"检查更新"
waiting_scene: WaitingSceneConf
"等待时间"
update_server: str = "https://mower.zhaozuohong.vip"
"更新服务器"
class LongTaskPart(ConfModel):

View file

@ -2,14 +2,20 @@ import os
import sys
from datetime import datetime, timedelta
from importlib import reload
from io import BytesIO
from shutil import rmtree
from time import mktime
from zipfile import ZipFile
import requests
from htmllistparse import fetch_listing
from arknights_mower.utils import config
from arknights_mower.utils.image import loadimg
from arknights_mower.utils.log import logger
from arknights_mower.utils.path import get_path
extract_path = get_path("@install/tmp/hot_update")
mirror = "https://mower.zhaozuohong.vip"
sign_in = None
navigation = None
@ -37,10 +43,47 @@ def get_listing():
last_time, listing = last_listing
if last_time and datetime.now() - last_time < timedelta(minutes=10):
return listing
cwd, listing = fetch_listing(mirror)
cwd, listing = fetch_listing(config.conf.update_server)
last_listing = datetime.now(), listing
return listing
def update():
load_module(False)
global last_update
if last_update and datetime.now() - last_update < timedelta(minutes=30):
logger.info("跳过热更新检查")
load_module(False)
return
logger.info("检查热更新资源")
listing = get_listing()
filename = "hot_update.zip"
entry = next(i for i in listing if i.name == filename)
remote_time = datetime.fromtimestamp(mktime(entry.modified))
download_update = True
if extract_path.exists():
local_time = datetime.fromtimestamp(os.path.getctime(extract_path))
if local_time > remote_time:
download_update = False
else:
rmtree(extract_path)
if download_update:
logger.info("开始下载热更新资源")
retry_times = 3
for i in range(retry_times):
try:
r = requests.get(f"{config.conf.update_server}/{filename}")
ZipFile(BytesIO(r.content)).extractall(extract_path)
break
except Exception as e:
logger.exception(f"热更新出错:{e}")
if i >= retry_times:
logger.error("热更新失败!")
return
logger.info("热更新成功")
else:
logger.info("本地资源已是最新")
last_update = datetime.now()
load_module(download_update)

View file

@ -41,7 +41,8 @@ const {
maa_gap,
custom_screenshot,
check_for_updates,
waiting_scene
waiting_scene,
update_server
} = storeToRefs(config_store)
const { operators } = storeToRefs(plan_store)
@ -404,6 +405,9 @@ const scene_name = {
<template #suffix>小时</template>
</n-input-number>
</n-form-item>
<n-form-item label="更新服务器">
<n-input v-model:value="update_server" />
</n-form-item>
</n-form>
</n-card>
</div>

View file

@ -78,6 +78,7 @@ export const useConfigStore = defineStore('config', () => {
const notification_level = ref('INFO')
const waiting_scene = ref({})
const exipring_medicine_on_weekend = ref(false)
const update_server = ref("")
async function load_shop() {
const response = await axios.get(`${import.meta.env.VITE_HTTP_URL}/shop`)
@ -171,6 +172,7 @@ export const useConfigStore = defineStore('config', () => {
notification_level.value = response.data.notification_level
waiting_scene.value = response.data.waiting_scene
exipring_medicine_on_weekend.value = response.data.exipring_medicine_on_weekend
update_server.value = response.data.update_server
}
function build_config() {
@ -256,7 +258,8 @@ export const useConfigStore = defineStore('config', () => {
check_for_updates: check_for_updates.value,
notification_level: notification_level.value,
waiting_scene: waiting_scene.value,
exipring_medicine_on_weekend: exipring_medicine_on_weekend.value
exipring_medicine_on_weekend: exipring_medicine_on_weekend.value,
update_server: update_server.value
}
}
@ -345,6 +348,7 @@ export const useConfigStore = defineStore('config', () => {
check_for_updates,
notification_level,
waiting_scene,
exipring_medicine_on_weekend
exipring_medicine_on_weekend,
update_server
}
})