diff options
author | Joas Schilling <coding@schilljs.com> | 2024-09-20 13:15:20 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2024-09-23 09:02:48 +0200 |
commit | 5193579e4f085fc8837a641522ed02570b9b02da (patch) | |
tree | e6d93874f69d55b28088e4ffcf83657447fc125f /lib/private/Notification | |
parent | 4ba3d4a31a5a27a7fad6b8928d899ec7247289ca (diff) | |
download | nextcloud-server-5193579e4f085fc8837a641522ed02570b9b02da.tar.gz nextcloud-server-5193579e4f085fc8837a641522ed02570b9b02da.zip |
feat(prioritynotifications): Allow some apps to mark notifications as priorityfeat/noid/priority-notifications
They will be still send as push during DND.
Apps are currently limited to:
- twofactor_nextcloud_notification to help with login
- spreed which will only set it for pushes in manually picked conversations
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/private/Notification')
-rw-r--r-- | lib/private/Notification/Notification.php | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/private/Notification/Notification.php b/lib/private/Notification/Notification.php index 1c624b50d44..f8f1e247854 100644 --- a/lib/private/Notification/Notification.php +++ b/lib/private/Notification/Notification.php @@ -16,6 +16,14 @@ use OCP\RichObjectStrings\IRichTextFormatter; use OCP\RichObjectStrings\IValidator; class Notification implements INotification { + /** + * A very small and privileged list of apps that are allowed to push during DND. + */ + public const PRIORITY_NOTIFICATION_APPS = [ + 'spreed', + 'twofactor_nextcloud_notification', + ]; + protected string $app = ''; protected string $user = ''; protected \DateTime $dateTime; @@ -33,6 +41,7 @@ class Notification implements INotification { protected array $messageRichParameters = []; protected string $link = ''; protected string $icon = ''; + protected bool $priorityNotification = false; protected array $actions = []; protected array $actionsParsed = []; protected bool $hasPrimaryAction = false; @@ -333,6 +342,25 @@ class Notification implements INotification { /** * {@inheritDoc} */ + public function setPriorityNotification(bool $priorityNotification): INotification { + if ($priorityNotification && !in_array($this->getApp(), self::PRIORITY_NOTIFICATION_APPS, true)) { + throw new InvalidValueException('priorityNotification'); + } + + $this->priorityNotification = $priorityNotification; + return $this; + } + + /** + * {@inheritDoc} + */ + public function isPriorityNotification(): bool { + return $this->priorityNotification; + } + + /** + * {@inheritDoc} + */ public function createAction(): IAction { return new Action(); } @@ -434,6 +462,10 @@ class Notification implements INotification { } protected function isValidCommon(): bool { + if ($this->isPriorityNotification() && !in_array($this->getApp(), self::PRIORITY_NOTIFICATION_APPS, true)) { + return false; + } + return $this->getApp() !== '' && |