完善更新功能
This commit is contained in:
parent
1a49e2f8d5
commit
f447436930
27
data/update.json
Normal file
27
data/update.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"version": "1.0.8",
|
||||
"time": 1775118545494,
|
||||
"data": {
|
||||
"toonflow": [
|
||||
{
|
||||
"type": "zip",
|
||||
"url": "https://toonflow.oss-cn-beijing.aliyuncs.com/latest/latest.zip"
|
||||
},
|
||||
{
|
||||
"type": "windows",
|
||||
"url": "https://toonflow.oss-cn-beijing.aliyuncs.com/latest/latest.exe"
|
||||
},
|
||||
{
|
||||
"type": "linux",
|
||||
"url": "https://toonflow.oss-cn-beijing.aliyuncs.com/latest/latest.AppImage"
|
||||
},
|
||||
{
|
||||
"type": "macos",
|
||||
"url": "https://toonflow.oss-cn-beijing.aliyuncs.com/latest/latest.dmg"
|
||||
}
|
||||
],
|
||||
"github": [],
|
||||
"atomgit": [],
|
||||
"gitee": []
|
||||
}
|
||||
}
|
||||
BIN
docs/g-star.png
Normal file
BIN
docs/g-star.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 201 KiB |
@ -13,19 +13,16 @@ declare const __APP_VERSION__: string | undefined;
|
||||
* 将 extraResources 中的 data 目录复制到用户数据目录(跳过已存在的文件,保留用户修改)
|
||||
*/
|
||||
|
||||
function getVersionFromFile(filePath: string): string | null {
|
||||
function getVersionFromUpdateJson(filePath: string): string | null {
|
||||
try {
|
||||
if (fs.existsSync(filePath)) {
|
||||
return fs.readFileSync(filePath, "utf8").trim();
|
||||
const data = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
||||
return data.version ?? null;
|
||||
}
|
||||
} catch {}
|
||||
return null;
|
||||
}
|
||||
|
||||
function writeVersionToFile(filePath: string, version: string): void {
|
||||
fs.writeFileSync(filePath, version, { encoding: "utf8" });
|
||||
}
|
||||
|
||||
function copyDirForce(src: string, dest: string): void {
|
||||
if (!fs.existsSync(src)) return;
|
||||
if (fs.existsSync(dest)) {
|
||||
@ -37,14 +34,13 @@ function copyDirForce(src: string, dest: string): void {
|
||||
function initializeData(): void {
|
||||
const srcDir = path.join(process.resourcesPath, "data");
|
||||
const destDir = path.join(app.getPath("userData"), "data");
|
||||
const versionFile = path.join(destDir, "version.txt");
|
||||
const updateJsonFile = path.join(destDir, "update.json");
|
||||
const currentVersion = typeof __APP_VERSION__ !== "undefined" ? __APP_VERSION__ : "0.0.0";
|
||||
const userVersion = getVersionFromFile(versionFile);
|
||||
const userVersion = getVersionFromUpdateJson(updateJsonFile);
|
||||
|
||||
// 首次安装或无version.txt,直接全量拷贝
|
||||
// 首次安装或无update.json,直接全量拷贝
|
||||
if (!fs.existsSync(destDir) || !userVersion) {
|
||||
copyDirRecursive(srcDir, destDir);
|
||||
writeVersionToFile(versionFile, currentVersion);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -52,7 +48,6 @@ function initializeData(): void {
|
||||
if (userVersion !== currentVersion) {
|
||||
copyDirForce(path.join(srcDir, "serve"), path.join(destDir, "serve"));
|
||||
copyDirForce(path.join(srcDir, "web"), path.join(destDir, "web"));
|
||||
writeVersionToFile(versionFile, currentVersion);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
132
src/router.ts
132
src/router.ts
@ -1,4 +1,4 @@
|
||||
// @routes-hash b96beb71b18fbc98620917e465530e0c
|
||||
// @routes-hash 6fee4152cf981edb9229a3dcfafcb1a7
|
||||
import { Express } from "express";
|
||||
|
||||
import route1 from "./routes/agents/clearMemory";
|
||||
@ -99,39 +99,38 @@ import route95 from "./routes/scriptAgent/getPlanData";
|
||||
import route96 from "./routes/scriptAgent/setPlanData";
|
||||
import route97 from "./routes/scriptAgent/updateData";
|
||||
import route98 from "./routes/setting/about/checkUpdate";
|
||||
import route99 from "./routes/setting/about/downloadApp copy";
|
||||
import route100 from "./routes/setting/about/downloadApp";
|
||||
import route101 from "./routes/setting/agentDeploy/agentSetKey";
|
||||
import route102 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||
import route103 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||
import route104 from "./routes/setting/dbConfig/clearData";
|
||||
import route105 from "./routes/setting/dev/getSwitchAiDevTool";
|
||||
import route106 from "./routes/setting/dev/updateSwitchAiDevTool";
|
||||
import route107 from "./routes/setting/fileManagement/openFolder";
|
||||
import route108 from "./routes/setting/getTextModel";
|
||||
import route109 from "./routes/setting/loginConfig/getUser";
|
||||
import route110 from "./routes/setting/loginConfig/updateUserPwd";
|
||||
import route111 from "./routes/setting/memoryConfig/delAllMemory";
|
||||
import route112 from "./routes/setting/memoryConfig/getMemory";
|
||||
import route113 from "./routes/setting/memoryConfig/sureMemory";
|
||||
import route114 from "./routes/setting/promptManage/getPrompt";
|
||||
import route115 from "./routes/setting/promptManage/updatePrompt";
|
||||
import route116 from "./routes/setting/skillManagement/getSkillContent";
|
||||
import route117 from "./routes/setting/skillManagement/getSkillList";
|
||||
import route118 from "./routes/setting/skillManagement/saveSkillContent";
|
||||
import route119 from "./routes/setting/vendorConfig/addVendor";
|
||||
import route120 from "./routes/setting/vendorConfig/deleteVendor";
|
||||
import route121 from "./routes/setting/vendorConfig/enableVendor";
|
||||
import route122 from "./routes/setting/vendorConfig/getCodeByLink";
|
||||
import route123 from "./routes/setting/vendorConfig/getVendorList";
|
||||
import route124 from "./routes/setting/vendorConfig/modelTest";
|
||||
import route125 from "./routes/setting/vendorConfig/updateCode";
|
||||
import route126 from "./routes/setting/vendorConfig/updateVendor";
|
||||
import route127 from "./routes/task/getProject";
|
||||
import route128 from "./routes/task/getTaskApi";
|
||||
import route129 from "./routes/task/getTaskCategories";
|
||||
import route130 from "./routes/task/taskDetails";
|
||||
import route131 from "./routes/test/test";
|
||||
import route99 from "./routes/setting/about/downloadApp";
|
||||
import route100 from "./routes/setting/agentDeploy/agentSetKey";
|
||||
import route101 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||
import route102 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||
import route103 from "./routes/setting/dbConfig/clearData";
|
||||
import route104 from "./routes/setting/dev/getSwitchAiDevTool";
|
||||
import route105 from "./routes/setting/dev/updateSwitchAiDevTool";
|
||||
import route106 from "./routes/setting/fileManagement/openFolder";
|
||||
import route107 from "./routes/setting/getTextModel";
|
||||
import route108 from "./routes/setting/loginConfig/getUser";
|
||||
import route109 from "./routes/setting/loginConfig/updateUserPwd";
|
||||
import route110 from "./routes/setting/memoryConfig/delAllMemory";
|
||||
import route111 from "./routes/setting/memoryConfig/getMemory";
|
||||
import route112 from "./routes/setting/memoryConfig/sureMemory";
|
||||
import route113 from "./routes/setting/promptManage/getPrompt";
|
||||
import route114 from "./routes/setting/promptManage/updatePrompt";
|
||||
import route115 from "./routes/setting/skillManagement/getSkillContent";
|
||||
import route116 from "./routes/setting/skillManagement/getSkillList";
|
||||
import route117 from "./routes/setting/skillManagement/saveSkillContent";
|
||||
import route118 from "./routes/setting/vendorConfig/addVendor";
|
||||
import route119 from "./routes/setting/vendorConfig/deleteVendor";
|
||||
import route120 from "./routes/setting/vendorConfig/enableVendor";
|
||||
import route121 from "./routes/setting/vendorConfig/getCodeByLink";
|
||||
import route122 from "./routes/setting/vendorConfig/getVendorList";
|
||||
import route123 from "./routes/setting/vendorConfig/modelTest";
|
||||
import route124 from "./routes/setting/vendorConfig/updateCode";
|
||||
import route125 from "./routes/setting/vendorConfig/updateVendor";
|
||||
import route126 from "./routes/task/getProject";
|
||||
import route127 from "./routes/task/getTaskApi";
|
||||
import route128 from "./routes/task/getTaskCategories";
|
||||
import route129 from "./routes/task/taskDetails";
|
||||
import route130 from "./routes/test/test";
|
||||
|
||||
export default async (app: Express) => {
|
||||
app.use("/api/agents/clearMemory", route1);
|
||||
@ -232,37 +231,36 @@ export default async (app: Express) => {
|
||||
app.use("/api/scriptAgent/setPlanData", route96);
|
||||
app.use("/api/scriptAgent/updateData", route97);
|
||||
app.use("/api/setting/about/checkUpdate", route98);
|
||||
app.use("/api/setting/about/downloadApp copy", route99);
|
||||
app.use("/api/setting/about/downloadApp", route100);
|
||||
app.use("/api/setting/agentDeploy/agentSetKey", route101);
|
||||
app.use("/api/setting/agentDeploy/deployAgentModel", route102);
|
||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route103);
|
||||
app.use("/api/setting/dbConfig/clearData", route104);
|
||||
app.use("/api/setting/dev/getSwitchAiDevTool", route105);
|
||||
app.use("/api/setting/dev/updateSwitchAiDevTool", route106);
|
||||
app.use("/api/setting/fileManagement/openFolder", route107);
|
||||
app.use("/api/setting/getTextModel", route108);
|
||||
app.use("/api/setting/loginConfig/getUser", route109);
|
||||
app.use("/api/setting/loginConfig/updateUserPwd", route110);
|
||||
app.use("/api/setting/memoryConfig/delAllMemory", route111);
|
||||
app.use("/api/setting/memoryConfig/getMemory", route112);
|
||||
app.use("/api/setting/memoryConfig/sureMemory", route113);
|
||||
app.use("/api/setting/promptManage/getPrompt", route114);
|
||||
app.use("/api/setting/promptManage/updatePrompt", route115);
|
||||
app.use("/api/setting/skillManagement/getSkillContent", route116);
|
||||
app.use("/api/setting/skillManagement/getSkillList", route117);
|
||||
app.use("/api/setting/skillManagement/saveSkillContent", route118);
|
||||
app.use("/api/setting/vendorConfig/addVendor", route119);
|
||||
app.use("/api/setting/vendorConfig/deleteVendor", route120);
|
||||
app.use("/api/setting/vendorConfig/enableVendor", route121);
|
||||
app.use("/api/setting/vendorConfig/getCodeByLink", route122);
|
||||
app.use("/api/setting/vendorConfig/getVendorList", route123);
|
||||
app.use("/api/setting/vendorConfig/modelTest", route124);
|
||||
app.use("/api/setting/vendorConfig/updateCode", route125);
|
||||
app.use("/api/setting/vendorConfig/updateVendor", route126);
|
||||
app.use("/api/task/getProject", route127);
|
||||
app.use("/api/task/getTaskApi", route128);
|
||||
app.use("/api/task/getTaskCategories", route129);
|
||||
app.use("/api/task/taskDetails", route130);
|
||||
app.use("/api/test/test", route131);
|
||||
app.use("/api/setting/about/downloadApp", route99);
|
||||
app.use("/api/setting/agentDeploy/agentSetKey", route100);
|
||||
app.use("/api/setting/agentDeploy/deployAgentModel", route101);
|
||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route102);
|
||||
app.use("/api/setting/dbConfig/clearData", route103);
|
||||
app.use("/api/setting/dev/getSwitchAiDevTool", route104);
|
||||
app.use("/api/setting/dev/updateSwitchAiDevTool", route105);
|
||||
app.use("/api/setting/fileManagement/openFolder", route106);
|
||||
app.use("/api/setting/getTextModel", route107);
|
||||
app.use("/api/setting/loginConfig/getUser", route108);
|
||||
app.use("/api/setting/loginConfig/updateUserPwd", route109);
|
||||
app.use("/api/setting/memoryConfig/delAllMemory", route110);
|
||||
app.use("/api/setting/memoryConfig/getMemory", route111);
|
||||
app.use("/api/setting/memoryConfig/sureMemory", route112);
|
||||
app.use("/api/setting/promptManage/getPrompt", route113);
|
||||
app.use("/api/setting/promptManage/updatePrompt", route114);
|
||||
app.use("/api/setting/skillManagement/getSkillContent", route115);
|
||||
app.use("/api/setting/skillManagement/getSkillList", route116);
|
||||
app.use("/api/setting/skillManagement/saveSkillContent", route117);
|
||||
app.use("/api/setting/vendorConfig/addVendor", route118);
|
||||
app.use("/api/setting/vendorConfig/deleteVendor", route119);
|
||||
app.use("/api/setting/vendorConfig/enableVendor", route120);
|
||||
app.use("/api/setting/vendorConfig/getCodeByLink", route121);
|
||||
app.use("/api/setting/vendorConfig/getVendorList", route122);
|
||||
app.use("/api/setting/vendorConfig/modelTest", route123);
|
||||
app.use("/api/setting/vendorConfig/updateCode", route124);
|
||||
app.use("/api/setting/vendorConfig/updateVendor", route125);
|
||||
app.use("/api/task/getProject", route126);
|
||||
app.use("/api/task/getTaskApi", route127);
|
||||
app.use("/api/task/getTaskCategories", route128);
|
||||
app.use("/api/task/taskDetails", route129);
|
||||
app.use("/api/test/test", route130);
|
||||
}
|
||||
|
||||
@ -27,16 +27,14 @@ export default router.post(
|
||||
async (req, res) => {
|
||||
const { source } = req.body;
|
||||
|
||||
const getUrl: any = {
|
||||
toonflow: "http://localhost:5173/update.json",
|
||||
github: "https://api.github.com/repos/toonflow/toonflow/releases/latest",
|
||||
gitee: "https://gitee.com/api/v5/repos/toonflow/toonflow/releases/latest",
|
||||
atomgit: "https://api.github.com/repos/atomgit/atomgit/releases/latest",
|
||||
};
|
||||
const getUrl = "https://toonflow.oss-cn-beijing.aliyuncs.com/update.json";
|
||||
|
||||
const vsersion = await fetch(getUrl[source]).then((res) => res.json());
|
||||
if (!vsersion) return res.status(400).send(error("无法获取版本信息"));
|
||||
const { version: tagger, time, data } = vsersion;
|
||||
const versionInfo = await fetch(getUrl).then((res) => res.json());
|
||||
if (!versionInfo) return res.status(400).send(error("无法获取版本信息"));
|
||||
const { version: tagger, time, data } = versionInfo;
|
||||
|
||||
const sourceData = data[source];
|
||||
if (!sourceData) return res.status(400).send(error("无法获取该源的下载信息"));
|
||||
|
||||
const platformType: Record<string, string> = {
|
||||
win32: "windows",
|
||||
@ -44,22 +42,25 @@ export default router.post(
|
||||
linux: "linux",
|
||||
};
|
||||
|
||||
const zipItem = data.find((d: any) => d.type === "zip");
|
||||
const installerItem = data.find((d: any) => d.type === platformType[process.platform]);
|
||||
const zipItem = sourceData.find((d: any) => d.type === "zip");
|
||||
const installerItem = sourceData.find((d: any) => d.type === platformType[process.platform]);
|
||||
|
||||
const taggerList = tagger.split(".").map(Number);
|
||||
const currentVersionList = APP_VERSION.split(".").map(Number);
|
||||
//对比Major
|
||||
if (taggerList[0] > currentVersionList[0]) {
|
||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true, time, url: installerItem?.url }));
|
||||
if (!installerItem) return res.status(400).send(error("该源暂无适用于当前系统的安装包"));
|
||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true, time, url: installerItem.url }));
|
||||
}
|
||||
//对比Minor
|
||||
if (taggerList[1] > currentVersionList[1]) {
|
||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true, time, url: installerItem?.url }));
|
||||
if (!installerItem) return res.status(400).send(error("该源暂无适用于当前系统的安装包"));
|
||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true, time, url: installerItem.url }));
|
||||
}
|
||||
//Patch
|
||||
if (taggerList[2] > currentVersionList[2]) {
|
||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: false, time, url: zipItem?.url }));
|
||||
if (!zipItem) return res.status(400).send(error("该源暂无增量更新包"));
|
||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: false, time, url: zipItem.url }));
|
||||
}
|
||||
return res.status(200).send(success({ needUpdate: false, latestVersion: tagger, reinstall: false, time }));
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user