Client App [Notification]

[+] feat(global.d.ts): add support for window.__TAURI__.notification methods
[+] feat(update.ts): add notification for new version availability
[+] fix(Cargo.toml): add tauri feature "notification-all" to enable notifications
[+] fix(tauri.conf.json): enable all notification features in tauri configuration
This commit is contained in:
H0llyW00dzZ 2023-10-03 08:08:11 +07:00
parent 144200e315
commit 64a17abfe2
No known key found for this signature in database
GPG Key ID: 05C7FFFC0845C930
4 changed files with 41 additions and 1 deletions

5
app/global.d.ts vendored
View File

@ -13,5 +13,10 @@ declare module "*.svg";
declare interface Window { declare interface Window {
__TAURI__?: { __TAURI__?: {
writeText(text: string): Promise<void>; writeText(text: string): Promise<void>;
notification:{
requestPermission(): Promise<Permission>;
isPermissionGranted(): Promise<boolean>;
sendNotification(options: string | Options): void;
};
}; };
} }

View File

@ -2,8 +2,10 @@ import { FETCH_COMMIT_URL, FETCH_TAG_URL, StoreKey } from "../constant";
import { api } from "../client/api"; import { api } from "../client/api";
import { getClientConfig } from "../config/client"; import { getClientConfig } from "../config/client";
import { createPersistStore } from "../utils/store"; import { createPersistStore } from "../utils/store";
import ChatGptIcon from "../icons/chatgpt.png";
const ONE_MINUTE = 60 * 1000; const ONE_MINUTE = 60 * 1000;
const isApp = !!getClientConfig()?.isApp;
function formatVersionDate(t: string) { function formatVersionDate(t: string) {
const d = new Date(+t); const d = new Date(+t);
@ -80,6 +82,33 @@ export const useUpdateStore = createPersistStore(
set(() => ({ set(() => ({
remoteVersion: remoteId, remoteVersion: remoteId,
})); }));
if (window.__TAURI__?.notification && isApp) {
// Check if notification permission is granted
await window.__TAURI__?.notification.isPermissionGranted().then((granted) => {
if (!granted) {
// Send a notification without waiting for permission (because we don't neeed a permisison once client is already click "check")
window.__TAURI__?.notification.sendNotification({
title: "ChatGPT Next Web",
body: `A new version (${remoteId}) is available.`,
icon: `${ChatGptIcon.src}`,
sound: "Default"
});
} else {
// Request permission to show notifications
window.__TAURI__?.notification.requestPermission().then((permission) => {
if (permission === 'granted') {
// Show a notification using Tauri
window.__TAURI__?.notification.sendNotification({
title: "ChatGPT Next Web",
body: `A new version (${remoteId}) is available.`,
icon: `${ChatGptIcon.src}`,
sound: "Default"
});
}
});
}
});
}
console.log("[Got Upstream] ", remoteId); console.log("[Got Upstream] ", remoteId);
} catch (error) { } catch (error) {
console.error("[Fetch Upstream Commit Id]", error); console.error("[Fetch Upstream Commit Id]", error);

View File

@ -17,7 +17,7 @@ tauri-build = { version = "1.3.0", features = [] }
[dependencies] [dependencies]
serde_json = "1.0" serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
tauri = { version = "1.3.0", features = ["clipboard-all", "dialog-all", "shell-open", "updater", "window-close", "window-hide", "window-maximize", "window-minimize", "window-set-icon", "window-set-ignore-cursor-events", "window-set-resizable", "window-show", "window-start-dragging", "window-unmaximize", "window-unminimize"] } tauri = { version = "1.3.0", features = ["notification-all", "fs-all", "clipboard-all", "dialog-all", "shell-open", "updater", "window-close", "window-hide", "window-maximize", "window-minimize", "window-set-icon", "window-set-ignore-cursor-events", "window-set-resizable", "window-show", "window-start-dragging", "window-unmaximize", "window-unminimize"] }
tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
[features] [features]

View File

@ -44,6 +44,12 @@
"startDragging": true, "startDragging": true,
"unmaximize": true, "unmaximize": true,
"unminimize": true "unminimize": true
},
"fs": {
"all": true
},
"notification": {
"all": true
} }
}, },
"bundle": { "bundle": {