From 5dee54d70bcd207c9b96a4cf6bb58f82fe9fbba9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 24 May 2022 14:40:59 +0200 Subject: [PATCH] Add status automation Signed-off-by: Joas Schilling --- .../dav/lib/BackgroundJob/UserStatusAutomation.php | 14 ++++++++++++-- lib/public/UserStatus/IUserStatus.php | 12 ++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/apps/dav/lib/BackgroundJob/UserStatusAutomation.php b/apps/dav/lib/BackgroundJob/UserStatusAutomation.php index 21e37571c2b..0ead7aa0514 100644 --- a/apps/dav/lib/BackgroundJob/UserStatusAutomation.php +++ b/apps/dav/lib/BackgroundJob/UserStatusAutomation.php @@ -31,6 +31,8 @@ use OCP\BackgroundJob\TimedJob; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IConfig; use OCP\IDBConnection; +use OCP\UserStatus\IManager; +use OCP\UserStatus\IUserStatus; use Psr\Log\LoggerInterface; use Sabre\VObject\Component\Available; use Sabre\VObject\Component\VAvailability; @@ -41,17 +43,20 @@ class UserStatusAutomation extends TimedJob { protected IDBConnection $connection; protected IJobList $jobList; protected LoggerInterface $logger; + protected IManager $manager; protected IConfig $config; public function __construct(ITimeFactory $timeFactory, IDBConnection $connection, IJobList $jobList, LoggerInterface $logger, + IManager $manager, IConfig $config) { parent::__construct($timeFactory); $this->connection = $connection; $this->jobList = $jobList; $this->logger = $logger; + $this->manager = $manager; $this->config = $config; // Interval 0 might look weird, but the last_checked is always moved @@ -138,8 +143,13 @@ class UserStatusAutomation extends TimedJob { $nextAutomaticToggle = min($nextPotentialToggles); $this->setLastRunToNextToggleTime($userId, $nextAutomaticToggle - 1); - // FIXME Currently available so disable DND - $isCurrentlyAvailable = (bool)$isCurrentlyAvailable; + if ($isCurrentlyAvailable) { + $this->manager->revertUserStatus($userId, IUserStatus::MESSAGE_AVAILABILITY, IUserStatus::DND); + } else { + // The DND status automation is more important than the "Away - In call" so we also restore that one if it exists. + $this->manager->revertUserStatus($userId, IUserStatus::MESSAGE_CALL, IUserStatus::AWAY); + $this->manager->setUserStatus($userId, IUserStatus::MESSAGE_AVAILABILITY, IUserStatus::DND, true); + } $this->logger->debug('User status automation ran'); } diff --git a/lib/public/UserStatus/IUserStatus.php b/lib/public/UserStatus/IUserStatus.php index bf743dea08d..8803b328ad5 100644 --- a/lib/public/UserStatus/IUserStatus.php +++ b/lib/public/UserStatus/IUserStatus.php @@ -64,6 +64,18 @@ interface IUserStatus { */ public const INVISIBLE = 'invisible'; + /** + * @var string + * @since 25.0.0 + */ + public const MESSAGE_CALL = 'call'; + + /** + * @var string + * @since 25.0.0 + */ + public const MESSAGE_AVAILABILITY = 'availability'; + /** * Get the user this status is connected to * -- 2.39.5