client app tauri updater #2966

This commit is contained in:
lloydzhou 2024-10-11 11:29:22 +08:00
parent c5074f0aa4
commit 2eebfcf6fe
6 changed files with 48 additions and 4 deletions

View File

@ -49,7 +49,7 @@ import Locale, {
changeLang, changeLang,
getLang, getLang,
} from "../locales"; } from "../locales";
import { copyToClipboard } from "../utils"; import { copyToClipboard, clientUpdate } from "../utils";
import Link from "next/link"; import Link from "next/link";
import { import {
Anthropic, Anthropic,
@ -1357,9 +1357,17 @@ export function Settings() {
{checkingUpdate ? ( {checkingUpdate ? (
<LoadingIcon /> <LoadingIcon />
) : hasNewVersion ? ( ) : hasNewVersion ? (
<Link href={updateUrl} target="_blank" className="link"> clientConfig?.isApp ? (
{Locale.Settings.Update.GoToUpdate} <IconButton
</Link> icon={<ResetIcon></ResetIcon>}
text={Locale.Settings.Update.GoToUpdate}
onClick={() => clientUpdate()}
/>
) : (
<Link href={updateUrl} target="_blank" className="link">
{Locale.Settings.Update.GoToUpdate}
</Link>
)
) : ( ) : (
<IconButton <IconButton
icon={<ResetIcon></ResetIcon>} icon={<ResetIcon></ResetIcon>}

7
app/global.d.ts vendored
View File

@ -26,6 +26,13 @@ declare interface Window {
isPermissionGranted(): Promise<boolean>; isPermissionGranted(): Promise<boolean>;
sendNotification(options: string | Options): void; sendNotification(options: string | Options): void;
}; };
updater: {
checkUpdate(): Promise<UpdateResult>;
installUpdate(): Promise<void>;
onUpdaterEvent(
handler: (status: UpdateStatusResult) => void,
): Promise<UnlistenFn>;
};
http: { http: {
fetch<T>( fetch<T>(
url: string, url: string,

View File

@ -205,6 +205,8 @@ const cn = {
IsChecking: "正在检查更新...", IsChecking: "正在检查更新...",
FoundUpdate: (x: string) => `发现新版本:${x}`, FoundUpdate: (x: string) => `发现新版本:${x}`,
GoToUpdate: "前往更新", GoToUpdate: "前往更新",
Success: "Update Succesfull.",
Failed: "Update Failed.",
}, },
SendKey: "发送键", SendKey: "发送键",
Theme: "主题", Theme: "主题",

View File

@ -207,6 +207,8 @@ const en: LocaleType = {
IsChecking: "Checking update...", IsChecking: "Checking update...",
FoundUpdate: (x: string) => `Found new version: ${x}`, FoundUpdate: (x: string) => `Found new version: ${x}`,
GoToUpdate: "Update", GoToUpdate: "Update",
Success: "Update Succesfull.",
Failed: "Update Failed.",
}, },
SendKey: "Send Key", SendKey: "Send Key",
Theme: "Theme", Theme: "Theme",

View File

@ -6,6 +6,7 @@ import {
} from "../constant"; } from "../constant";
import { getClientConfig } from "../config/client"; import { getClientConfig } from "../config/client";
import { createPersistStore } from "../utils/store"; import { createPersistStore } from "../utils/store";
import { clientUpdate } from "../utils";
import ChatGptIcon from "../icons/chatgpt.png"; import ChatGptIcon from "../icons/chatgpt.png";
import Locale from "../locales"; import Locale from "../locales";
import { ClientApi } from "../client/api"; import { ClientApi } from "../client/api";
@ -119,6 +120,7 @@ export const useUpdateStore = createPersistStore(
icon: `${ChatGptIcon.src}`, icon: `${ChatGptIcon.src}`,
sound: "Default", sound: "Default",
}); });
clientUpdate();
} }
} }
}); });

View File

@ -386,3 +386,26 @@ export function getOperationId(operation: {
`${operation.method.toUpperCase()}${operation.path.replaceAll("/", "_")}` `${operation.method.toUpperCase()}${operation.path.replaceAll("/", "_")}`
); );
} }
export function clientUpdate() {
// this a wild for updating client app
return window.__TAURI__?.updater
.checkUpdate()
.then((updateResult) => {
if (updateResult.shouldUpdate) {
window.__TAURI__?.updater
.installUpdate()
.then((result) => {
showToast(Locale.Settings.Update.Success);
})
.catch((e) => {
console.error("[Install Update Error]", e);
showToast(Locale.Settings.Update.Failed);
});
}
})
.catch((e) => {
console.error("[Check Update Error]", e);
showToast(Locale.Settings.Update.Failed);
});
}