diff options
Diffstat (limited to 'apps/files_external/lib/Lib/PersonalMount.php')
-rw-r--r-- | apps/files_external/lib/Lib/PersonalMount.php | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/apps/files_external/lib/Lib/PersonalMount.php b/apps/files_external/lib/Lib/PersonalMount.php new file mode 100644 index 00000000000..d9dbddd1449 --- /dev/null +++ b/apps/files_external/lib/Lib/PersonalMount.php @@ -0,0 +1,70 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OCA\Files_External\Lib; + +use OC\Files\Mount\MoveableMount; +use OCA\Files_External\Config\ExternalMountPoint; +use OCA\Files_External\Service\UserStoragesService; +use OCP\Files\Storage\IStorage; +use OCP\Files\Storage\IStorageFactory; + +/** + * Person mount points can be moved by the user + */ +class PersonalMount extends ExternalMountPoint implements MoveableMount { + /** + * @param UserStoragesService $storagesService + * @param int $storageId + * @param IStorage $storage + * @param string $mountpoint + * @param array $arguments (optional) configuration for the storage backend + * @param IStorageFactory $loader + * @param array $mountOptions mount specific options + * @param int $externalStorageId + */ + public function __construct( + protected UserStoragesService $storagesService, + StorageConfig $storageConfig, + /** @var int id of the external storage (mount) (not the numeric id of the resulting storage!) */ + protected $numericExternalStorageId, + $storage, + $mountpoint, + $arguments = null, + $loader = null, + $mountOptions = null, + $mountId = null, + ) { + parent::__construct($storageConfig, $storage, $mountpoint, $arguments, $loader, $mountOptions, $mountId); + } + + /** + * Move the mount point to $target + * + * @param string $target the target mount point + * @return bool + */ + public function moveMount($target) { + $storage = $this->storagesService->getStorage($this->numericExternalStorageId); + // remove "/$user/files" prefix + $targetParts = explode('/', trim($target, '/'), 3); + $storage->setMountPoint($targetParts[2]); + $this->storagesService->updateStorage($storage); + $this->setMountPoint($target); + return true; + } + + /** + * Remove the mount points + * + * @return bool + */ + public function removeMount() { + $this->storagesService->removeStorage($this->numericExternalStorageId); + return true; + } +} |