diff options
Diffstat (limited to 'lib/public/Files/SimpleFS')
-rw-r--r-- | lib/public/Files/SimpleFS/ISimpleFile.php | 112 | ||||
-rw-r--r-- | lib/public/Files/SimpleFS/ISimpleFolder.php | 83 | ||||
-rw-r--r-- | lib/public/Files/SimpleFS/ISimpleRoot.php | 45 | ||||
-rw-r--r-- | lib/public/Files/SimpleFS/InMemoryFile.php | 138 |
4 files changed, 378 insertions, 0 deletions
diff --git a/lib/public/Files/SimpleFS/ISimpleFile.php b/lib/public/Files/SimpleFS/ISimpleFile.php new file mode 100644 index 00000000000..4e77299ab00 --- /dev/null +++ b/lib/public/Files/SimpleFS/ISimpleFile.php @@ -0,0 +1,112 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\Files\SimpleFS; + +use OCP\Files\GenericFileException; +use OCP\Files\NotFoundException; +use OCP\Files\NotPermittedException; +use OCP\Lock\LockedException; + +/** + * This interface allows to manage simple files. + * + * This interface must not be implemented in your application but + * instead should be used as a service and injected in your code with + * dependency injection. + * + * @since 11.0.0 + */ +interface ISimpleFile { + /** + * Get the name + * + * @since 11.0.0 + */ + public function getName(): string; + + /** + * Get the size in bytes + * + * @since 11.0.0 + */ + public function getSize(): int|float; + + /** + * Get the ETag + * + * @since 11.0.0 + */ + public function getETag(): string; + + /** + * Get the last modification time + * + * @since 11.0.0 + */ + public function getMTime(): int; + + /** + * Get the content + * + * @throws GenericFileException + * @throws LockedException + * @throws NotFoundException + * @throws NotPermittedException + * @since 11.0.0 + */ + public function getContent(): string; + + /** + * Overwrite the file + * + * @param string|resource $data + * @throws GenericFileException + * @throws LockedException + * @throws NotFoundException + * @throws NotPermittedException + * @since 11.0.0 + */ + public function putContent($data): void; + + /** + * Delete the file + * + * @throws NotPermittedException + * @since 11.0.0 + */ + public function delete(): void; + + /** + * Get the MimeType + * + * @since 11.0.0 + */ + public function getMimeType(): string; + + /** + * @since 24.0.0 + */ + public function getExtension(): string; + + /** + * Open the file as stream for reading, resulting resource can be operated as stream like the result from php's own fopen + * + * @return resource|false + * @throws \OCP\Files\NotPermittedException + * @since 14.0.0 + */ + public function read(); + + /** + * Open the file as stream for writing, resulting resource can be operated as stream like the result from php's own fopen + * + * @return resource|bool + * @throws \OCP\Files\NotPermittedException + * @since 14.0.0 + */ + public function write(); +} diff --git a/lib/public/Files/SimpleFS/ISimpleFolder.php b/lib/public/Files/SimpleFS/ISimpleFolder.php new file mode 100644 index 00000000000..95efc676688 --- /dev/null +++ b/lib/public/Files/SimpleFS/ISimpleFolder.php @@ -0,0 +1,83 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\Files\SimpleFS; + +use OCP\Files\NotFoundException; +use OCP\Files\NotPermittedException; + +/** + * Interface ISimpleFolder + * + * @since 11.0.0 + */ +interface ISimpleFolder { + /** + * Get all the files in a folder + * + * @return ISimpleFile[] + * @since 11.0.0 + */ + public function getDirectoryListing(): array; + + /** + * Check if a file with $name exists + * + * @param string $name + * @return bool + * @since 11.0.0 + */ + public function fileExists(string $name): bool; + + /** + * Get the file named $name from the folder + * + * @throws NotFoundException + * @since 11.0.0 + */ + public function getFile(string $name): ISimpleFile; + + /** + * Creates a new file with $name in the folder + * + * @param string|resource|null $content @since 19.0.0 + * @throws NotPermittedException + * @since 11.0.0 + */ + public function newFile(string $name, $content = null): ISimpleFile; + + /** + * Remove the folder and all the files in it + * + * @throws NotPermittedException + * @since 11.0.0 + */ + public function delete(): void; + + /** + * Get the folder name + * + * @since 11.0.0 + */ + public function getName(): string; + + /** + * Get the folder named $name from the current folder + * + * @throws NotFoundException + * @since 25.0.0 + */ + public function getFolder(string $name): ISimpleFolder; + + /** + * Creates a new folder with $name in the current folder + * + * @param string|resource|null $content @since 19.0.0 + * @throws NotPermittedException + * @since 25.0.0 + */ + public function newFolder(string $path): ISimpleFolder; +} diff --git a/lib/public/Files/SimpleFS/ISimpleRoot.php b/lib/public/Files/SimpleFS/ISimpleRoot.php new file mode 100644 index 00000000000..6be8a1d47c9 --- /dev/null +++ b/lib/public/Files/SimpleFS/ISimpleRoot.php @@ -0,0 +1,45 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\Files\SimpleFS; + +use OCP\Files\NotFoundException; +use OCP\Files\NotPermittedException; + +/** + * Interface ISimpleRoot + * + * @since 11.0.0 + */ +interface ISimpleRoot { + /** + * Get the folder with name $name + * + * @throws NotFoundException + * @throws \RuntimeException + * @since 11.0.0 + */ + public function getFolder(string $name): ISimpleFolder; + + /** + * Get all the Folders + * + * @return ISimpleFolder[] + * @throws NotFoundException + * @throws \RuntimeException + * @since 11.0.0 + */ + public function getDirectoryListing(): array; + + /** + * Create a new folder named $name + * + * @throws NotPermittedException + * @throws \RuntimeException + * @since 11.0.0 + */ + public function newFolder(string $name): ISimpleFolder; +} diff --git a/lib/public/Files/SimpleFS/InMemoryFile.php b/lib/public/Files/SimpleFS/InMemoryFile.php new file mode 100644 index 00000000000..7849b8c879a --- /dev/null +++ b/lib/public/Files/SimpleFS/InMemoryFile.php @@ -0,0 +1,138 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\Files\SimpleFS; + +use OCP\Files\NotPermittedException; + +/** + * This class represents a file that is only hold in memory. + * + * @since 16.0.0 + */ +class InMemoryFile implements ISimpleFile { + /** + * Holds the file name. + */ + private string $name; + + /** + * Holds the file contents. + */ + private string $contents; + + /** + * InMemoryFile constructor. + * + * @param string $name The file name + * @param string $contents The file contents + * @since 16.0.0 + */ + public function __construct(string $name, string $contents) { + $this->name = $name; + $this->contents = $contents; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getName(): string { + return $this->name; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getSize(): int|float { + return strlen($this->contents); + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getETag(): string { + return ''; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getMTime(): int { + return time(); + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getContent(): string { + return $this->contents; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function putContent($data): void { + $this->contents = $data; + } + + /** + * In memory files can't be deleted. + * + * @since 16.0.0 + */ + public function delete(): void { + // unimplemented for in memory files + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getMimeType(): string { + $fileInfo = new \finfo(FILEINFO_MIME_TYPE); + return $fileInfo->buffer($this->contents); + } + + /** + * {@inheritDoc} + * @since 24.0.0 + */ + public function getExtension(): string { + return \pathinfo($this->name, PATHINFO_EXTENSION); + } + + /** + * Stream reading is unsupported for in memory files. + * + * @throws NotPermittedException + * @since 16.0.0 + */ + public function read() { + throw new NotPermittedException( + 'Stream reading is unsupported for in memory files' + ); + } + + /** + * Stream writing isn't available for in memory files. + * + * @throws NotPermittedException + * @since 16.0.0 + */ + public function write() { + throw new NotPermittedException( + 'Stream writing is unsupported for in memory files' + ); + } +} |