summaryrefslogtreecommitdiffstats
path: root/lib/Signaling
diff options
context:
space:
mode:
authorVitor Mattos <vitor@php.rio>2022-12-09 18:54:11 -0300
committerVitor Mattos <vitor@php.rio>2022-12-09 18:54:11 -0300
commitb090004509bfb63386aff2b7a943257c616ea5ef (patch)
tree5fde39387c937b0415f096a25c12779a581c4745 /lib/Signaling
parent1ace3ba9381035b680c32f6e987a2a9ee8e5ad25 (diff)
Send signaling message
Signed-off-by: Vitor Mattos <vitor@php.rio>
Diffstat (limited to 'lib/Signaling')
-rw-r--r--lib/Signaling/Listener.php48
1 files changed, 47 insertions, 1 deletions
diff --git a/lib/Signaling/Listener.php b/lib/Signaling/Listener.php
index d6b835b6a..6929dea60 100644
--- a/lib/Signaling/Listener.php
+++ b/lib/Signaling/Listener.php
@@ -31,6 +31,7 @@ use OCA\Talk\Events\DuplicatedParticipantEvent;
use OCA\Talk\Events\EndCallForEveryoneEvent;
use OCA\Talk\Events\ModifyEveryoneEvent;
use OCA\Talk\Events\ModifyParticipantEvent;
+use OCA\Talk\Events\ModifyRoomEvent;
use OCA\Talk\Events\ParticipantEvent;
use OCA\Talk\Events\RemoveParticipantEvent;
use OCA\Talk\Events\RemoveUserEvent;
@@ -39,6 +40,7 @@ use OCA\Talk\GuestManager;
use OCA\Talk\Participant;
use OCA\Talk\Room;
use OCA\Talk\Service\ParticipantService;
+use OCA\Talk\Service\RoomService;
use OCA\Talk\Service\SessionService;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Server;
@@ -51,7 +53,9 @@ class Listener {
protected static function isUsingInternalSignaling(): bool {
$config = Server::get(Config::class);
- return $config->getSignalingMode() === Config::SIGNALING_INTERNAL;
+ $isSignalingInternal = $config->getSignalingMode() === Config::SIGNALING_INTERNAL;
+ $isSignalingDev = $config->isSignalingDev();
+ return $isSignalingInternal && !$isSignalingDev;
}
protected static function registerInternalSignaling(IEventDispatcher $dispatcher): void {
@@ -96,6 +100,7 @@ class Listener {
$dispatcher->addListener(Room::EVENT_AFTER_SESSION_LEAVE_CALL, [self::class, 'notifyAfterJoinUpdateAndLeave']);
$dispatcher->addListener(Room::EVENT_AFTER_END_CALL_FOR_EVERYONE, [self::class, 'sendEndCallForEveryone']);
$dispatcher->addListener(Room::EVENT_AFTER_GUESTS_CLEAN, [self::class, 'notifyParticipantsAfterGuestClean']);
+ $dispatcher->addListener(Room::EVENT_AFTER_SET_CALL_RECORDING, [self::class, 'sendSignalingMessageWhenToggleRecording']);
$dispatcher->addListener(GuestManager::EVENT_AFTER_NAME_UPDATE, [self::class, 'notifyParticipantsAfterNameUpdated']);
$dispatcher->addListener(ChatManager::EVENT_AFTER_MESSAGE_SEND, [self::class, 'notifyUsersViaExternalSignalingToRefreshTheChat']);
$dispatcher->addListener(ChatManager::EVENT_AFTER_SYSTEM_MESSAGE_SEND, [self::class, 'notifyUsersViaExternalSignalingToRefreshTheChat']);
@@ -362,4 +367,45 @@ class Listener {
];
$notifier->sendRoomMessage($room, $message);
}
+
+ public static function sendSignalingMessageWhenToggleRecording(ModifyRoomEvent $event): void {
+ if (self::isUsingInternalSignaling()) {
+ return;
+ }
+ if ($event->getParameter() !== 'callRecording') {
+ return;
+ }
+
+ $room = $event->getRoom();
+ $message = [
+ 'type' => self::getCallRecordingType($event),
+ 'recording' => [
+ 'enabled' => self::isRecordingEnabled($event),
+ ],
+ ];
+
+ $notifier = Server::get(BackendNotifier::class);
+ $notifier->sendRoomMessage($room, $message);
+ }
+
+ private static function isRecordingEnabled(ModifyRoomEvent $event): bool {
+ $newStatus = $event->getNewValue();
+ $startStatus = [
+ RoomService::RECORDING_VIDEO,
+ RoomService::RECORDING_AUDIO,
+ ];
+ return in_array($newStatus, $startStatus);
+ }
+
+ /**
+ * @param ModifyRoomEvent $event
+ * @return string audio|video
+ */
+ private static function getCallRecordingType(ModifyRoomEvent $event): string {
+ $newValue = $event->getNewValue();
+ $oldValue = $event->getOldValue();
+ $isAudioStatus = $newValue === RoomService::RECORDING_AUDIO
+ || $oldValue === RoomService::RECORDING_AUDIO;
+ return $isAudioStatus ? 'recording_audio' : 'recording_video';
+ }
}