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