summaryrefslogtreecommitdiffstats
path: root/lib/public/files
diff options
context:
space:
mode:
Diffstat (limited to 'lib/public/files')
-rw-r--r--lib/public/files/alreadyexistsexception.php11
-rw-r--r--lib/public/files/file.php53
-rw-r--r--lib/public/files/folder.php119
-rw-r--r--lib/public/files/node.php159
-rw-r--r--lib/public/files/notenoughspaceexception.php11
-rw-r--r--lib/public/files/notfoundexception.php11
-rw-r--r--lib/public/files/notpermittedexception.php11
-rw-r--r--lib/public/files/storage.php297
8 files changed, 672 insertions, 0 deletions
diff --git a/lib/public/files/alreadyexistsexception.php b/lib/public/files/alreadyexistsexception.php
new file mode 100644
index 00000000000..32947c7a5c3
--- /dev/null
+++ b/lib/public/files/alreadyexistsexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class AlreadyExistsException extends \Exception {}
diff --git a/lib/public/files/file.php b/lib/public/files/file.php
new file mode 100644
index 00000000000..916b2edd6c4
--- /dev/null
+++ b/lib/public/files/file.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+interface File extends Node {
+ /**
+ * Get the content of the file as string
+ *
+ * @return string
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function getContent();
+
+ /**
+ * Write to the file from string data
+ *
+ * @param string $data
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function putContent($data);
+
+ /**
+ * Get the mimetype of the file
+ *
+ * @return string
+ */
+ public function getMimeType();
+
+ /**
+ * Open the file as stream, resulting resource can be operated as stream like the result from php's own fopen
+ *
+ * @param string $mode
+ * @return resource
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function fopen($mode);
+
+ /**
+ * Compute the hash of the file
+ * Type of hash is set with $type and can be anything supported by php's hash_file
+ *
+ * @param string $type
+ * @param bool $raw
+ * @return string
+ */
+ public function hash($type, $raw = false);
+}
diff --git a/lib/public/files/folder.php b/lib/public/files/folder.php
new file mode 100644
index 00000000000..da7f20fd366
--- /dev/null
+++ b/lib/public/files/folder.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+interface Folder extends Node {
+ /**
+ * Get the full path of an item in the folder within owncloud's filesystem
+ *
+ * @param string $path relative path of an item in the folder
+ * @return string
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function getFullPath($path);
+
+ /**
+ * Get the path of an item in the folder relative to the folder
+ *
+ * @param string $path absolute path of an item in the folder
+ * @throws \OCP\Files\NotFoundException
+ * @return string
+ */
+ public function getRelativePath($path);
+
+ /**
+ * check if a node is a (grand-)child of the folder
+ *
+ * @param \OCP\Files\Node $node
+ * @return bool
+ */
+ public function isSubNode($node);
+
+ /**
+ * get the content of this directory
+ *
+ * @throws \OCP\Files\NotFoundException
+ * @return \OCP\Files\Node[]
+ */
+ public function getDirectoryListing();
+
+ /**
+ * Get the node at $path
+ *
+ * @param string $path relative path of the file or folder
+ * @return \OCP\Files\Node
+ * @throws \OCP\Files\NotFoundException
+ */
+ public function get($path);
+
+ /**
+ * Check if a file or folder exists in the folder
+ *
+ * @param string $path relative path of the file or folder
+ * @return bool
+ */
+ public function nodeExists($path);
+
+ /**
+ * Create a new folder
+ *
+ * @param string $path relative path of the new folder
+ * @return \OCP\Files\Folder
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function newFolder($path);
+
+ /**
+ * Create a new file
+ *
+ * @param string $path relative path of the new file
+ * @return \OCP\Files\File
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function newFile($path);
+
+ /**
+ * search for files with the name matching $query
+ *
+ * @param string $query
+ * @return \OCP\Files\Node[]
+ */
+ public function search($query);
+
+ /**
+ * search for files by mimetype
+ * $mimetype can either be a full mimetype (image/png) or a wildcard mimetype (image)
+ *
+ * @param string $mimetype
+ * @return \OCP\Files\Node[]
+ */
+ public function searchByMime($mimetype);
+
+ /**
+ * get a file or folder inside the folder by it's internal id
+ *
+ * @param int $id
+ * @return \OCP\Files\Node[]
+ */
+ public function getById($id);
+
+ /**
+ * Get the amount of free space inside the folder
+ *
+ * @return int
+ */
+ public function getFreeSpace();
+
+ /**
+ * Check if new files or folders can be created within the folder
+ *
+ * @return bool
+ */
+ public function isCreatable();
+}
diff --git a/lib/public/files/node.php b/lib/public/files/node.php
new file mode 100644
index 00000000000..b3ddf6de621
--- /dev/null
+++ b/lib/public/files/node.php
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+interface Node {
+ /**
+ * Move the file or folder to a new location
+ *
+ * @param string $targetPath the absolute target path
+ * @throws \OCP\Files\NotPermittedException
+ * @return \OCP\Files\Node
+ */
+ public function move($targetPath);
+
+ /**
+ * Delete the file or folder
+ */
+ public function delete();
+
+ /**
+ * Cope the file or folder to a new location
+ *
+ * @param string $targetPath the absolute target path
+ * @return \OCP\Files\Node
+ */
+ public function copy($targetPath);
+
+ /**
+ * Change the modified date of the file or folder
+ * If $mtime is omitted the current time will be used
+ *
+ * @param int $mtime (optional) modified date as unix timestamp
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function touch($mtime = null);
+
+ /**
+ * Get the storage backend the file or folder is stored on
+ *
+ * @return \OCP\Files\Storage
+ * @throws \OCP\Files\NotFoundException
+ */
+ public function getStorage();
+
+ /**
+ * Get the full path of the file or folder
+ *
+ * @return string
+ */
+ public function getPath();
+
+ /**
+ * Get the path of the file or folder relative to the mountpoint of it's storage
+ *
+ * @return string
+ */
+ public function getInternalPath();
+
+ /**
+ * Get the internal file id for the file or folder
+ *
+ * @return int
+ */
+ public function getId();
+
+ /**
+ * Get metadata of the file or folder
+ * The returned array contains the following values:
+ * - mtime
+ * - size
+ *
+ * @return array
+ */
+ public function stat();
+
+ /**
+ * Get the modified date of the file or folder as unix timestamp
+ *
+ * @return int
+ */
+ public function getMTime();
+
+ /**
+ * Get the size of the file or folder in bytes
+ *
+ * @return int
+ */
+ public function getSize();
+
+ /**
+ * Get the Etag of the file or folder
+ * The Etag is an string id used to detect changes to a file or folder,
+ * every time the file or folder is changed the Etag will change to
+ *
+ * @return string
+ */
+ public function getEtag();
+
+
+ /**
+ * Get the permissions of the file or folder as a combination of one or more of the following constants:
+ * - \OCP\PERMISSION_READ
+ * - \OCP\PERMISSION_UPDATE
+ * - \OCP\PERMISSION_CREATE
+ * - \OCP\PERMISSION_DELETE
+ * - \OCP\PERMISSION_SHARE
+ *
+ * @return int
+ */
+ public function getPermissions();
+
+ /**
+ * Check if the file or folder is readable
+ *
+ * @return bool
+ */
+ public function isReadable();
+
+ /**
+ * Check if the file or folder is writable
+ *
+ * @return bool
+ */
+ public function isUpdateable();
+
+ /**
+ * Check if the file or folder is deletable
+ *
+ * @return bool
+ */
+ public function isDeletable();
+
+ /**
+ * Check if the file or folder is shareable
+ *
+ * @return bool
+ */
+ public function isShareable();
+
+ /**
+ * Get the parent folder of the file or folder
+ *
+ * @return Folder
+ */
+ public function getParent();
+
+ /**
+ * Get the filename of the file or folder
+ *
+ * @return string
+ */
+ public function getName();
+}
diff --git a/lib/public/files/notenoughspaceexception.php b/lib/public/files/notenoughspaceexception.php
new file mode 100644
index 00000000000..e51806666ad
--- /dev/null
+++ b/lib/public/files/notenoughspaceexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class NotEnoughSpaceException extends \Exception {}
diff --git a/lib/public/files/notfoundexception.php b/lib/public/files/notfoundexception.php
new file mode 100644
index 00000000000..1ff426a40c6
--- /dev/null
+++ b/lib/public/files/notfoundexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class NotFoundException extends \Exception {}
diff --git a/lib/public/files/notpermittedexception.php b/lib/public/files/notpermittedexception.php
new file mode 100644
index 00000000000..0509de7e829
--- /dev/null
+++ b/lib/public/files/notpermittedexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class NotPermittedException extends \Exception {}
diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php
new file mode 100644
index 00000000000..f32f2073483
--- /dev/null
+++ b/lib/public/files/storage.php
@@ -0,0 +1,297 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+/**
+ * Provide a common interface to all different storage options
+ *
+ * All paths passed to the storage are relative to the storage and should NOT have a leading slash.
+ */
+interface Storage {
+ /**
+ * $parameters is a free form array with the configuration options needed to construct the storage
+ *
+ * @param array $parameters
+ */
+ public function __construct($parameters);
+
+ /**
+ * Get the identifier for the storage,
+ * the returned id should be the same for every storage object that is created with the same parameters
+ * and two storage objects with the same id should refer to two storages that display the same files.
+ *
+ * @return string
+ */
+ public function getId();
+
+ /**
+ * see http://php.net/manual/en/function.mkdir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function mkdir($path);
+
+ /**
+ * see http://php.net/manual/en/function.rmdir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function rmdir($path);
+
+ /**
+ * see http://php.net/manual/en/function.opendir.php
+ *
+ * @param string $path
+ * @return resource
+ */
+ public function opendir($path);
+
+ /**
+ * see http://php.net/manual/en/function.is_dir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function is_dir($path);
+
+ /**
+ * see http://php.net/manual/en/function.is_file.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function is_file($path);
+
+ /**
+ * see http://php.net/manual/en/function.stat.php
+ * only the following keys are required in the result: size and mtime
+ *
+ * @param string $path
+ * @return array
+ */
+ public function stat($path);
+
+ /**
+ * see http://php.net/manual/en/function.filetype.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function filetype($path);
+
+ /**
+ * see http://php.net/manual/en/function.filesize.php
+ * The result for filesize when called on a folder is required to be 0
+ *
+ * @param string $path
+ * @return int
+ */
+ public function filesize($path);
+
+ /**
+ * check if a file can be created in $path
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isCreatable($path);
+
+ /**
+ * check if a file can be read
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isReadable($path);
+
+ /**
+ * check if a file can be written to
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isUpdatable($path);
+
+ /**
+ * check if a file can be deleted
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isDeletable($path);
+
+ /**
+ * check if a file can be shared
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isSharable($path);
+
+ /**
+ * get the full permissions of a path.
+ * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function getPermissions($path);
+
+ /**
+ * see http://php.net/manual/en/function.file_exists.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function file_exists($path);
+
+ /**
+ * see http://php.net/manual/en/function.filemtime.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function filemtime($path);
+
+ /**
+ * see http://php.net/manual/en/function.file_get_contents.php
+ *
+ * @param string $path
+ * @return string
+ */
+ public function file_get_contents($path);
+
+ /**
+ * see http://php.net/manual/en/function.file_put_contents.php
+ *
+ * @param string $path
+ * @param string $data
+ * @return bool
+ */
+ public function file_put_contents($path, $data);
+
+ /**
+ * see http://php.net/manual/en/function.unlink.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function unlink($path);
+
+ /**
+ * see http://php.net/manual/en/function.rename.php
+ *
+ * @param string $path1
+ * @param string $path2
+ * @return bool
+ */
+ public function rename($path1, $path2);
+
+ /**
+ * see http://php.net/manual/en/function.copy.php
+ *
+ * @param string $path1
+ * @param string $path2
+ * @return bool
+ */
+ public function copy($path1, $path2);
+
+ /**
+ * see http://php.net/manual/en/function.fopen.php
+ *
+ * @param string $path
+ * @param string $mode
+ * @return resource
+ */
+ public function fopen($path, $mode);
+
+ /**
+ * get the mimetype for a file or folder
+ * The mimetype for a folder is required to be "httpd/unix-directory"
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getMimeType($path);
+
+ /**
+ * see http://php.net/manual/en/function.hash-file.php
+ *
+ * @param string $type
+ * @param string $path
+ * @param bool $raw
+ * @return string
+ */
+ public function hash($type, $path, $raw = false);
+
+ /**
+ * see http://php.net/manual/en/function.free_space.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function free_space($path);
+
+ /**
+ * search for occurrences of $query in file names
+ *
+ * @param string $query
+ * @return array
+ */
+ public function search($query);
+
+ /**
+ * see http://php.net/manual/en/function.touch.php
+ * If the backend does not support the operation, false should be returned
+ *
+ * @param string $path
+ * @param int $mtime
+ * @return bool
+ */
+ public function touch($path, $mtime = null);
+
+ /**
+ * get the path to a local version of the file.
+ * The local version of the file can be temporary and doesn't have to be persistent across requests
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFile($path);
+
+ /**
+ * get the path to a local version of the folder.
+ * The local version of the folder can be temporary and doesn't have to be persistent across requests
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFolder($path);
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ *
+ * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
+ * returning true for other changes in the folder is optional
+ */
+ public function hasUpdated($path, $time);
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path);
+}