Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions apps/user_status/lib/Connector/UserStatus.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,11 @@ class UserStatus implements IUserStatus {
/** @var DateTimeImmutable|null */
private $clearAt;

/**
* UserStatus constructor.
*
* @param Db\UserStatus $status
*/
/** @var Db\UserStatus */
private $internalStatus;

public function __construct(Db\UserStatus $status) {
$this->internalStatus = $status;
$this->userId = $status->getUserId();
$this->status = $status->getStatus();
$this->message = $status->getCustomMessage();
Expand Down Expand Up @@ -99,4 +98,8 @@ public function getIcon(): ?string {
public function getClearAt(): ?DateTimeImmutable {
return $this->clearAt;
}

public function getInternal(): Db\UserStatus {
return $this->internalStatus;
}
}
20 changes: 10 additions & 10 deletions apps/user_status/lib/Controller/HeartbeatController.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,21 @@ public function heartbeat(string $status): JSONResponse {
return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR);
}

$this->eventDispatcher->dispatchTyped(
new UserLiveStatusEvent(
$user,
$status,
$this->timeFactory->getTime()
)
$event = new UserLiveStatusEvent(
$user,
$status,
$this->timeFactory->getTime()
);

try {
$userStatus = $this->service->findByUserId($user->getUID());
} catch (DoesNotExistException $ex) {
$this->eventDispatcher->dispatchTyped($event);

$userStatus = $event->getUserStatus();
if (!$userStatus) {
return new JSONResponse([], Http::STATUS_NO_CONTENT);
}

return new JSONResponse($this->formatStatus($userStatus));
/** @psalm-suppress UndefinedInterfaceMethod */
return new JSONResponse($this->formatStatus($userStatus->getInternal()));
}

private function formatStatus(UserStatus $status): array {
Expand Down
17 changes: 5 additions & 12 deletions apps/user_status/lib/Listener/UserLiveStatusListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
namespace OCA\UserStatus\Listener;

use OCA\UserStatus\Db\UserStatus;
use OCA\UserStatus\Connector\UserStatus as ConnectorUserStatus;
use OCA\UserStatus\Db\UserStatusMapper;
use OCA\UserStatus\Service\StatusService;
use OCP\AppFramework\Db\DoesNotExistException;
Expand All @@ -41,19 +42,9 @@
* @package OCA\UserStatus\Listener
*/
class UserLiveStatusListener implements IEventListener {
private UserStatusMapper $mapper;
private ITimeFactory $timeFactory;

/** @var UserStatusMapper */
private $mapper;

/** @var ITimeFactory */
private $timeFactory;

/**
* UserLiveStatusListener constructor.
*
* @param UserStatusMapper $mapper
* @param ITimeFactory $timeFactory
*/
public function __construct(UserStatusMapper $mapper,
ITimeFactory $timeFactory) {
$this->mapper = $mapper;
Expand Down Expand Up @@ -112,5 +103,7 @@ public function handle(Event $event): void {
$this->mapper->update($userStatus);
}
}

$event->setUserStatus(new ConnectorUserStatus($userStatus));
}
}
31 changes: 20 additions & 11 deletions lib/public/User/Events/UserLiveStatusEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

use OCP\EventDispatcher\Event;
use OCP\IUser;
use OCP\UserStatus\IUserStatus;

/**
* @since 20.0.0
Expand All @@ -51,19 +52,12 @@ class UserLiveStatusEvent extends Event {
*/
public const STATUS_OFFLINE = 'offline';

/** @var IUser */
private $user;

/** @var string */
private $status;

/** @var int */
private $timestamp;
private IUser $user;
private string $status;
private int $timestamp;
private ?IUserStatus $userStatus = null;

/**
* @param IUser $user
* @param string $status
* @param int $timestamp
* @since 20.0.0
*/
public function __construct(IUser $user,
Expand Down Expand Up @@ -98,4 +92,19 @@ public function getStatus(): string {
public function getTimestamp(): int {
return $this->timestamp;
}

/**
* Get the user status that might be available after processing the event
* @since 24.0.0
*/
public function getUserStatus(): ?IUserStatus {
return $this->userStatus;
}

/**
* @since 24.0.0
*/
public function setUserStatus(IUserStatus $userStatus) {
$this->userStatus = $userStatus;
}
}