diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml index ddf83a9f0503b..22fb1486302f4 100644 --- a/apps/files_sharing/appinfo/info.xml +++ b/apps/files_sharing/appinfo/info.xml @@ -35,6 +35,7 @@ Turning the feature off removes shared files and folders on the server for all s OCA\Files_Sharing\ExpireSharesJob OCA\Files_Sharing\SharesReminderJob OCA\Files_Sharing\BackgroundJob\FederatedSharesDiscoverJob + OCA\Files_Sharing\BackgroundJob\ExternalShareScanJob diff --git a/apps/files_sharing/composer/composer/autoload_classmap.php b/apps/files_sharing/composer/composer/autoload_classmap.php index 1307b452bf045..36aa12de200aa 100644 --- a/apps/files_sharing/composer/composer/autoload_classmap.php +++ b/apps/files_sharing/composer/composer/autoload_classmap.php @@ -20,6 +20,7 @@ 'OCA\\Files_Sharing\\Activity\\Settings\\ShareActivitySettings' => $baseDir . '/../lib/Activity/Settings/ShareActivitySettings.php', 'OCA\\Files_Sharing\\Activity\\Settings\\Shared' => $baseDir . '/../lib/Activity/Settings/Shared.php', 'OCA\\Files_Sharing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php', + 'OCA\\Files_Sharing\\BackgroundJob\\ExternalShareScanJob' => $baseDir . '/../lib/BackgroundJob/ExternalShareScanJob.php', 'OCA\\Files_Sharing\\BackgroundJob\\FederatedSharesDiscoverJob' => $baseDir . '/../lib/BackgroundJob/FederatedSharesDiscoverJob.php', 'OCA\\Files_Sharing\\Cache' => $baseDir . '/../lib/Cache.php', 'OCA\\Files_Sharing\\Capabilities' => $baseDir . '/../lib/Capabilities.php', diff --git a/apps/files_sharing/composer/composer/autoload_static.php b/apps/files_sharing/composer/composer/autoload_static.php index e818b8c677dba..0550359c85807 100644 --- a/apps/files_sharing/composer/composer/autoload_static.php +++ b/apps/files_sharing/composer/composer/autoload_static.php @@ -35,6 +35,7 @@ class ComposerStaticInitFiles_Sharing 'OCA\\Files_Sharing\\Activity\\Settings\\ShareActivitySettings' => __DIR__ . '/..' . '/../lib/Activity/Settings/ShareActivitySettings.php', 'OCA\\Files_Sharing\\Activity\\Settings\\Shared' => __DIR__ . '/..' . '/../lib/Activity/Settings/Shared.php', 'OCA\\Files_Sharing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php', + 'OCA\\Files_Sharing\\BackgroundJob\\ExternalShareScanJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/ExternalShareScanJob.php', 'OCA\\Files_Sharing\\BackgroundJob\\FederatedSharesDiscoverJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/FederatedSharesDiscoverJob.php', 'OCA\\Files_Sharing\\Cache' => __DIR__ . '/..' . '/../lib/Cache.php', 'OCA\\Files_Sharing\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php', diff --git a/apps/files_sharing/lib/BackgroundJob/ExternalShareScanJob.php b/apps/files_sharing/lib/BackgroundJob/ExternalShareScanJob.php new file mode 100644 index 0000000000000..597e19bbcebe1 --- /dev/null +++ b/apps/files_sharing/lib/BackgroundJob/ExternalShareScanJob.php @@ -0,0 +1,49 @@ +config->getSystemValueBool('files_no_background_scan', false)) { + return; + } + + [$userId, $path] = $argument; + try { + $this->rootFolder + ->getUserFolder($userId) + ->get($path) + ->getStorage() + ->getScanner() + ->scan(''); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), [ 'exception' => $e ]); + } + } +} diff --git a/apps/files_sharing/lib/Controller/ExternalSharesController.php b/apps/files_sharing/lib/Controller/ExternalSharesController.php index 201a460d32a88..79acd0bca67c0 100644 --- a/apps/files_sharing/lib/Controller/ExternalSharesController.php +++ b/apps/files_sharing/lib/Controller/ExternalSharesController.php @@ -8,10 +8,12 @@ namespace OCA\Files_Sharing\Controller; +use OCA\Files_Sharing\BackgroundJob\ExternalShareScanJob; use OCA\Files_Sharing\External\Manager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\JSONResponse; +use OCP\BackgroundJob\IJobList; use OCP\IRequest; /** @@ -24,6 +26,7 @@ public function __construct( string $appName, IRequest $request, private readonly Manager $externalManager, + private IJobList $jobList, ) { parent::__construct($appName, $request); } @@ -44,6 +47,7 @@ public function create(string $id): JSONResponse { $externalShare = $this->externalManager->getShare($id); if ($externalShare !== false) { $this->externalManager->acceptShare($externalShare); + $this->jobList->add(ExternalShareScanJob::class, [$externalShare->getUser(), $externalShare->getMountpoint()]); } return new JSONResponse(); } diff --git a/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php b/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php index e926cd51ba57c..61b29fa771cfd 100644 --- a/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php +++ b/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php @@ -12,6 +12,7 @@ use OCA\Files_Sharing\External\ExternalShare; use OCA\Files_Sharing\External\Manager; use OCP\AppFramework\Http\JSONResponse; +use OCP\BackgroundJob\IJobList; use OCP\IRequest; use PHPUnit\Framework\MockObject\MockObject; @@ -23,11 +24,13 @@ class ExternalShareControllerTest extends \Test\TestCase { private IRequest&MockObject $request; private Manager&MockObject $externalManager; + private IJobList&MockObject $jobList; protected function setUp(): void { parent::setUp(); $this->request = $this->createMock(IRequest::class); $this->externalManager = $this->createMock(Manager::class); + $this->jobList = $this->createMock(IJobList::class); } public function getExternalShareController(): ExternalSharesController { @@ -35,6 +38,7 @@ public function getExternalShareController(): ExternalSharesController { 'files_sharing', $this->request, $this->externalManager, + $this->jobList, ); } @@ -58,6 +62,9 @@ public function testCreate(): void { ->expects($this->once()) ->method('acceptShare') ->with($share); + $this->jobList + ->expects($this->once()) + ->method('add'); $this->assertEquals(new JSONResponse(), $this->getExternalShareController()->create('4')); }