27 changed files with 578 additions and 325 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