mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-06-15 18:13:40 +03:00
* Add notification settings, which allows muting decky/plugin toast notifications * Fix typos
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { DeckyState } from './components/DeckyState';
|
|
import { getSetting, setSetting } from './utils/settings';
|
|
|
|
export interface NotificationSettings {
|
|
deckyUpdates: boolean;
|
|
pluginUpdates: boolean;
|
|
}
|
|
|
|
export const DEFAULT_NOTIFICATION_SETTINGS: NotificationSettings = {
|
|
deckyUpdates: true,
|
|
pluginUpdates: true,
|
|
};
|
|
|
|
/**
|
|
* A Service class for managing the notification settings
|
|
*
|
|
* It's mostly responsible for sending setting updates to the server and keeping the local state in sync.
|
|
*/
|
|
export class NotificationService {
|
|
constructor(private deckyState: DeckyState) {}
|
|
|
|
async init() {
|
|
const notificationSettings = await getSetting<Partial<NotificationSettings>>('notificationSettings', {});
|
|
|
|
// Adding a fallback to the default settings to be backwards compatible if we ever add new notification settings
|
|
this.deckyState.setNotificationSettings({
|
|
...DEFAULT_NOTIFICATION_SETTINGS,
|
|
...notificationSettings,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Sends the new notification settings to the server and persists it locally in the decky state
|
|
*
|
|
* @param notificationSettings The new notification settings
|
|
*/
|
|
async update(notificationSettings: NotificationSettings) {
|
|
await setSetting('notificationSettings', notificationSettings);
|
|
this.deckyState.setNotificationSettings(notificationSettings);
|
|
}
|
|
|
|
/**
|
|
* For a specific event, returns true if a notification should be shown
|
|
*
|
|
* @param event The notification event that should be checked
|
|
* @returns true if the notification should be shown
|
|
*/
|
|
shouldNotify(event: keyof NotificationSettings) {
|
|
return this.deckyState.publicState().notificationSettings[event];
|
|
}
|
|
}
|