registerMiddleWare(CanUseTalkMiddleware::class); $context->registerMiddleWare(InjectionMiddleware::class); $context->registerMiddleWare(ParameterOutOfRangeMiddleware::class); $context->registerCapability(Capabilities::class); // Listeners to load the UI and integrate it into other apps $context->registerEventListener(AddContentSecurityPolicyEvent::class, CSPListener::class); $context->registerEventListener(AddFeaturePolicyEvent::class, FeaturePolicyListener::class); $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, UnifiedSearchCSSLoader::class); $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, DeckPluginLoader::class); $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, MapsPluginLoader::class); $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, UnifiedSearchFilterPlugin::class); $context->registerEventListener(RegisterOperationsEvent::class, RegisterOperationsListener::class); $context->registerEventListener(BeforeTemplateRenderedEvent::class, PublicShareTemplateLoader::class); $context->registerEventListener(BeforeTemplateRenderedEvent::class, PublicShareAuthTemplateLoader::class); $context->registerEventListener(LoadSidebar::class, FilesTemplateLoader::class); $context->registerEventListener(BeforePreferenceSetEvent::class, BeforePreferenceSetEventListener::class); // Activity listeners $context->registerEventListener(AttendeesAddedEvent::class, ActivityListener::class); $context->registerEventListener(CallEndedEvent::class, ActivityListener::class); $context->registerEventListener(CallEndedForEveryoneEvent::class, ActivityListener::class); // Bot listeners $context->registerEventListener(BotDisabledEvent::class, BotListener::class); $context->registerEventListener(BotEnabledEvent::class, BotListener::class); $context->registerEventListener(BotInstallEvent::class, BotListener::class); $context->registerEventListener(BotUninstallEvent::class, BotListener::class); $context->registerEventListener(ChatMessageSentEvent::class, BotListener::class); $context->registerEventListener(ReactionAddedEvent::class, BotListener::class); $context->registerEventListener(ReactionRemovedEvent::class, BotListener::class); $context->registerEventListener(SystemMessageSentEvent::class, BotListener::class); // Chat listeners $context->registerEventListener(BeforeRoomsFetchEvent::class, ChangelogListener::class); $context->registerEventListener(RoomDeletedEvent::class, ChatListener::class); $context->registerEventListener(BeforeRoomsFetchEvent::class, NoteToSelfListener::class); $context->registerEventListener(BeforeRoomsFetchEvent::class, SampleConversationsListener::class); $context->registerEventListener(AttendeesAddedEvent::class, SystemMessageListener::class); $context->registerEventListener(AttendeeRemovedEvent::class, SystemMessageListener::class); $context->registerEventListener(AttendeesRemovedEvent::class, SystemMessageListener::class); $context->registerEventListener(BeforeDuplicateShareSentEvent::class, SystemMessageListener::class); $context->registerEventListener(BeforeParticipantModifiedEvent::class, SystemMessageListener::class); $context->registerEventListener(BeforeShareCreatedEvent::class, SystemMessageListener::class); $context->registerEventListener(LobbyModifiedEvent::class, SystemMessageListener::class); $context->registerEventListener(ParticipantModifiedEvent::class, SystemMessageListener::class, 100); $context->registerEventListener(RoomCreatedEvent::class, SystemMessageListener::class); $context->registerEventListener(RoomModifiedEvent::class, SystemMessageListener::class); $context->registerEventListener(ShareCreatedEvent::class, SystemMessageListener::class); // Chat parser $context->registerEventListener(MessageParseEvent::class, Changelog::class, -75); $context->registerEventListener(MessageParseEvent::class, ReactionParser::class); $context->registerEventListener(MessageParseEvent::class, SystemMessage::class); $context->registerEventListener(MessageParseEvent::class, SystemMessage::class, 9999); $context->registerEventListener(MessageParseEvent::class, UserMention::class, -100); // Calendar listeners $context->registerEventListener(CalendarObjectCreatedEvent::class, CalDavEventListener::class); $context->registerEventListener(CalendarObjectUpdatedEvent::class, CalDavEventListener::class); // Files integration listeners $context->registerEventListener(BeforeGuestJoinedRoomEvent::class, FilesListener::class); $context->registerEventListener(BeforeUserJoinedRoomEvent::class, FilesListener::class); // Collaborators / Auto complete listeners $context->registerEventListener(AutoCompleteFilterEvent::class, CollaboratorsListener::class); // Reference listeners $context->registerEventListener(AttendeesAddedEvent::class, ReferenceInvalidationListener::class); $context->registerEventListener(AttendeesRemovedEvent::class, ReferenceInvalidationListener::class); $context->registerEventListener(LobbyModifiedEvent::class, ReferenceInvalidationListener::class); $context->registerEventListener(RoomDeletedEvent::class, ReferenceInvalidationListener::class); $context->registerEventListener(RoomModifiedEvent::class, ReferenceInvalidationListener::class); // Resources listeners $context->registerEventListener(AttendeesAddedEvent::class, ResourceListener::class); $context->registerEventListener(AttendeesRemovedEvent::class, ResourceListener::class); $context->registerEventListener(EmailInvitationSentEvent::class, ResourceListener::class); $context->registerEventListener(RoomDeletedEvent::class, ResourceListener::class); $context->registerEventListener(RoomModifiedEvent::class, ResourceListener::class); // Sharing listeners $context->registerEventListener(BeforeShareCreatedEvent::class, ShareListener::class, 1000); $context->registerEventListener(VerifyMountPointEvent::class, ShareListener::class, 1000); $context->registerEventListener(RoomDeletedEvent::class, ShareListener::class); // Group and Circles listeners $context->registerEventListener(GroupDeletedEvent::class, GroupDeletedListener::class); $context->registerEventListener(GroupChangedEvent::class, DisplayNameListener::class); $context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class); $context->registerEventListener(UserChangedEvent::class, DisplayNameListener::class); $context->registerEventListener(UserAddedEvent::class, GroupMembershipListener::class); $context->registerEventListener(UserRemovedEvent::class, GroupMembershipListener::class); $context->registerEventListener(CircleDestroyedEvent::class, CircleDeletedListener::class); $context->registerEventListener(EditingCircleEvent::class, CircleEditedListener::class); $context->registerEventListener(CircleEditedEvent::class, CircleEditedListener::class); $context->registerEventListener(AddingCircleMemberEvent::class, CircleMembershipListener::class); $context->registerEventListener(RemovingCircleMemberEvent::class, CircleMembershipListener::class); // Notification listeners $context->registerEventListener(AttendeesAddedEvent::class, NotificationListener::class); $context->registerEventListener(BeforeCallStartedEvent::class, NotificationListener::class); $context->registerEventListener(CallStartedEvent::class, NotificationListener::class); $context->registerEventListener(CallNotificationSendEvent::class, NotificationListener::class); $context->registerEventListener(ParticipantModifiedEvent::class, NotificationListener::class); $context->registerEventListener(UserJoinedRoomEvent::class, NotificationListener::class); // Call listeners $context->registerEventListener(BeforeUserLoggedOutEvent::class, BeforeUserLoggedOutListener::class); $context->registerEventListener(BeforeParticipantModifiedEvent::class, RestrictStartingCallsListener::class, 1000); $context->registerEventListener(BeforeParticipantModifiedEvent::class, StatusListener::class); $context->registerEventListener(CallEndedForEveryoneEvent::class, StatusListener::class); // Recording listeners $context->registerEventListener(RoomDeletedEvent::class, RecordingListener::class); $context->registerEventListener(CallEndedEvent::class, RecordingListener::class); $context->registerEventListener(CallEndedForEveryoneEvent::class, RecordingListener::class); $context->registerEventListener(TaskSuccessfulEvent::class, RecordingListener::class); $context->registerEventListener(TaskFailedEvent::class, RecordingListener::class); // Federation listeners $context->registerEventListener(BeforeRoomDeletedEvent::class, TalkV1BeforeRoomDeletedListener::class); $context->registerEventListener(ParticipantModifiedEvent::class, TalkV1ParticipantModifiedListener::class); $context->registerEventListener(CallEndedEvent::class, TalkV1RoomModifiedListener::class); $context->registerEventListener(CallEndedForEveryoneEvent::class, TalkV1RoomModifiedListener::class); $context->registerEventListener(CallStartedEvent::class, TalkV1RoomModifiedListener::class); $context->registerEventListener(LobbyModifiedEvent::class, TalkV1RoomModifiedListener::class); $context->registerEventListener(RoomModifiedEvent::class, TalkV1RoomModifiedListener::class); $context->registerEventListener(ChatMessageSentEvent::class, TalkV1MessageSentListener::class); $context->registerEventListener(SystemMessageSentEvent::class, TalkV1MessageSentListener::class); $context->registerEventListener(SystemMessagesMultipleSentEvent::class, TalkV1MessageSentListener::class); $context->registerEventListener(AttendeeRemovedEvent::class, TalkV1CancelRetryOCMListener::class); $context->registerEventListener(ResourceTypeRegisterEvent::class, ResourceTypeRegisterListener::class); // Signaling listeners (External) $context->registerEventListener(AttendeesAddedEvent::class, SignalingListener::class); $context->registerEventListener(AttendeeRemovedEvent::class, SignalingListener::class); $context->registerEventListener(AttendeesRemovedEvent::class, SignalingListener::class); $context->registerEventListener(SessionLeftRoomEvent::class, SignalingListener::class); $context->registerEventListener(CallEndedForEveryoneEvent::class, SignalingListener::class); $context->registerEventListener(GuestsCleanedUpEvent::class, SignalingListener::class); $context->registerEventListener(LobbyModifiedEvent::class, SignalingListener::class); $context->registerEventListener(BeforeRoomSyncedEvent::class, SignalingListener::class); $context->registerEventListener(RoomSyncedEvent::class, SignalingListener::class); $context->registerEventListener(RoomExtendedEvent::class, SignalingListener::class); $context->registerEventListener(ChatMessageSentEvent::class, SignalingListener::class); $context->registerEventListener(SystemMessageSentEvent::class, SignalingListener::class); $context->registerEventListener(SystemMessagesMultipleSentEvent::class, SignalingListener::class); $context->registerEventListener(ReactionAddedEvent::class, SignalingListener::class); $context->registerEventListener(ReactionRemovedEvent::class, SignalingListener::class); // Signaling listeners (Both) $context->registerEventListener(BeforeRoomDeletedEvent::class, SignalingListener::class); $context->registerEventListener(ParticipantModifiedEvent::class, SignalingListener::class, 50); $context->registerEventListener(RoomModifiedEvent::class, SignalingListener::class); // Signaling listeners (Internal) $context->registerEventListener(BeforeSessionLeftRoomEvent::class, SignalingListener::class); $context->registerEventListener(BeforeAttendeeRemovedEvent::class, SignalingListener::class); $context->registerEventListener(GuestJoinedRoomEvent::class, SignalingListener::class); $context->registerEventListener(UserJoinedRoomEvent::class, SignalingListener::class); // Threads listeners $context->registerEventListener(AttendeesRemovedEvent::class, ThreadListener::class); // Video verification $context->registerEventListener(BeforeUserJoinedRoomEvent::class, PublicShareAuthListener::class); $context->registerEventListener(BeforeGuestJoinedRoomEvent::class, PublicShareAuthListener::class); $context->registerEventListener(BeforeAttendeesAddedEvent::class, PublicShareAuthListener::class); $context->registerEventListener(AttendeeRemovedEvent::class, PublicShareAuthListener::class); $context->registerEventListener(SessionLeftRoomEvent::class, PublicShareAuthListener::class); $context->registerEventListener(GuestsCleanedUpEvent::class, PublicShareAuthListener::class); // Register other integrations of Talk $context->registerSearchProvider(ConversationSearch::class); $context->registerSearchProvider(CurrentMessageSearch::class); $context->registerSearchProvider(MessageSearch::class); // Fix database issues $context->registerEventListener(AddMissingIndicesEvent::class, AddMissingIndicesListener::class); $context->registerDashboardWidget(TalkWidget::class); $context->registerNotifierService(Notifier::class); $context->registerProfileLinkAction(TalkAction::class); $context->registerReferenceProvider(TalkReferenceProvider::class); $context->registerTalkBackend(TalkBackend::class); $context->registerTeamResourceProvider(TalkTeamResourceProvider::class); $context->registerSetupCheck(Configuration::class); $context->registerSetupCheck(HighPerformanceBackend::class); $context->registerSetupCheck(FederationLockCache::class); $context->registerSetupCheck(NotifyPush::class); $context->registerSetupCheck(RecordingBackend::class); $context->registerSetupCheck(SIPConfiguration::class); $context->registerSetupCheck(BackgroundBlurLoading::class); } #[\Override] public function boot(IBootContext $context): void { $context->injectFn([$this, 'registerCollaborationResourceProvider']); $context->injectFn([$this, 'registerClientLinks']); $context->injectFn([$this, 'registerNavigationLink']); $context->injectFn([$this, 'registerCloudFederationProviderManager']); } public function registerCollaborationResourceProvider(IProviderManager $resourceManager, IEventDispatcher $dispatcher): void { $resourceManager->registerResourceProvider(ConversationProvider::class); $dispatcher->addListener(LoadAdditionalScriptsEvent::class, static function (): void { Util::addScript(self::APP_ID, 'talk-collections'); }); } public function registerClientLinks(IAppManager $appManager, IManager $settingManager): void { if ($appManager->isEnabledForUser('firstrunwizard')) { $settingManager->registerSetting('personal', Personal::class); } } public function registerNavigationLink(INavigationManager $navigationManager): void { $navigationManager->add(static function () { $config = Server::get(Config::class); $userSession = Server::get(IUserSession::class); $urlGenerator = Server::get(IURLGenerator::class); $l = Server::get(IFactory::class)->get(self::APP_ID); $user = $userSession->getUser(); return [ 'id' => self::APP_ID, 'name' => $l->t('F7Talk'), 'href' => $urlGenerator->linkToRouteAbsolute('f7talk.Page.index'), 'icon' => $urlGenerator->imagePath(self::APP_ID, 'app.svg'), 'order' => -5, 'type' => $user instanceof IUser && !$config->isDisabledForUser($user) ? 'link' : 'hidden', ]; }); } public function registerCloudFederationProviderManager( IConfig $config, ICloudFederationProviderManager $manager, ): void { if ($config->getAppValue('f7talk', 'federation_enabled', 'no') !== 'yes') { return; } $manager->addCloudFederationProvider( 'talk-room', 'F7Talk Federation', static fn (): ICloudFederationProvider => Server::get(CloudFederationProviderTalk::class) ); } }