diff options
| author | jurassicplayer <jurassicplayer75@gmail.com> | 2022-12-10 15:09:21 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-10 15:09:21 -0800 |
| commit | f73918c9023d0df92cea6feb394b633b8c881b51 (patch) | |
| tree | 9c555496840b66ad97336fd6b9ade0bed714977a /frontend/src | |
| parent | ea35af2050f8a556457ee4d87bb89f0d6a673867 (diff) | |
| download | decky-loader-f73918c9023d0df92cea6feb394b633b8c881b51.tar.gz decky-loader-f73918c9023d0df92cea6feb394b633b8c881b51.zip | |
feat(MoreCustomizableToasts): Allow plugin developers to customize some toast properties (#268)
* Use settingsStore directly
* Change toast etype, add showToast/playSound
* Update DFL and rebase
Diffstat (limited to 'frontend/src')
| -rw-r--r-- | frontend/src/toaster.tsx | 35 |
1 files changed, 27 insertions, 8 deletions
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() { |
