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'));
}