summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/BackgroundJob/UserStatusAutomation.php14
-rw-r--r--lib/public/UserStatus/IUserStatus.php12
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
@@ -65,6 +65,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
*
* @return string