aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/Files/SimpleFS
diff options
context:
space:
mode:
Diffstat (limited to 'lib/public/Files/SimpleFS')
-rw-r--r--lib/public/Files/SimpleFS/ISimpleFile.php112
-rw-r--r--lib/public/Files/SimpleFS/ISimpleFolder.php83
-rw-r--r--lib/public/Files/SimpleFS/ISimpleRoot.php45
-rw-r--r--lib/public/Files/SimpleFS/InMemoryFile.php138
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'
+ );
+ }
+}