diff --git a/src/lang/en.ts b/src/lang/en.ts index bc0d11a6..ff25a193 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -813,4 +813,6 @@ export const languageEnglish = { retranslate: "Retranslate", loading: "Loading", autoTranslateCachedOnly: "Auto Translate Cached Only", + notification: "Notification", + permissionDenied: "Permission Denied by Your Browser or OS", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/DisplaySettings.svelte b/src/lib/Setting/Pages/DisplaySettings.svelte index 4af86f67..1d7ee9dd 100644 --- a/src/lib/Setting/Pages/DisplaySettings.svelte +++ b/src/lib/Setting/Pages/DisplaySettings.svelte @@ -18,6 +18,7 @@ import Arcodion from "src/lib/UI/Arcodion.svelte"; import Button from "src/lib/UI/GUI/Button.svelte"; import { CustomGUISettingMenuStore } from "src/ts/stores.svelte"; + import { alertError } from "src/ts/alert"; const onSchemeInputChange = (e:Event) => { changeColorScheme((e.target as HTMLInputElement).value) @@ -362,6 +363,27 @@ +
+ { + let hasPermission = {state: 'denied'} + try { + hasPermission = await navigator.permissions.query({name: 'notifications'}) + } catch (error) { + //for browsers that do not support permissions api + } + if(!DBState.db.notification){ + return + } + if(hasPermission.state === 'denied'){ + const permission = await Notification.requestPermission() + if(permission === 'denied'){ + alertError(language.permissionDenied) + DBState.db.notification = false + } + } + }}/> +
+ {#if DBState.db.showUnrecommended}
diff --git a/src/ts/process/index.svelte.ts b/src/ts/process/index.svelte.ts index b6f73e64..4d22d63b 100644 --- a/src/ts/process/index.svelte.ts +++ b/src/ts/process/index.svelte.ts @@ -1330,6 +1330,22 @@ export async function sendChat(chatProcessIndex = -1,arg:{ }) } + if(DBState.db.notification){ + try { + const permission = await Notification.requestPermission() + if(permission === 'granted'){ + const noti = new Notification('RisuAI', { + body: result + }) + noti.onclick = () => { + window.focus() + } + } + } catch (error) { + + } + } + chatProcessStage.set(4) peerSync() diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index ec6de12c..9003f5fe 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -848,6 +848,7 @@ export interface Database{ translateBeforeHTMLFormatting:boolean autoTranslateCachedOnly:boolean lightningRealmImport:boolean + notification: boolean } interface SeparateParameters{