]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add updater interface and expose cache interfaces from storage
authorRobin Appelman <icewind@owncloud.com>
Wed, 2 Dec 2015 14:11:09 +0000 (15:11 +0100)
committerRobin Appelman <icewind@owncloud.com>
Thu, 14 Jan 2016 11:54:42 +0000 (12:54 +0100)
lib/private/files/cache/updater.php
lib/public/files/cache/iupdater.php [new file with mode: 0644]
lib/public/files/storage.php

index c5b1e7de32e0bc9cfa03b958bd131835d939406c..12ff802dd58b3fbb714ee222f3ee95ef7d86564e 100644 (file)
  */
 
 namespace OC\Files\Cache;
+use OCP\Files\Cache\IUpdater;
 
 /**
  * Update the cache and propagate changes
  *
  */
-class Updater {
+class Updater implements IUpdater {
        /**
         * @var bool
         */
@@ -145,18 +146,18 @@ class Updater {
        /**
         * Rename a file or folder in the cache and update the size, etag and mtime of the parent folders
         *
-        * @param \OC\Files\Storage\Storage $sourceStorage
+        * @param \OCP\Files\Storage $sourceStorage
         * @param string $source
         * @param string $target
         */
-       public function renameFromStorage(\OC\Files\Storage\Storage $sourceStorage, $source, $target) {
+       public function renameFromStorage(\OCP\Files\Storage $sourceStorage, $source, $target) {
                if (!$this->enabled or Scanner::isPartialFile($source) or Scanner::isPartialFile($target)) {
                        return;
                }
 
                $time = time();
 
-               $sourceCache = $sourceStorage->getCache($source);
+               $sourceCache = $sourceStorage->getCache();
                $sourceUpdater = $sourceStorage->getUpdater();
                $sourcePropagator = $sourceStorage->getPropagator();
 
@@ -181,7 +182,9 @@ class Updater {
 
                $sourceCache->correctFolderSize($source);
                $this->cache->correctFolderSize($target);
-               $sourceUpdater->correctParentStorageMtime($source);
+               if ($sourceUpdater instanceof Updater) {
+                       $sourceUpdater->correctParentStorageMtime($source);
+               }
                $this->correctParentStorageMtime($target);
                $this->updateStorageMTimeOnly($target);
                $sourcePropagator->propagateChange($source, $time);
@@ -205,7 +208,7 @@ class Updater {
         *
         * @param string $internalPath
         */
-       public function correctParentStorageMtime($internalPath) {
+       private function correctParentStorageMtime($internalPath) {
                $parentId = $this->cache->getParentId($internalPath);
                $parent = dirname($internalPath);
                if ($parentId != -1) {
diff --git a/lib/public/files/cache/iupdater.php b/lib/public/files/cache/iupdater.php
new file mode 100644 (file)
index 0000000..cf2b471
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCP\Files\Cache;
+use OCP\Files\Storage;
+
+/**
+ * Update the cache and propagate changes
+ *
+ */
+interface IUpdater {
+       /**
+        * Get the propagator for etags and mtime for the view the updater works on
+        *
+        * @return IPropagator
+        */
+       public function getPropagator();
+
+       /**
+        * Propagate etag and mtime changes for the parent folders of $path up to the root of the filesystem
+        *
+        * @param string $path the path of the file to propagate the changes for
+        * @param int|null $time the timestamp to set as mtime for the parent folders, if left out the current time is used
+        */
+       public function propagate($path, $time = null);
+
+       /**
+        * Update the cache for $path and update the size, etag and mtime of the parent folders
+        *
+        * @param string $path
+        * @param int $time
+        */
+       public function update($path, $time = null);
+
+       /**
+        * Remove $path from the cache and update the size, etag and mtime of the parent folders
+        *
+        * @param string $path
+        */
+       public function remove($path);
+
+       /**
+        * Rename a file or folder in the cache and update the size, etag and mtime of the parent folders
+        *
+        * @param \OCP\Files\Storage $sourceStorage
+        * @param string $source
+        * @param string $target
+        */
+       public function renameFromStorage(Storage $sourceStorage, $source, $target);
+}
index f6f5081abaaee1e042c94eca2c32cebc1e5368d9..063455a2703d29fc489a90553ac382e216d9eb9a 100644 (file)
 // use OCP namespace for all classes that are considered public.
 // This means that they should be used by apps instead of the internal ownCloud classes
 namespace OCP\Files;
+use OCP\Files\Cache\ICache;
+use OCP\Files\Cache\IPropagator;
+use OCP\Files\Cache\IScanner;
+use OCP\Files\Cache\IUpdater;
 use OCP\Files\InvalidPathException;
 use OCP\Lock\ILockingProvider;
 
@@ -468,4 +472,24 @@ interface Storage {
         * @since 9.0.0
         */
        public function getOwner($path);
+
+       /**
+        * @return ICache
+        */
+       public function getCache();
+
+       /**
+        * @return IPropagator
+        */
+       public function getPropagator();
+
+       /**
+        * @return IScanner
+        */
+       public function getScanner();
+
+       /**
+        * @return IUpdater
+        */
+       public function getUpdater();
 }