2014-08-09 04:39:12 -04:00
< ? php
2020-06-17 04:16:53 -04:00
declare ( strict_types = 1 );
2014-08-09 04:39:12 -04:00
/**
2024-05-28 10:42:42 -04:00
* SPDX - FileCopyrightText : 2016 - 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX - FileCopyrightText : 2016 ownCloud , Inc .
* SPDX - License - Identifier : AGPL - 3.0 - only
2014-08-09 04:39:12 -04:00
*/
2015-03-21 15:12:55 -04:00
namespace OCA\Files\AppInfo ;
2014-08-09 04:39:12 -04:00
2020-07-16 11:08:03 -04:00
use Closure ;
2025-03-18 11:22:44 -04:00
use OCA\Files\AdvancedCapabilities ;
2019-11-22 14:52:10 -05:00
use OCA\Files\Capabilities ;
2019-02-22 06:21:08 -05:00
use OCA\Files\Collaboration\Resources\Listener ;
2019-01-24 05:43:18 -05:00
use OCA\Files\Collaboration\Resources\ResourceProvider ;
2025-09-25 04:29:17 -04:00
use OCA\Files\ConfigLexicon ;
2014-08-09 04:39:12 -04:00
use OCA\Files\Controller\ApiController ;
2024-11-28 01:58:39 -05:00
use OCA\Files\Dashboard\FavoriteWidget ;
2022-06-03 01:15:17 -04:00
use OCA\Files\DirectEditingCapabilities ;
2024-03-03 07:28:40 -05:00
use OCA\Files\Event\LoadSearchPlugins ;
2019-12-03 12:20:46 -05:00
use OCA\Files\Event\LoadSidebar ;
2024-03-03 07:28:40 -05:00
use OCA\Files\Listener\LoadSearchPluginsListener ;
2019-12-03 12:20:46 -05:00
use OCA\Files\Listener\LoadSidebarListener ;
2024-10-24 10:10:54 -04:00
use OCA\Files\Listener\NodeAddedToFavoriteListener ;
use OCA\Files\Listener\NodeRemovedFromFavoriteListener ;
2022-09-01 14:09:33 -04:00
use OCA\Files\Listener\RenderReferenceEventListener ;
2023-11-29 13:05:35 -05:00
use OCA\Files\Listener\SyncLivePhotosListener ;
2019-10-29 07:22:15 -04:00
use OCA\Files\Notification\Notifier ;
2020-06-17 04:29:50 -04:00
use OCA\Files\Search\FilesSearchProvider ;
2019-11-22 14:52:10 -05:00
use OCA\Files\Service\TagService ;
2022-12-14 10:54:35 -05:00
use OCA\Files\Service\UserConfig ;
2023-04-14 06:40:08 -04:00
use OCA\Files\Service\ViewConfig ;
2020-07-16 04:26:41 -04:00
use OCP\Activity\IManager as IActivityManager ;
2014-08-09 04:39:12 -04:00
use OCP\AppFramework\App ;
2020-06-17 04:16:53 -04:00
use OCP\AppFramework\Bootstrap\IBootContext ;
use OCP\AppFramework\Bootstrap\IBootstrap ;
use OCP\AppFramework\Bootstrap\IRegistrationContext ;
2022-09-01 14:09:33 -04:00
use OCP\Collaboration\Reference\RenderReferenceEvent ;
2019-09-29 14:57:00 -04:00
use OCP\Collaboration\Resources\IProviderManager ;
2025-08-06 09:21:33 -04:00
use OCP\Files\Cache\CacheEntriesRemovedEvent ;
2024-03-08 09:08:57 -05:00
use OCP\Files\Events\Node\BeforeNodeCopiedEvent ;
2023-11-29 13:05:35 -05:00
use OCP\Files\Events\Node\BeforeNodeDeletedEvent ;
use OCP\Files\Events\Node\BeforeNodeRenamedEvent ;
2024-03-08 09:08:57 -05:00
use OCP\Files\Events\Node\NodeCopiedEvent ;
2024-10-24 10:10:54 -04:00
use OCP\Files\Events\NodeAddedToFavorite ;
use OCP\Files\Events\NodeRemovedFromFavorite ;
2024-07-30 21:19:55 -04:00
use OCP\Files\IRootFolder ;
2020-07-16 04:26:41 -04:00
use OCP\IConfig ;
2024-07-30 21:19:55 -04:00
use OCP\IL10N ;
2020-07-16 04:26:41 -04:00
use OCP\IPreview ;
use OCP\IRequest ;
2020-06-17 04:16:53 -04:00
use OCP\IServerContainer ;
2020-07-16 04:26:41 -04:00
use OCP\ITagManager ;
use OCP\IUserSession ;
use OCP\Share\IManager as IShareManager ;
2020-06-17 04:16:53 -04:00
use OCP\Util ;
2020-07-16 04:26:41 -04:00
use Psr\Container\ContainerInterface ;
2024-07-30 21:19:55 -04:00
use Psr\Log\LoggerInterface ;
2014-08-09 04:39:12 -04:00
2020-06-17 04:16:53 -04:00
class Application extends App implements IBootstrap {
2019-10-29 07:22:15 -04:00
public const APP_ID = 'files' ;
2020-10-05 09:12:57 -04:00
public function __construct ( array $urlParams = []) {
2019-10-29 07:22:15 -04:00
parent :: __construct ( self :: APP_ID , $urlParams );
2020-06-17 04:16:53 -04:00
}
2014-08-09 04:39:12 -04:00
2020-06-17 04:16:53 -04:00
public function register ( IRegistrationContext $context ) : void {
2014-08-09 04:39:12 -04:00
/**
* Controllers
*/
2020-07-16 04:26:41 -04:00
$context -> registerService ( 'APIController' , function ( ContainerInterface $c ) {
2020-06-17 04:16:53 -04:00
/** @var IServerContainer $server */
2020-07-16 04:26:41 -04:00
$server = $c -> get ( IServerContainer :: class );
2020-06-17 04:16:53 -04:00
2014-08-09 04:39:12 -04:00
return new ApiController (
2020-07-16 04:26:41 -04:00
$c -> get ( 'AppName' ),
$c -> get ( IRequest :: class ),
$c -> get ( IUserSession :: class ),
$c -> get ( TagService :: class ),
$c -> get ( IPreview :: class ),
$c -> get ( IShareManager :: class ),
$c -> get ( IConfig :: class ),
2022-12-14 10:54:35 -05:00
$server -> getUserFolder (),
$c -> get ( UserConfig :: class ),
2023-04-14 06:40:08 -04:00
$c -> get ( ViewConfig :: class ),
2024-07-30 21:19:55 -04:00
$c -> get ( IL10N :: class ),
$c -> get ( IRootFolder :: class ),
$c -> get ( LoggerInterface :: class ),
2014-11-18 12:53:45 -05:00
);
});
/**
* Services
*/
2020-08-17 10:55:16 -04:00
$context -> registerService ( TagService :: class , function ( ContainerInterface $c ) {
2020-06-17 04:16:53 -04:00
/** @var IServerContainer $server */
2020-07-16 04:26:41 -04:00
$server = $c -> get ( IServerContainer :: class );
2020-06-17 04:16:53 -04:00
2014-11-18 12:53:45 -05:00
return new TagService (
2020-07-16 04:26:41 -04:00
$c -> get ( IUserSession :: class ),
$c -> get ( IActivityManager :: class ),
$c -> get ( ITagManager :: class ) -> load ( self :: APP_ID ),
2020-06-17 04:16:53 -04:00
$server -> getUserFolder (),
2014-11-18 12:53:45 -05:00
);
});
2015-03-21 15:12:55 -04:00
/*
* Register capabilities
*/
2020-06-17 04:16:53 -04:00
$context -> registerCapability ( Capabilities :: class );
2025-03-18 11:22:44 -04:00
$context -> registerCapability ( AdvancedCapabilities :: class );
2022-06-03 01:15:17 -04:00
$context -> registerCapability ( DirectEditingCapabilities :: class );
2019-01-24 05:43:18 -05:00
2020-06-17 04:16:53 -04:00
$context -> registerEventListener ( LoadSidebar :: class , LoadSidebarListener :: class );
2022-09-01 14:09:33 -04:00
$context -> registerEventListener ( RenderReferenceEvent :: class , RenderReferenceEventListener :: class );
2023-11-29 13:05:35 -05:00
$context -> registerEventListener ( BeforeNodeRenamedEvent :: class , SyncLivePhotosListener :: class );
$context -> registerEventListener ( BeforeNodeDeletedEvent :: class , SyncLivePhotosListener :: class );
2025-08-06 09:21:33 -04:00
$context -> registerEventListener ( CacheEntriesRemovedEvent :: class , SyncLivePhotosListener :: class , 1 ); // Ensure this happen before the metadata are deleted.
2024-03-08 09:08:57 -05:00
$context -> registerEventListener ( BeforeNodeCopiedEvent :: class , SyncLivePhotosListener :: class );
$context -> registerEventListener ( NodeCopiedEvent :: class , SyncLivePhotosListener :: class );
2024-03-12 13:47:14 -04:00
$context -> registerEventListener ( LoadSearchPlugins :: class , LoadSearchPluginsListener :: class );
2024-10-24 10:10:54 -04:00
$context -> registerEventListener ( NodeAddedToFavorite :: class , NodeAddedToFavoriteListener :: class );
$context -> registerEventListener ( NodeRemovedFromFavorite :: class , NodeRemovedFromFavoriteListener :: class );
2020-06-17 04:29:50 -04:00
$context -> registerSearchProvider ( FilesSearchProvider :: class );
2021-04-16 06:39:08 -04:00
$context -> registerNotifierService ( Notifier :: class );
2024-11-28 01:58:39 -05:00
$context -> registerDashboardWidget ( FavoriteWidget :: class );
2025-09-25 04:29:17 -04:00
$context -> registerConfigLexicon ( ConfigLexicon :: class );
2020-06-17 04:16:53 -04:00
}
public function boot ( IBootContext $context ) : void {
2020-07-16 11:08:03 -04:00
$context -> injectFn ( Closure :: fromCallable ([ $this , 'registerCollaboration' ]));
$context -> injectFn ([ Listener :: class , 'register' ]);
2020-06-17 04:16:53 -04:00
$this -> registerHooks ();
}
2020-07-16 11:08:03 -04:00
private function registerCollaboration ( IProviderManager $providerManager ) : void {
2019-09-29 14:57:00 -04:00
$providerManager -> registerResourceProvider ( ResourceProvider :: class );
2020-06-17 04:16:53 -04:00
}
2019-10-29 07:22:15 -04:00
2020-06-17 04:16:53 -04:00
private function registerHooks () : void {
Util :: connectHook ( '\OCP\Config' , 'js' , '\OCA\Files\App' , 'extendJsConfig' );
}
2014-08-09 04:39:12 -04:00
}