From 102e8e7acc0553407147a718c3277dde6ba39f8a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 2 Feb 2022 17:00:04 +0100 Subject: [PATCH] OCP Talk backend by the spreed app Signed-off-by: Joas Schilling --- lib/AppInfo/Application.php | 3 +++ lib/OCP/Conversation.php | 22 +++++++++++++++++ lib/OCP/TalkBackend.php | 49 +++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 lib/OCP/Conversation.php create mode 100644 lib/OCP/TalkBackend.php diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index f382e66526..24075635bf 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -62,6 +62,7 @@ use OCA\Talk\Middleware\CanUseTalkMiddleware; use OCA\Talk\Middleware\InjectionMiddleware; use OCA\Talk\Notification\Listener as NotificationListener; use OCA\Talk\Notification\Notifier; +use OCA\Talk\OCP\TalkBackend; use OCA\Talk\Profile\TalkAction; use OCA\Talk\PublicShare\TemplateLoader as PublicShareTemplateLoader; use OCA\Talk\PublicShareAuth\Listener as PublicShareAuthListener; @@ -139,6 +140,8 @@ class Application extends App implements IBootstrap { $context->registerDashboardWidget(TalkWidget::class); $context->registerProfileLinkAction(TalkAction::class); + + $context->registerTalkBackend(TalkBackend::class); } public function boot(IBootContext $context): void { diff --git a/lib/OCP/Conversation.php b/lib/OCP/Conversation.php new file mode 100644 index 0000000000..637473c287 --- /dev/null +++ b/lib/OCP/Conversation.php @@ -0,0 +1,22 @@ +url = $url; + $this->room = $room; + } + + public function getAbsoluteUrl(): string { + return $this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $this->room->getToken()]); + } +} diff --git a/lib/OCP/TalkBackend.php b/lib/OCP/TalkBackend.php new file mode 100644 index 0000000000..b00be4f5d5 --- /dev/null +++ b/lib/OCP/TalkBackend.php @@ -0,0 +1,49 @@ +manager = $manager; + $this->participantService = $participantService; + $this->url = $url; + } + + public function createConversation(string $name, array $moderators, IConversationOptions $options): IConversation { + $room = $this->manager->createRoom( + $options->isPublic() ? Room::TYPE_PUBLIC : Room::TYPE_GROUP, + $name + ); + + if (!empty($moderators)) { + $users = []; + foreach ($moderators as $moderator) { + $users[] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $moderator->getUID(), + 'participantType' => Participant::MODERATOR, + ]; + } + + $this->participantService->addUsers($room, $users); + } + + return new Conversation($this->url, $room); + } +}