Signed-off-by: Georg Ehrke <developer@georgehrke.com>tags/v20.0.0beta4
@@ -25,7 +25,6 @@ declare(strict_types=1); | |||
namespace OCA\UserStatus\Connector; | |||
use DateTimeImmutable; | |||
use OCA\UserStatus\Service\StatusService; | |||
use OCP\UserStatus\IUserStatus; | |||
use OCA\UserStatus\Db; | |||
@@ -57,8 +56,8 @@ class UserStatus implements IUserStatus { | |||
$this->message = $status->getCustomMessage(); | |||
$this->icon = $status->getCustomIcon(); | |||
if ($status->getStatus() === StatusService::INVISIBLE) { | |||
$this->status = StatusService::OFFLINE; | |||
if ($status->getStatus() === IUserStatus::INVISIBLE) { | |||
$this->status = IUserStatus::OFFLINE; | |||
} | |||
if ($status->getClearAt() !== null) { | |||
$this->clearAt = DateTimeImmutable::createFromFormat('U', (string)$status->getClearAt()); |
@@ -25,7 +25,6 @@ declare(strict_types=1); | |||
namespace OCA\UserStatus\Controller; | |||
use OCA\UserStatus\Service\StatusService; | |||
use OCP\AppFramework\Controller; | |||
use OCP\AppFramework\Http; | |||
use OCP\AppFramework\Http\JSONResponse; | |||
@@ -34,6 +33,7 @@ use OCP\EventDispatcher\IEventDispatcher; | |||
use OCP\IRequest; | |||
use OCP\IUserSession; | |||
use OCP\User\Events\UserLiveStatusEvent; | |||
use OCP\UserStatus\IUserStatus; | |||
class HeartbeatController extends Controller { | |||
@@ -73,7 +73,7 @@ class HeartbeatController extends Controller { | |||
* @return JSONResponse | |||
*/ | |||
public function heartbeat(string $status): JSONResponse { | |||
if (!\in_array($status, [StatusService::ONLINE, StatusService::AWAY], true)) { | |||
if (!\in_array($status, [IUserStatus::ONLINE, IUserStatus::AWAY], true)) { | |||
return new JSONResponse([], Http::STATUS_BAD_REQUEST); | |||
} | |||
@@ -32,6 +32,7 @@ use OCP\AppFramework\Http\DataResponse; | |||
use OCP\AppFramework\OCS\OCSNotFoundException; | |||
use OCP\AppFramework\OCSController; | |||
use OCP\IRequest; | |||
use OCP\UserStatus\IUserStatus; | |||
class StatusesController extends OCSController { | |||
@@ -92,8 +93,8 @@ class StatusesController extends OCSController { | |||
*/ | |||
private function formatStatus(UserStatus $status): array { | |||
$visibleStatus = $status->getStatus(); | |||
if ($visibleStatus === StatusService::INVISIBLE) { | |||
$visibleStatus = StatusService::OFFLINE; | |||
if ($visibleStatus === IUserStatus::INVISIBLE) { | |||
$visibleStatus = IUserStatus::OFFLINE; | |||
} | |||
return [ |
@@ -32,6 +32,7 @@ use OCP\IInitialStateService; | |||
use OCP\IL10N; | |||
use OCP\IUserManager; | |||
use OCP\IUserSession; | |||
use OCP\UserStatus\IUserStatus; | |||
/** | |||
* Class UserStatusWidget | |||
@@ -146,8 +147,8 @@ class UserStatusWidget implements IWidget { | |||
return [ | |||
'userId' => $status->getUserId(), | |||
'displayName' => $displayName, | |||
'status' => $status->getStatus() === StatusService::INVISIBLE | |||
? StatusService::OFFLINE | |||
'status' => $status->getStatus() === IUserStatus::INVISIBLE | |||
? IUserStatus::OFFLINE | |||
: $status->getStatus(), | |||
'icon' => $status->getCustomIcon(), | |||
'message' => $status->getCustomMessage(), |
@@ -25,10 +25,10 @@ declare(strict_types=1); | |||
namespace OCA\UserStatus\Db; | |||
use OCA\UserStatus\Service\StatusService; | |||
use OCP\AppFramework\Db\QBMapper; | |||
use OCP\DB\QueryBuilder\IQueryBuilder; | |||
use OCP\IDBConnection; | |||
use OCP\UserStatus\IUserStatus; | |||
/** | |||
* Class UserStatusMapper | |||
@@ -82,7 +82,7 @@ class UserStatusMapper extends QBMapper { | |||
->select('*') | |||
->from($this->tableName) | |||
->orderBy('status_timestamp', 'DESC') | |||
->where($qb->expr()->notIn('status', $qb->createNamedParameter([StatusService::ONLINE, StatusService::AWAY, StatusService::OFFLINE], IQueryBuilder::PARAM_STR_ARRAY))) | |||
->where($qb->expr()->notIn('status', $qb->createNamedParameter([IUserStatus::ONLINE, IUserStatus::AWAY, IUserStatus::OFFLINE], IQueryBuilder::PARAM_STR_ARRAY))) | |||
->orWhere($qb->expr()->isNotNull('message_id')) | |||
->orWhere($qb->expr()->isNotNull('custom_icon')) | |||
->orWhere($qb->expr()->isNotNull('custom_message')); | |||
@@ -133,13 +133,13 @@ class UserStatusMapper extends QBMapper { | |||
public function clearStatusesOlderThan(int $olderThan, int $now): void { | |||
$qb = $this->db->getQueryBuilder(); | |||
$qb->update($this->tableName) | |||
->set('status', $qb->createNamedParameter(StatusService::OFFLINE)) | |||
->set('status', $qb->createNamedParameter(IUserStatus::OFFLINE)) | |||
->set('is_user_defined', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)) | |||
->set('status_timestamp', $qb->createNamedParameter($now, IQueryBuilder::PARAM_INT)) | |||
->where($qb->expr()->lte('status_timestamp', $qb->createNamedParameter($olderThan, IQueryBuilder::PARAM_INT))) | |||
->andWhere($qb->expr()->orX( | |||
$qb->expr()->eq('is_user_defined', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL), IQueryBuilder::PARAM_BOOL), | |||
$qb->expr()->eq('status', $qb->createNamedParameter(StatusService::ONLINE)) | |||
$qb->expr()->eq('status', $qb->createNamedParameter(IUserStatus::ONLINE)) | |||
)); | |||
$qb->execute(); |
@@ -33,6 +33,7 @@ use OCP\AppFramework\Utility\ITimeFactory; | |||
use OCP\EventDispatcher\IEventListener; | |||
use OCP\EventDispatcher\Event; | |||
use OCP\User\Events\UserLiveStatusEvent; | |||
use OCP\UserStatus\IUserStatus; | |||
/** | |||
* Class UserDeletedListener | |||
@@ -74,7 +75,7 @@ class UserLiveStatusListener implements IEventListener { | |||
} catch (DoesNotExistException $ex) { | |||
$userStatus = new UserStatus(); | |||
$userStatus->setUserId($user->getUID()); | |||
$userStatus->setStatus(StatusService::OFFLINE); | |||
$userStatus->setStatus(IUserStatus::OFFLINE); | |||
$userStatus->setStatusTimestamp(0); | |||
$userStatus->setIsUserDefined(false); | |||
} |
@@ -27,6 +27,7 @@ namespace OCA\UserStatus\Service; | |||
use OCP\AppFramework\Db\DoesNotExistException; | |||
use OCP\IUserSession; | |||
use OCP\UserStatus\IUserStatus; | |||
class JSDataService implements \JsonSerializable { | |||
@@ -65,7 +66,7 @@ class JSDataService implements \JsonSerializable { | |||
'messageIsPredefined' => false, | |||
'icon' => null, | |||
'clearAt' => null, | |||
'status' => StatusService::OFFLINE, | |||
'status' => IUserStatus::OFFLINE, | |||
'statusIsUserDefined' => false, | |||
]; | |||
} |
@@ -34,6 +34,7 @@ use OCA\UserStatus\Exception\InvalidStatusTypeException; | |||
use OCA\UserStatus\Exception\StatusMessageTooLongException; | |||
use OCP\AppFramework\Db\DoesNotExistException; | |||
use OCP\AppFramework\Utility\ITimeFactory; | |||
use OCP\UserStatus\IUserStatus; | |||
/** | |||
* Class StatusService | |||
@@ -54,21 +55,15 @@ class StatusService { | |||
/** @var EmojiService */ | |||
private $emojiService; | |||
public const ONLINE = 'online'; | |||
public const AWAY = 'away'; | |||
public const DND = 'dnd'; | |||
public const INVISIBLE = 'invisible'; | |||
public const OFFLINE = 'offline'; | |||
/** | |||
* List of priorities ordered by their priority | |||
*/ | |||
public const PRIORITY_ORDERED_STATUSES = [ | |||
self::ONLINE, | |||
self::AWAY, | |||
self::DND, | |||
self::INVISIBLE, | |||
self::OFFLINE | |||
IUserStatus::ONLINE, | |||
IUserStatus::AWAY, | |||
IUserStatus::DND, | |||
IUserStatus::INVISIBLE, | |||
IUserStatus::OFFLINE | |||
]; | |||
/** | |||
@@ -76,9 +71,9 @@ class StatusService { | |||
* or UserLiveStatusEvents | |||
*/ | |||
public const PERSISTENT_STATUSES = [ | |||
self::AWAY, | |||
self::DND, | |||
self::INVISIBLE, | |||
IUserStatus::AWAY, | |||
IUserStatus::DND, | |||
IUserStatus::INVISIBLE, | |||
]; | |||
/** @var int */ | |||
@@ -200,7 +195,7 @@ class StatusService { | |||
} catch (DoesNotExistException $ex) { | |||
$userStatus = new UserStatus(); | |||
$userStatus->setUserId($userId); | |||
$userStatus->setStatus(self::OFFLINE); | |||
$userStatus->setStatus(IUserStatus::OFFLINE); | |||
$userStatus->setStatusTimestamp(0); | |||
$userStatus->setIsUserDefined(false); | |||
} | |||
@@ -245,7 +240,7 @@ class StatusService { | |||
} catch (DoesNotExistException $ex) { | |||
$userStatus = new UserStatus(); | |||
$userStatus->setUserId($userId); | |||
$userStatus->setStatus(self::OFFLINE); | |||
$userStatus->setStatus(IUserStatus::OFFLINE); | |||
$userStatus->setStatusTimestamp(0); | |||
$userStatus->setIsUserDefined(false); | |||
} | |||
@@ -287,7 +282,7 @@ class StatusService { | |||
return false; | |||
} | |||
$userStatus->setStatus(self::OFFLINE); | |||
$userStatus->setStatus(IUserStatus::OFFLINE); | |||
$userStatus->setStatusTimestamp(0); | |||
$userStatus->setIsUserDefined(false); | |||
@@ -343,7 +338,7 @@ class StatusService { | |||
$clearAt = $status->getClearAt(); | |||
if ($status->getStatusTimestamp() < $this->timeFactory->getTime() - self::INVALIDATE_STATUS_THRESHOLD | |||
&& (!$status->getIsUserDefined() || $status->getStatus() === self::ONLINE)) { | |||
&& (!$status->getIsUserDefined() || $status->getStatus() === IUserStatus::ONLINE)) { | |||
$this->cleanStatus($status); | |||
} | |||
if ($clearAt !== null && $clearAt < $this->timeFactory->getTime()) { | |||
@@ -360,7 +355,7 @@ class StatusService { | |||
* @param UserStatus $status | |||
*/ | |||
private function cleanStatus(UserStatus $status): void { | |||
$status->setStatus(self::OFFLINE); | |||
$status->setStatus(IUserStatus::OFFLINE); | |||
$status->setStatusTimestamp($this->timeFactory->getTime()); | |||
$status->setIsUserDefined(false); | |||
@@ -59,6 +59,12 @@ interface IUserStatus { | |||
*/ | |||
public const OFFLINE = 'offline'; | |||
/** | |||
* @var string | |||
* @since 20.0.0 | |||
*/ | |||
public const INVISIBLE = 'invisible'; | |||
/** | |||
* Get the user this status is connected to | |||
* |