]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add support for copying/moving folders between storages, move isIgnoredDir() to Files...
authorMichael Gapczynski <mtgap@owncloud.com>
Sun, 19 May 2013 18:15:49 +0000 (14:15 -0400)
committerMichael Gapczynski <mtgap@owncloud.com>
Sun, 19 May 2013 18:15:49 +0000 (14:15 -0400)
lib/files/cache/scanner.php
lib/files/filesystem.php
lib/files/view.php

index 661bc4863305e8bc5f197165038038633f9270bf..0b1947f17cac7c121d89bb2274b1d6076084a5b9 100644 (file)
@@ -115,7 +115,7 @@ class Scanner {
                        \OC_DB::beginTransaction();
                        while ($file = readdir($dh)) {
                                $child = ($path) ? $path . '/' . $file : $file;
-                               if (!$this->isIgnoredDir($file)) {
+                               if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
                                        $data = $this->scanFile($child, $recursive === self::SCAN_SHALLOW);
                                        if ($data) {
                                                if ($data['size'] === -1) {
@@ -149,18 +149,6 @@ class Scanner {
                return $size;
        }
 
-       /**
-        * @brief check if the directory should be ignored when scanning
-        * NOTE: the special directories . and .. would cause never ending recursion
-        * @param String $dir
-        * @return boolean
-        */
-       private function isIgnoredDir($dir) {
-               if ($dir === '.' || $dir === '..') {
-                       return true;
-               }
-               return false;
-       }
        /**
         * @brief check if the file should be ignored when scanning
         * NOTE: files with a '.part' extension are ignored as well!
index d60d430d77cb76da949ad7d8e712170d93d453f0..99d87011df21aa73a706b4da103ba45d139203d8 100644 (file)
@@ -453,6 +453,19 @@ class Filesystem {
                return (in_array($filename, $blacklist));
        }
 
+       /**
+        * @brief check if the directory should be ignored when scanning
+        * NOTE: the special directories . and .. would cause never ending recursion
+        * @param String $dir
+        * @return boolean
+        */
+       static public function isIgnoredDir($dir) {
+               if ($dir === '.' || $dir === '..') {
+                       return true;
+               }
+               return false;
+       }
+
        /**
         * following functions are equivalent to their php builtin equivalents for arguments/return values.
         */
index f35e1e3dc161727ed034b86262b93d3fb7b5d6de..875a6c1a1f86bfd2020477aeaa0772e55353bfa9 100644 (file)
@@ -372,11 +372,18 @@ class View {
                                                $result = false;
                                        }
                                } else {
-                                       $source = $this->fopen($path1 . $postFix1, 'r');
-                                       $target = $this->fopen($path2 . $postFix2, 'w');
-                                       list($count, $result) = \OC_Helper::streamCopy($source, $target);
-                                       list($storage1, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
-                                       $storage1->unlink($internalPath1);
+                                       if ($this->is_dir($path1)) {
+                                               $result = $this->copy($path1, $path2);
+                                               if ($result === true) {
+                                                       $result = $this->deleteAll($path1);
+                                               }
+                                       } else {
+                                               $source = $this->fopen($path1 . $postFix1, 'r');
+                                               $target = $this->fopen($path2 . $postFix2, 'w');
+                                               list($count, $result) = \OC_Helper::streamCopy($source, $target);
+                                               list($storage1, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+                                               $storage1->unlink($internalPath1);
+                                       }
                                }
                                if ($this->fakeRoot == Filesystem::getRoot() && !Cache\Scanner::isPartialFile($path1)) {
                                        \OC_Hook::emit(
@@ -459,9 +466,18 @@ class View {
                                                $result = false;
                                        }
                                } else {
-                                       $source = $this->fopen($path1 . $postFix1, 'r');
-                                       $target = $this->fopen($path2 . $postFix2, 'w');
-                                       list($count, $result) = \OC_Helper::streamCopy($source, $target);
+                                       if ($this->is_dir($path1) && ($dh = $this->opendir($path1))) {
+                                               $this->mkdir($path2);
+                                               while ($file = readdir($dh)) {
+                                                       if (!Filesystem::isIgnoredDir($file)) {
+                                                               $result = $this->copy($path1 . '/' . $file, $path2 . '/' . $file);
+                                                       }
+                                               }
+                                       } else {
+                                               $source = $this->fopen($path1 . $postFix1, 'r');
+                                               $target = $this->fopen($path2 . $postFix2, 'w');
+                                               list($count, $result) = \OC_Helper::streamCopy($source, $target);
+                                       }
                                }
                                if ($this->fakeRoot == Filesystem::getRoot()) {
                                        \OC_Hook::emit(