Browse Source

Implement leave endpoint. Leave room where a user or a guest is participating.

Signed-off-by: Ivan Sein <ivan@nextcloud.com>
pull/167/head
Ivan Sein 9 years ago
parent
commit
6d99af0637
  1. 5
      appinfo/routes.php
  2. 4
      js/rooms.js
  3. 27
      lib/Controller/ApiController.php
  4. 10
      lib/Manager.php

5
appinfo/routes.php

@ -87,6 +87,11 @@ return [
'url' => '/api/ping',
'verb' => 'POST',
],
[
'name' => 'api#leave',
'url' => '/api/leave',
'verb' => 'DELETE',
],
[
'name' => 'AppSettings#setSpreedSettings',
'url' => '/settings/admin',

4
js/rooms.js

@ -97,8 +97,8 @@
},
leaveAllRooms: function() {
$.ajax({
url: OC.generateUrl('/apps/spreed/api/room/{roomId}/join', {roomId: 0}),
method: 'POST',
url: OC.generateUrl('/apps/spreed/api/leave'),
method: 'DELETE',
async: false
});
},

27
lib/Controller/ApiController.php

@ -492,15 +492,6 @@ class ApiController extends Controller {
* @return JSONResponse
*/
public function joinRoom($roomId) {
if ($roomId === 0) {
if ($this->userId !== null) {
$this->manager->disconnectUserFromAllRooms($this->userId);
}
$this->session->remove('spreed-session');
return new JSONResponse([]);
}
try {
$room = $this->manager->getRoomForParticipant($roomId, $this->userId);
} catch (RoomNotFoundException $e) {
@ -530,6 +521,24 @@ class ApiController extends Controller {
]);
}
/**
* @PublicPage
* @UseSession
*
* @return JSONResponse
*/
public function leave() {
if ($this->userId !== null) {
$this->manager->disconnectUserFromAllRooms($this->userId);
} else {
$sessionId = $this->session->get('spreed-session');
$this->manager->removeSessionFromAllRooms($sessionId);
}
$this->session->remove('spreed-session');
return new JSONResponse();
}
/**
* @param IUser $actor
* @param IUser $user

10
lib/Manager.php

@ -192,6 +192,16 @@ class Manager {
$query->execute();
}
/**
* @param string $sessionId
*/
public function removeSessionFromAllRooms($sessionId) {
$query = $this->db->getQueryBuilder();
$query->delete('spreedme_room_participants')
->where($query->expr()->eq('sessionId', $query->createNamedParameter($sessionId)));
$query->execute();
}
/**
* @param string $userId
* @return string[]

Loading…
Cancel
Save