jld3103
2 years ago
21 changed files with 403 additions and 256 deletions
@ -1 +1 @@
|
||||
Subproject commit 7190056dd64da2f2c4b2fd3fd8d40d26cb768937 |
||||
Subproject commit 65bb0849179cf93c161387a730f4abc79a782f77 |
@ -1 +1 @@
|
||||
Subproject commit 3aabb381b9e7ffc5b13f951b8fb89494fe903a2c |
||||
Subproject commit 20ea9a25353129b56d46951fe7d23939665ab2b2 |
@ -1,42 +0,0 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @copyright Copyright (c) 2020, Georg Ehrke |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
return [ |
||||
'ocs' => [ |
||||
// Routes for querying statuses |
||||
['name' => 'Statuses#findAll', 'url' => '/api/v1/statuses', 'verb' => 'GET'], |
||||
['name' => 'Statuses#find', 'url' => '/api/v1/statuses/{userId}', 'verb' => 'GET'], |
||||
// Routes for manipulating your own status |
||||
['name' => 'UserStatus#getStatus', 'url' => '/api/v1/user_status', 'verb' => 'GET'], |
||||
['name' => 'UserStatus#setStatus', 'url' => '/api/v1/user_status/status', 'verb' => 'PUT'], |
||||
['name' => 'UserStatus#setPredefinedMessage', 'url' => '/api/v1/user_status/message/predefined', 'verb' => 'PUT'], |
||||
['name' => 'UserStatus#setCustomMessage', 'url' => '/api/v1/user_status/message/custom', 'verb' => 'PUT'], |
||||
['name' => 'UserStatus#clearMessage', 'url' => '/api/v1/user_status/message', 'verb' => 'DELETE'], |
||||
// Routes for listing default routes |
||||
['name' => 'PredefinedStatus#findAll', 'url' => '/api/v1/predefined_statuses/', 'verb' => 'GET'], |
||||
// Route for doing heartbeats |
||||
['name' => 'Heartbeat#heartbeat', 'url' => '/api/v1/heartbeat', 'verb' => 'PUT'], |
||||
], |
||||
]; |
@ -1,114 +0,0 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @copyright Copyright (c) 2020, Georg Ehrke |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
namespace OCA\UserStatus\Controller; |
||||
|
||||
use OCA\UserStatus\Db\UserStatus; |
||||
use OCA\UserStatus\Service\StatusService; |
||||
use OCP\AppFramework\Controller; |
||||
use OCP\AppFramework\Db\DoesNotExistException; |
||||
use OCP\AppFramework\Http; |
||||
use OCP\AppFramework\Http\JSONResponse; |
||||
use OCP\AppFramework\OCSController; |
||||
use OCP\AppFramework\Utility\ITimeFactory; |
||||
use OCP\EventDispatcher\IEventDispatcher; |
||||
use OCP\IRequest; |
||||
use OCP\IUserSession; |
||||
use OCP\User\Events\UserLiveStatusEvent; |
||||
use OCP\UserStatus\IUserStatus; |
||||
|
||||
class HeartbeatController extends OCSController { |
||||
|
||||
/** @var IEventDispatcher */ |
||||
private $eventDispatcher; |
||||
|
||||
/** @var IUserSession */ |
||||
private $userSession; |
||||
|
||||
/** @var ITimeFactory */ |
||||
private $timeFactory; |
||||
|
||||
/** @var StatusService */ |
||||
private $service; |
||||
|
||||
public function __construct(string $appName, |
||||
IRequest $request, |
||||
IEventDispatcher $eventDispatcher, |
||||
IUserSession $userSession, |
||||
ITimeFactory $timeFactory, |
||||
StatusService $service) { |
||||
parent::__construct($appName, $request); |
||||
$this->eventDispatcher = $eventDispatcher; |
||||
$this->userSession = $userSession; |
||||
$this->timeFactory = $timeFactory; |
||||
$this->service = $service; |
||||
} |
||||
|
||||
/** |
||||
* @NoAdminRequired |
||||
* |
||||
* @param string $status |
||||
* @return JSONResponse |
||||
*/ |
||||
public function heartbeat(string $status): JSONResponse { |
||||
if (!\in_array($status, [IUserStatus::ONLINE, IUserStatus::AWAY], true)) { |
||||
return new JSONResponse([], Http::STATUS_BAD_REQUEST); |
||||
} |
||||
|
||||
$user = $this->userSession->getUser(); |
||||
if ($user === null) { |
||||
return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); |
||||
} |
||||
|
||||
$event = new UserLiveStatusEvent( |
||||
$user, |
||||
$status, |
||||
$this->timeFactory->getTime() |
||||
); |
||||
|
||||
$this->eventDispatcher->dispatchTyped($event); |
||||
|
||||
$userStatus = $event->getUserStatus(); |
||||
if (!$userStatus) { |
||||
return new JSONResponse([], Http::STATUS_NO_CONTENT); |
||||
} |
||||
|
||||
/** @psalm-suppress UndefinedInterfaceMethod */ |
||||
return new JSONResponse($this->formatStatus($userStatus->getInternal())); |
||||
} |
||||
|
||||
private function formatStatus(UserStatus $status): array { |
||||
return [ |
||||
'userId' => $status->getUserId(), |
||||
'message' => $status->getCustomMessage(), |
||||
'messageId' => $status->getMessageId(), |
||||
'messageIsPredefined' => $status->getMessageId() !== null, |
||||
'icon' => $status->getCustomIcon(), |
||||
'clearAt' => $status->getClearAt(), |
||||
'status' => $status->getStatus(), |
||||
'statusIsUserDefined' => $status->getIsUserDefined(), |
||||
]; |
||||
} |
||||
} |
Loading…
Reference in new issue