新增下载内核进度条以及github加速时节点发布地址按钮

This commit is contained in:
黑先森
2025-02-13 17:03:50 +08:00
parent 3fdcb2c642
commit 2a7f51ccde
6 changed files with 58 additions and 16 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
"private": true,
"author": "leizi97",
"description": "A simple network initiator based on Easytier",
"version": "1.4.0",
"version": "1.4.1",
"scripts": {
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
"build": "nuxt generate --dotenv env/.env.prod",
+34 -3
View File
@@ -437,8 +437,11 @@
>
<div>
<ElText>当前版本: {{ data.coreVersion || "-" }}</ElText>
<div v-if="data.update">
<ElProgress :percentage="progress"></ElProgress>
</div>
</div>
<div class="mt-[10px] pb-[5px]">
<div class="mt-[5px] pb-[5px]">
<ElText class="!mr-[10px]">选择一个内核版本安装</ElText>
<ElButton
:loading="coreManagementData.loading"
@@ -481,7 +484,13 @@
<ElInput
v-model="mainStore.githubFastUrl"
placeholder="请输入github加速地址"
></ElInput>
>
<template #append>
<ElTooltip content="github加速链接的发布地址,当前地址失效后,访问它获取最新的地址">
<ElButton @click="open('https://ghproxy.link/')">发布地址</ElButton>
</ElTooltip>
</template>
</ElInput>
<template #footer>
<div class="text-right">
<ElButton
@@ -682,7 +691,7 @@
</template>
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
import { listen } from "@tauri-apps/api/event";
import { listen, type UnlistenFn } from "@tauri-apps/api/event";
import { open, Command } from "@tauri-apps/plugin-shell";
import {
QuestionFilled,
@@ -1024,11 +1033,17 @@
// await getReleaseList();
};
let unlistenDownload: UnlistenFn | null = null;
let unlistenDownloadError: UnlistenFn | null = null;
let progress = ref<number>(0);
let size = 0;
const handleInstallCore = async () => {
try {
if (!coreManagementData.data) {
return ElMessage.error("请选择一个内核");
}
progress.value = 0;
size = 0;
data.update = true;
await getCoreVersion();
const [isNeedUpdate, downloadUrl, latestVersionFileName] = await checkUpdate();
@@ -1036,6 +1051,22 @@
if (isNeedUpdate) {
await reset();
// console.error(downloadUrl);
if (unlistenDownload) {
await unlistenDownload();
}
if (unlistenDownloadError) {
await unlistenDownloadError();
}
unlistenDownload = await listen<[number, number]>("download_core_progress", ({ payload }) => {
size += payload[0];
progress.value = Math.round((size / payload[1]) * 100);
});
unlistenDownloadError = await listen("download_core_progress_error", () => {
data.update = false;
progress.value = 0;
size = 0;
ElMessage.error("发生错误,请重试");
});
await invoke("download_easytier_zip", { download_url: downloadUrl, file_name: latestVersionFileName });
}
await getCoreVersion();
+1 -1
View File
@@ -1290,7 +1290,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
[[package]]
name = "easytier-game"
version = "1.4.0"
version = "1.4.1"
dependencies = [
"hashbrown 0.15.2",
"log",
+2 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "easytier-game"
version = "1.4.0"
version = "1.4.1"
homepage = "https://github.com/EasyTier/EasyTier"
repository = "https://github.com/EasyTier/EasytierGame"
description = "A simple network initiator based on Easytier"
@@ -47,6 +47,7 @@ tauri-plugin-dialog = "2.2.0"
# prost = "0.13"
# prost-types = "0.13"
hashbrown = "0.15.2"
# futures-util = "0.3"
[dependencies.windows]
version = "0.58.0"
+18 -8
View File
@@ -3,6 +3,7 @@ use planif::schedule::TaskScheduler as planIfTaskScheduler;
use planif::schedule_builder::{Action, ScheduleBuilder};
use planif::settings::{Duration, LogonType, PrincipalSettings, RunLevel};
use reqwest::{Client, Error};
// use futures_util::StreamExt;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fs::{self, File};
@@ -325,7 +326,7 @@ async fn get_route_by_cli() -> String {
}
#[tauri::command(rename_all = "snake_case")]
async fn download_easytier_zip(download_url: String, file_name: String) {
async fn download_easytier_zip(app_handle: tauri::AppHandle ,download_url: String, file_name: String) {
let cache_dir_path = get_tool_exe_path("\\easytier\\cache");
let cache_file_name = format!("{}\\{}", cache_dir_path, file_name);
let cache_file_name_path = path::Path::new(&cache_file_name);
@@ -335,12 +336,12 @@ async fn download_easytier_zip(download_url: String, file_name: String) {
}
let target = format!("{}", download_url);
let response = reqwest::get(target)
let mut response = reqwest::get(target)
.await
.expect("error to download easytier url");
let easytier_path = get_tool_exe_path("\\easytier");
let file_path = format!("{}\\{}", easytier_path, file_name);
println!("download easytier to {}", file_path);
// println!("download easytier to {}", file_path);
let easytier_dir = path::Path::new(&easytier_path);
if !easytier_dir.exists() {
@@ -354,11 +355,20 @@ async fn download_easytier_zip(download_url: String, file_name: String) {
Err(why) => panic!("couldn't create {}", why),
Ok(file) => file,
};
let content = response.bytes().await.expect("error to bytes easytier");
println!("下载完成,开始写入");
file.write_all(&content).expect("error to write easytier");
println!("写入完成");
let context_size: u64 = response.content_length().unwrap();
while let Some(item) = response.chunk().await.unwrap() {
match file.write_all(&item) {
Ok(_) => {
app_handle.emit("download_core_progress", [item.len() as u64, context_size]).expect("error to emit download_core_progress");
},Err(why) => {
log::error!("error to write file: {}", why);
app_handle.emit("download_core_progress_error", why.to_string()).expect("error to emit download_core_progress_error");
return
}
};
}
println!("下载完成");
unzip(path);
let cache_dir_path = path::Path::new(&cache_dir_path);
+2 -2
View File
@@ -1,7 +1,7 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "easytier-game",
"version": "1.4.0",
"version": "1.4.1",
"identifier": "com.tauri.easytier-game",
"build": {
@@ -12,7 +12,7 @@
"app": {
"windows": [
{
"title": "easytier-game 1.4.0",
"title": "easytier-game 1.4.1",
"label": "main",
"minWidth": 340,
"width": 340,