Add notification feature with permission handling and UI toggle

This commit is contained in:
kwaroran
2024-12-02 04:42:13 +09:00
parent 0e292bd690
commit 18ea5aff4e
4 changed files with 41 additions and 0 deletions

View File

@@ -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",
}

View File

@@ -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 @@
<Help key="betaMobileGUI"/>
</div>
<div class="flex items-center mt-2">
<Check bind:check={DBState.db.notification} name={language.notification} onChange={async (e) => {
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
}
}
}}/>
</div>
{#if DBState.db.showUnrecommended}
<div class="flex items-center mt-2">
<Check bind:check={DBState.db.useChatSticker} name={language.useChatSticker}/>

View File

@@ -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()

View File

@@ -848,6 +848,7 @@ export interface Database{
translateBeforeHTMLFormatting:boolean
autoTranslateCachedOnly:boolean
lightningRealmImport:boolean
notification: boolean
}
interface SeparateParameters{