summaryrefslogtreecommitdiffstats
path: root/lib/files/storage/loader.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/files/storage/loader.php')
-rw-r--r--lib/files/storage/loader.php27
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/files/storage/loader.php b/lib/files/storage/loader.php
index 7330cae4cc4..2572ef443bc 100644
--- a/lib/files/storage/loader.php
+++ b/lib/files/storage/loader.php
@@ -9,9 +9,30 @@
namespace OC\Files\Storage;
class Loader {
- private function $wrappers
+ /**
+ * @var callable[] $storageWrappers
+ */
+ private $storageWrappers = array();
- public function load($class, $arguments) {
- return new $class($arguments);
+ /**
+ * allow modifier storage behaviour by adding wrappers around storages
+ *
+ * $callback should be a function of type (string $mountPoint, Storage $storage) => Storage
+ *
+ * @param callable $callback
+ */
+ public function addStorageWrapper($callback) {
+ $this->storageWrappers[] = $callback;
+ }
+
+ public function load($mountPoint, $class, $arguments) {
+ return $this->wrap($mountPoint, new $class($arguments));
+ }
+
+ public function wrap($mountPoint, $storage) {
+ foreach ($this->storageWrappers as $wrapper) {
+ $storage = $wrapper($mountPoint, $storage);
+ }
+ return $storage;
}
}