Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2022-05-27 12:28:59 +0300
committerJoas Schilling <coding@schilljs.com>2022-05-27 12:32:53 +0300
commit1429a9a8ef9c65493e0c9276c4cc5f8b8cf94bc2 (patch)
treea2df0b1ca7fed35bc368e09854e4f25c8136aa15 /apps/user_status
parent9ad5b301ce716d4033e9cbc549aff2a43d5022f5 (diff)
Also reset the status on clearAtbugfix/noid/reset-status-on-clearAt
When you set yourself to "DND - In a meeting" for one hour, the expectation is that you are also "online"/normal again when the meeting is over. So we extend the logic to also include the status itself to be reverted. Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'apps/user_status')
-rw-r--r--apps/user_status/lib/BackgroundJob/ClearOldStatusesBackgroundJob.php2
-rw-r--r--apps/user_status/lib/Controller/UserStatusController.php4
-rw-r--r--apps/user_status/lib/Db/UserStatusMapper.php8
-rw-r--r--apps/user_status/lib/Service/StatusService.php7
-rw-r--r--apps/user_status/src/components/ClearAtSelect.vue2
-rw-r--r--apps/user_status/tests/Unit/BackgroundJob/ClearOldStatusesBackgroundJobTest.php2
-rw-r--r--apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php3
-rw-r--r--apps/user_status/tests/Unit/Db/UserStatusMapperTest.php17
8 files changed, 19 insertions, 26 deletions
diff --git a/apps/user_status/lib/BackgroundJob/ClearOldStatusesBackgroundJob.php b/apps/user_status/lib/BackgroundJob/ClearOldStatusesBackgroundJob.php
index 0d8f5ac431b..8f2ef421597 100644
--- a/apps/user_status/lib/BackgroundJob/ClearOldStatusesBackgroundJob.php
+++ b/apps/user_status/lib/BackgroundJob/ClearOldStatusesBackgroundJob.php
@@ -61,7 +61,7 @@ class ClearOldStatusesBackgroundJob extends TimedJob {
protected function run($argument) {
$now = $this->time->getTime();
- $this->mapper->clearMessagesOlderThan($now);
+ $this->mapper->clearOlderThanClearAt($now);
$this->mapper->clearStatusesOlderThan($now - StatusService::INVALIDATE_STATUS_THRESHOLD, $now);
}
}
diff --git a/apps/user_status/lib/Controller/UserStatusController.php b/apps/user_status/lib/Controller/UserStatusController.php
index 8708a7c2aac..214dc21f453 100644
--- a/apps/user_status/lib/Controller/UserStatusController.php
+++ b/apps/user_status/lib/Controller/UserStatusController.php
@@ -135,7 +135,7 @@ class UserStatusController extends OCSController {
* @NoAdminRequired
*
* @param string|null $statusIcon
- * @param string $message
+ * @param string|null $message
* @param int|null $clearAt
* @return DataResponse
* @throws OCSBadRequestException
@@ -144,7 +144,7 @@ class UserStatusController extends OCSController {
?string $message,
?int $clearAt): DataResponse {
try {
- if ($message !== null && $message !== '') {
+ if (($message !== null && $message !== '') || ($clearAt !== null && $clearAt !== 0)) {
$status = $this->service->setCustomMessage($this->userId, $statusIcon, $message, $clearAt);
} else {
$this->service->clearMessage($this->userId);
diff --git a/apps/user_status/lib/Db/UserStatusMapper.php b/apps/user_status/lib/Db/UserStatusMapper.php
index f67cfcd472d..10939116a53 100644
--- a/apps/user_status/lib/Db/UserStatusMapper.php
+++ b/apps/user_status/lib/Db/UserStatusMapper.php
@@ -145,13 +145,9 @@ class UserStatusMapper extends QBMapper {
*
* @param int $timestamp
*/
- public function clearMessagesOlderThan(int $timestamp): void {
+ public function clearOlderThanClearAt(int $timestamp): void {
$qb = $this->db->getQueryBuilder();
- $qb->update($this->tableName)
- ->set('message_id', $qb->createNamedParameter(null))
- ->set('custom_icon', $qb->createNamedParameter(null))
- ->set('custom_message', $qb->createNamedParameter(null))
- ->set('clear_at', $qb->createNamedParameter(null))
+ $qb->delete($this->tableName)
->where($qb->expr()->isNotNull('clear_at'))
->andWhere($qb->expr()->lte('clear_at', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)));
diff --git a/apps/user_status/lib/Service/StatusService.php b/apps/user_status/lib/Service/StatusService.php
index 9bf448d9de8..858db48f31f 100644
--- a/apps/user_status/lib/Service/StatusService.php
+++ b/apps/user_status/lib/Service/StatusService.php
@@ -302,7 +302,7 @@ class StatusService {
/**
* @param string $userId
* @param string|null $statusIcon
- * @param string $message
+ * @param string|null $message
* @param int|null $clearAt
* @return UserStatus
* @throws InvalidClearAtException
@@ -311,7 +311,7 @@ class StatusService {
*/
public function setCustomMessage(string $userId,
?string $statusIcon,
- string $message,
+ ?string $message,
?int $clearAt): UserStatus {
try {
$userStatus = $this->mapper->findByUserId($userId);
@@ -328,7 +328,7 @@ class StatusService {
throw new InvalidStatusIconException('Status-Icon is longer than one character');
}
// Check for maximum length of custom message
- if (\mb_strlen($message) > self::MAXIMUM_MESSAGE_LENGTH) {
+ if ($message !== null && \mb_strlen($message) > self::MAXIMUM_MESSAGE_LENGTH) {
throw new StatusMessageTooLongException('Message is longer than supported length of ' . self::MAXIMUM_MESSAGE_LENGTH . ' characters');
}
// Check that clearAt is in the future
@@ -432,6 +432,7 @@ class StatusService {
$this->cleanStatus($status);
}
if ($clearAt !== null && $clearAt < $this->timeFactory->getTime()) {
+ $this->cleanStatus($status);
$this->cleanStatusMessage($status);
}
if ($status->getMessageId() !== null) {
diff --git a/apps/user_status/src/components/ClearAtSelect.vue b/apps/user_status/src/components/ClearAtSelect.vue
index 09e0068f87f..d0a88ea8255 100644
--- a/apps/user_status/src/components/ClearAtSelect.vue
+++ b/apps/user_status/src/components/ClearAtSelect.vue
@@ -22,7 +22,7 @@
<template>
<div class="clear-at-select">
<span class="clear-at-select__label">
- {{ $t('user_status', 'Clear status message after') }}
+ {{ $t('user_status', 'Clear status after') }}
</span>
<Multiselect label="label"
:value="option"
diff --git a/apps/user_status/tests/Unit/BackgroundJob/ClearOldStatusesBackgroundJobTest.php b/apps/user_status/tests/Unit/BackgroundJob/ClearOldStatusesBackgroundJobTest.php
index 2cf9b7d1bd4..da3b342f1a7 100644
--- a/apps/user_status/tests/Unit/BackgroundJob/ClearOldStatusesBackgroundJobTest.php
+++ b/apps/user_status/tests/Unit/BackgroundJob/ClearOldStatusesBackgroundJobTest.php
@@ -53,7 +53,7 @@ class ClearOldStatusesBackgroundJobTest extends TestCase {
public function testRun() {
$this->mapper->expects($this->once())
- ->method('clearMessagesOlderThan')
+ ->method('clearOlderThanClearAt')
->with(1337);
$this->mapper->expects($this->once())
->method('clearStatusesOlderThan')
diff --git a/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php b/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php
index 916f5447ea4..e4d2ab61eee 100644
--- a/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php
+++ b/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php
@@ -315,7 +315,8 @@ class UserStatusControllerTest extends TestCase {
public function setCustomMessageDataProvider(): array {
return [
['👨🏽‍💻', 'Busy developing the status feature', 500, true, false, null, false, null],
- ['👨🏽‍💻', '', 500, true, false, null, false, null, true],
+ ['👨🏽‍💻', '', 500, true, false, null, false, null, false],
+ ['👨🏽‍💻', '', 0, true, false, null, false, null, true],
['👨🏽‍💻', 'Busy developing the status feature', 500, false, true, new InvalidClearAtException('Original exception message'), true,
'New user-status for "john.doe" was rejected due to an invalid clearAt value "500"'],
['👨🏽‍💻', 'Busy developing the status feature', 500, false, true, new InvalidStatusIconException('Original exception message'), true,
diff --git a/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php b/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php
index 0d9f1c1f718..577277cfd61 100644
--- a/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php
+++ b/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php
@@ -28,6 +28,7 @@ namespace OCA\UserStatus\Tests\Db;
use OCA\UserStatus\Db\UserStatus;
use OCA\UserStatus\Db\UserStatusMapper;
+use OCP\AppFramework\Db\DoesNotExistException;
use OCP\DB\Exception;
use Test\TestCase;
@@ -204,22 +205,16 @@ class UserStatusMapperTest extends TestCase {
];
}
- public function testClearMessagesOlderThan(): void {
+ public function testClearOlderThanClearAt(): void {
$this->insertSampleStatuses();
- $this->mapper->clearMessagesOlderThan(55000);
+ $this->mapper->clearOlderThanClearAt(55000);
$allStatuses = $this->mapper->findAll();
- $this->assertCount(3, $allStatuses);
+ $this->assertCount(2, $allStatuses);
- $user1Status = $this->mapper->findByUserId('user1');
- $this->assertEquals('user1', $user1Status->getUserId());
- $this->assertEquals('dnd', $user1Status->getStatus());
- $this->assertEquals(5000, $user1Status->getStatusTimestamp());
- $this->assertEquals(true, $user1Status->getIsUserDefined());
- $this->assertEquals(null, $user1Status->getCustomIcon());
- $this->assertEquals(null, $user1Status->getCustomMessage());
- $this->assertEquals(null, $user1Status->getClearAt());
+ $this->expectException(DoesNotExistException::class);
+ $this->mapper->findByUserId('user1');
}
private function insertSampleStatuses(): void {