Skip to content

Commit

Permalink
attempt to listen to RenderReferenceEvent to inject provider list wit…
Browse files Browse the repository at this point in the history
…h initial state

Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
  • Loading branch information
julien-nc committed Dec 6, 2022
1 parent 7ef7268 commit 311527e
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/base.php
Original file line number Diff line number Diff line change
Expand Up @@ -762,6 +762,7 @@ public static function init() {
self::registerAccountHooks();
self::registerResourceCollectionHooks();
self::registerFileReferenceEventListener();
self::registerRenderReferenceEventListener();
self::registerAppRestrictionsHooks();

// Make sure that the application class is not loaded before the database is setup
Expand Down Expand Up @@ -928,6 +929,10 @@ private static function registerFileReferenceEventListener() {
\OC\Collaboration\Reference\File\FileReferenceEventListener::register(Server::get(IEventDispatcher::class));
}

private static function registerRenderReferenceEventListener() {
\OC\Collaboration\Reference\RenderReferenceEventListener::register(Server::get(IEventDispatcher::class));
}

/**
* register hooks for sharing
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

declare(strict_types=1);
/**
* @copyright Copyright (c) 2022 Julien Veyssier <eneiluj@posteo.net>
*
* @author Julien Veyssier <eneiluj@posteo.net>
*
* @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 OC\Collaboration\Reference;

use OCP\AppFramework\Services\IInitialState;
use OCP\Collaboration\Reference\IDiscoverableReferenceProvider;
use OCP\Collaboration\Reference\IReferenceManager;
use OCP\Collaboration\Reference\RenderReferenceEvent;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\EventDispatcher\IEventListener;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;

class RenderReferenceEventListener implements IEventListener {
private IReferenceManager $manager;
private IInitialState $initialStateService;

public function __construct(IReferenceManager $manager, IInitialState $initialStateService) {
$this->manager = $manager;
$this->initialStateService = $initialStateService;
}

public static function register(IEventDispatcher $eventDispatcher): void {
$eventDispatcher->addServiceListener(RenderReferenceEvent::class, RenderReferenceEventListener::class);
}

/**
* @inheritDoc
*/
public function handle(Event $event): void {
if (!($event instanceof RenderReferenceEvent)) {
return;
}

try {
$providers = $this->manager->getDiscoverableProviders();
} catch (ContainerExceptionInterface | NotFoundExceptionInterface $e) {
return;
}

$jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) {
return $provider->jsonSerialize();
}, $providers);
$this->initialStateService->provideInitialState('reference-provider-list', $jsonProviders);
}
}

0 comments on commit 311527e

Please sign in to comment.