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