diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml index 02631161794b2..42a8bcb635d5d 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 bfb91d049cf81..e8da90c01ca81 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 6991f6bee35d8..9b8d5719dffba 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 7f266ea53a3b7..8760c012181a3 100644 --- a/apps/files_sharing/lib/Controller/ExternalSharesController.php +++ b/apps/files_sharing/lib/Controller/ExternalSharesController.php @@ -7,10 +7,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; /** @@ -23,6 +25,7 @@ public function __construct( string $appName, IRequest $request, private readonly Manager $externalManager, + private IJobList $jobList, ) { parent::__construct($appName, $request); } @@ -43,6 +46,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 620b770511eeb..401594876d4b2 100644 --- a/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php +++ b/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php @@ -11,6 +11,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; @@ -22,11 +23,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 { @@ -34,6 +37,7 @@ public function getExternalShareController(): ExternalSharesController { 'files_sharing', $this->request, $this->externalManager, + $this->jobList, ); } @@ -57,6 +61,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')); }