Also reset the 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>
This commit is contained in:
Joas Schilling 2022-05-27 11:28:59 +02:00
förälder 9ad5b301ce
incheckning 1429a9a8ef
Ingen känd nyckel hittad för denna signaturen i databasen
GPG-nyckel ID: 7076EA9751AACDDA
12 ändrade filer med 25 tillägg och 32 borttagningar

Visa fil

@ -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);
}
}

Visa fil

@ -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);

Visa fil

@ -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)));

Visa fil

@ -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) {

Visa fil

@ -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"

Visa fil

@ -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')

Visa fil

@ -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,

Visa fil

@ -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 {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long