mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-14 04:54:16 +00:00
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
import { Extension } from "evite"
|
|
import React from "react"
|
|
import { notification as Notf } from "antd"
|
|
import { Icons, createIconRender } from "components/Icons"
|
|
import { Translation } from "react-i18next"
|
|
import { Haptics } from "@capacitor/haptics"
|
|
|
|
export default class NotificationController extends Extension {
|
|
getSoundVolume = () => {
|
|
return (window.app.settings.get("notifications_sound_volume") ?? 50) / 100
|
|
}
|
|
|
|
new = (notification, options = {}) => {
|
|
this.notify(notification, options)
|
|
this.playHaptic(options)
|
|
this.playAudio(options)
|
|
}
|
|
|
|
notify = (notification, options = {}) => {
|
|
if (typeof notification === "string") {
|
|
notification = {
|
|
title: "New notification",
|
|
description: notification
|
|
}
|
|
}
|
|
|
|
Notf.open({
|
|
message: <Translation>
|
|
{(t) => t(notification.title)}
|
|
</Translation>,
|
|
description: <Translation>
|
|
{(t) => t(notification.description)}
|
|
</Translation>,
|
|
duration: notification.duration ?? 4,
|
|
icon: React.isValidElement(notification.icon) ? notification.icon : (createIconRender(notification.icon) ?? <Icons.Bell />),
|
|
})
|
|
}
|
|
|
|
playHaptic = async (options = {}) => {
|
|
const vibrationEnabled = options.vibrationEnabled ?? window.app.settings.get("notifications_vibrate")
|
|
|
|
if (vibrationEnabled) {
|
|
await Haptics.vibrate()
|
|
}
|
|
}
|
|
|
|
playAudio = (options = {}) => {
|
|
const soundEnabled = options.soundEnabled ?? window.app.settings.get("notifications_sound")
|
|
const soundVolume = options.soundVolume ? options.soundVolume / 100 : this.getSoundVolume()
|
|
|
|
if (soundEnabled) {
|
|
window.app.SoundEngine.play("notification", {
|
|
volume: soundVolume,
|
|
})
|
|
}
|
|
}
|
|
|
|
initializers = [
|
|
function () {
|
|
this.eventBus.on("changeNotificationsSoundVolume", (value) => {
|
|
app.notifications.playAudio({ soundVolume: value })
|
|
})
|
|
this.eventBus.on("changeNotificationsVibrate", (value) => {
|
|
app.notifications.playHaptic({
|
|
vibrationEnabled: value,
|
|
})
|
|
})
|
|
}
|
|
]
|
|
|
|
window = {
|
|
notifications: this
|
|
}
|
|
} |