diff options
Diffstat (limited to 'frontend')
| -rw-r--r-- | frontend/package.json | 2 | ||||
| -rw-r--r-- | frontend/pnpm-lock.yaml | 8 | ||||
| -rw-r--r-- | frontend/src/toaster.tsx | 35 |
3 files changed, 32 insertions, 13 deletions
diff --git a/frontend/package.json b/frontend/package.json index 4bb4bc3a..6ca1d017 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -41,7 +41,7 @@ } }, "dependencies": { - "decky-frontend-lib": "^3.7.14", + "decky-frontend-lib": "^3.14.0", "react-file-icon": "^1.2.0", "react-icons": "^4.4.0", "react-markdown": "^8.0.3", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index cf33748b..d2d0f7ac 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -10,7 +10,7 @@ specifiers: '@types/react-file-icon': ^1.0.1 '@types/react-router': 5.1.18 '@types/webpack': ^5.28.0 - decky-frontend-lib: ^3.7.14 + decky-frontend-lib: ^3.14.0 husky: ^8.0.1 import-sort-style-module: ^6.0.0 inquirer: ^8.2.4 @@ -30,7 +30,7 @@ specifiers: typescript: ^4.7.4 dependencies: - decky-frontend-lib: 3.7.14 + decky-frontend-lib: 3.14.0 react-file-icon: 1.2.0_wcqkhtmu7mswc6yz4uyexck3ty react-icons: 4.4.0_react@16.14.0 react-markdown: 8.0.3_vshvapmxg47tngu7tvrsqpq55u @@ -944,8 +944,8 @@ packages: dependencies: ms: 2.1.2 - /decky-frontend-lib/3.7.14: - resolution: {integrity: sha512-ShAoP3VqiwkJYukDBHsOF9fk7wYw0VaKpHw6j9WdzLxwZwBcg0J7QBNIFYP3nfA0UgEwSJVEg/22kONiplipmA==} + /decky-frontend-lib/3.14.0: + resolution: {integrity: sha512-cBGgS960ftGgpF/oDlRj02nISWq7rwKHIUzG7RJeHchLmz/M4W4OwDL2/oEYO+0WeSx/AWRHTIfLU27jdHiZYQ==} dev: false /decode-named-character-reference/1.0.2: diff --git a/frontend/src/toaster.tsx b/frontend/src/toaster.tsx index 728bbdb8..1b2e9b80 100644 --- a/frontend/src/toaster.tsx +++ b/frontend/src/toaster.tsx @@ -1,4 +1,4 @@ -import { Patch, ToastData, afterPatch, findInReactTree, sleep } from 'decky-frontend-lib'; +import { Module, Patch, ToastData, afterPatch, findInReactTree, findModuleChild, sleep } from 'decky-frontend-lib'; import { ReactNode } from 'react'; import Toast from './components/Toast'; @@ -7,6 +7,7 @@ import Logger from './logger'; declare global { interface Window { __TOASTER_INSTANCE: any; + settingsStore: any; NotificationStore: any; } } @@ -16,7 +17,7 @@ class Toaster extends Logger { // private toasterState: DeckyToasterState = new DeckyToasterState(); private node: any; private rNode: any; - private settingsModule: any; + private audioModule: any; private finishStartup?: () => void; private ready: Promise<void> = new Promise((res) => (this.finishStartup = res)); private toasterPatch?: Patch; @@ -127,6 +128,17 @@ class Toaster extends Logger { this.rNode.stateNode.forceUpdate(); delete this.rNode.stateNode.shouldComponentUpdate; + this.audioModule = findModuleChild((m: Module) => { + if (typeof m !== 'object') return undefined; + for (let prop in m) { + try { + if (m[prop].PlayNavSound && m[prop].RegisterCallbackOnPlaySound) return m[prop]; + } catch { + return undefined; + } + } + }); + this.log('Initialized'); this.finishStartup?.(); } @@ -135,24 +147,31 @@ class Toaster extends Logger { // toast.duration = toast.duration || 5e3; // this.toasterState.addToast(toast); await this.ready; - const settings = this.settingsModule?.settings; let toastData = { nNotificationID: window.NotificationStore.m_nNextTestNotificationID++, rtCreated: Date.now(), - eType: 15, + eType: toast.eType || 11, nToastDurationMS: toast.duration || (toast.duration = 5e3), data: toast, decky: true, }; // @ts-ignore toastData.data.appid = () => 0; + if (toast.sound === undefined) toast.sound = 6; + if (toast.playSound === undefined) toast.playSound = true; + if (toast.showToast === undefined) toast.showToast = true; if ( - (settings?.bDisableAllToasts && !toast.critical) || - (settings?.bDisableToastsInGame && !toast.critical && window.NotificationStore.BIsUserInGame()) + (window.settingsStore.settings.bDisableAllToasts && !toast.critical) || + (window.settingsStore.settings.bDisableToastsInGame && + !toast.critical && + window.NotificationStore.BIsUserInGame()) ) return; - window.NotificationStore.m_rgNotificationToasts.push(toastData); - window.NotificationStore.DispatchNextToast(); + if (toast.playSound) this.audioModule?.PlayNavSound(toast.sound); + if (toast.showToast) { + window.NotificationStore.m_rgNotificationToasts.push(toastData); + window.NotificationStore.DispatchNextToast(); + } } deinit() { |
