Completed
Push — master ( f9d8eb...989a8a )
by Lukas
14:49
created
lib/private/Files/Storage/PolyFill/CopyDirectory.php 1 patch
Indentation   +71 added lines, -71 removed lines patch added patch discarded remove patch
@@ -25,81 +25,81 @@
 block discarded – undo
25 25
 namespace OC\Files\Storage\PolyFill;
26 26
 
27 27
 trait CopyDirectory {
28
-	/**
29
-	 * Check if a path is a directory
30
-	 *
31
-	 * @param string $path
32
-	 * @return bool
33
-	 */
34
-	abstract public function is_dir($path);
28
+    /**
29
+     * Check if a path is a directory
30
+     *
31
+     * @param string $path
32
+     * @return bool
33
+     */
34
+    abstract public function is_dir($path);
35 35
 
36
-	/**
37
-	 * Check if a file or folder exists
38
-	 *
39
-	 * @param string $path
40
-	 * @return bool
41
-	 */
42
-	abstract public function file_exists($path);
36
+    /**
37
+     * Check if a file or folder exists
38
+     *
39
+     * @param string $path
40
+     * @return bool
41
+     */
42
+    abstract public function file_exists($path);
43 43
 
44
-	/**
45
-	 * Delete a file or folder
46
-	 *
47
-	 * @param string $path
48
-	 * @return bool
49
-	 */
50
-	abstract public function unlink($path);
44
+    /**
45
+     * Delete a file or folder
46
+     *
47
+     * @param string $path
48
+     * @return bool
49
+     */
50
+    abstract public function unlink($path);
51 51
 
52
-	/**
53
-	 * Open a directory handle for a folder
54
-	 *
55
-	 * @param string $path
56
-	 * @return resource | bool
57
-	 */
58
-	abstract public function opendir($path);
52
+    /**
53
+     * Open a directory handle for a folder
54
+     *
55
+     * @param string $path
56
+     * @return resource | bool
57
+     */
58
+    abstract public function opendir($path);
59 59
 
60
-	/**
61
-	 * Create a new folder
62
-	 *
63
-	 * @param string $path
64
-	 * @return bool
65
-	 */
66
-	abstract public function mkdir($path);
60
+    /**
61
+     * Create a new folder
62
+     *
63
+     * @param string $path
64
+     * @return bool
65
+     */
66
+    abstract public function mkdir($path);
67 67
 
68
-	public function copy($source, $target) {
69
-		if ($this->is_dir($source)) {
70
-			if ($this->file_exists($target)) {
71
-				$this->unlink($target);
72
-			}
73
-			$this->mkdir($target);
74
-			return $this->copyRecursive($source, $target);
75
-		} else {
76
-			return parent::copy($source, $target);
77
-		}
78
-	}
68
+    public function copy($source, $target) {
69
+        if ($this->is_dir($source)) {
70
+            if ($this->file_exists($target)) {
71
+                $this->unlink($target);
72
+            }
73
+            $this->mkdir($target);
74
+            return $this->copyRecursive($source, $target);
75
+        } else {
76
+            return parent::copy($source, $target);
77
+        }
78
+    }
79 79
 
80
-	/**
81
-	 * For adapters that don't support copying folders natively
82
-	 *
83
-	 * @param $source
84
-	 * @param $target
85
-	 * @return bool
86
-	 */
87
-	protected function copyRecursive($source, $target) {
88
-		$dh = $this->opendir($source);
89
-		$result = true;
90
-		while ($file = readdir($dh)) {
91
-			if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
92
-				if ($this->is_dir($source . '/' . $file)) {
93
-					$this->mkdir($target . '/' . $file);
94
-					$result = $this->copyRecursive($source . '/' . $file, $target . '/' . $file);
95
-				} else {
96
-					$result = parent::copy($source . '/' . $file, $target . '/' . $file);
97
-				}
98
-				if (!$result) {
99
-					break;
100
-				}
101
-			}
102
-		}
103
-		return $result;
104
-	}
80
+    /**
81
+     * For adapters that don't support copying folders natively
82
+     *
83
+     * @param $source
84
+     * @param $target
85
+     * @return bool
86
+     */
87
+    protected function copyRecursive($source, $target) {
88
+        $dh = $this->opendir($source);
89
+        $result = true;
90
+        while ($file = readdir($dh)) {
91
+            if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
92
+                if ($this->is_dir($source . '/' . $file)) {
93
+                    $this->mkdir($target . '/' . $file);
94
+                    $result = $this->copyRecursive($source . '/' . $file, $target . '/' . $file);
95
+                } else {
96
+                    $result = parent::copy($source . '/' . $file, $target . '/' . $file);
97
+                }
98
+                if (!$result) {
99
+                    break;
100
+                }
101
+            }
102
+        }
103
+        return $result;
104
+    }
105 105
 }
Please login to merge, or discard this patch.
lib/private/Files/Storage/Flysystem.php 1 patch
Indentation   +201 added lines, -201 removed lines patch added patch discarded remove patch
@@ -35,223 +35,223 @@
 block discarded – undo
35 35
  * To use: subclass and call $this->buildFlysystem with the flysystem adapter of choice
36 36
  */
37 37
 abstract class Flysystem extends Common {
38
-	/**
39
-	 * @var Filesystem
40
-	 */
41
-	protected $flysystem;
38
+    /**
39
+     * @var Filesystem
40
+     */
41
+    protected $flysystem;
42 42
 
43
-	/**
44
-	 * @var string
45
-	 */
46
-	protected $root = '';
43
+    /**
44
+     * @var string
45
+     */
46
+    protected $root = '';
47 47
 
48
-	/**
49
-	 * Initialize the storage backend with a flyssytem adapter
50
-	 *
51
-	 * @param \League\Flysystem\AdapterInterface $adapter
52
-	 */
53
-	protected function buildFlySystem(AdapterInterface $adapter) {
54
-		$this->flysystem = new Filesystem($adapter);
55
-		$this->flysystem->addPlugin(new GetWithMetadata());
56
-	}
48
+    /**
49
+     * Initialize the storage backend with a flyssytem adapter
50
+     *
51
+     * @param \League\Flysystem\AdapterInterface $adapter
52
+     */
53
+    protected function buildFlySystem(AdapterInterface $adapter) {
54
+        $this->flysystem = new Filesystem($adapter);
55
+        $this->flysystem->addPlugin(new GetWithMetadata());
56
+    }
57 57
 
58
-	protected function buildPath($path) {
59
-		$fullPath = \OC\Files\Filesystem::normalizePath($this->root . '/' . $path);
60
-		return ltrim($fullPath, '/');
61
-	}
58
+    protected function buildPath($path) {
59
+        $fullPath = \OC\Files\Filesystem::normalizePath($this->root . '/' . $path);
60
+        return ltrim($fullPath, '/');
61
+    }
62 62
 
63
-	/**
64
-	 * {@inheritdoc}
65
-	 */
66
-	public function file_get_contents($path) {
67
-		return $this->flysystem->read($this->buildPath($path));
68
-	}
63
+    /**
64
+     * {@inheritdoc}
65
+     */
66
+    public function file_get_contents($path) {
67
+        return $this->flysystem->read($this->buildPath($path));
68
+    }
69 69
 
70
-	/**
71
-	 * {@inheritdoc}
72
-	 */
73
-	public function file_put_contents($path, $data) {
74
-		return $this->flysystem->put($this->buildPath($path), $data);
75
-	}
70
+    /**
71
+     * {@inheritdoc}
72
+     */
73
+    public function file_put_contents($path, $data) {
74
+        return $this->flysystem->put($this->buildPath($path), $data);
75
+    }
76 76
 
77
-	/**
78
-	 * {@inheritdoc}
79
-	 */
80
-	public function file_exists($path) {
81
-		return $this->flysystem->has($this->buildPath($path));
82
-	}
77
+    /**
78
+     * {@inheritdoc}
79
+     */
80
+    public function file_exists($path) {
81
+        return $this->flysystem->has($this->buildPath($path));
82
+    }
83 83
 
84
-	/**
85
-	 * {@inheritdoc}
86
-	 */
87
-	public function unlink($path) {
88
-		if ($this->is_dir($path)) {
89
-			return $this->rmdir($path);
90
-		}
91
-		try {
92
-			return $this->flysystem->delete($this->buildPath($path));
93
-		} catch (FileNotFoundException $e) {
94
-			return false;
95
-		}
96
-	}
84
+    /**
85
+     * {@inheritdoc}
86
+     */
87
+    public function unlink($path) {
88
+        if ($this->is_dir($path)) {
89
+            return $this->rmdir($path);
90
+        }
91
+        try {
92
+            return $this->flysystem->delete($this->buildPath($path));
93
+        } catch (FileNotFoundException $e) {
94
+            return false;
95
+        }
96
+    }
97 97
 
98
-	/**
99
-	 * {@inheritdoc}
100
-	 */
101
-	public function rename($source, $target) {
102
-		if ($this->file_exists($target)) {
103
-			$this->unlink($target);
104
-		}
105
-		return $this->flysystem->rename($this->buildPath($source), $this->buildPath($target));
106
-	}
98
+    /**
99
+     * {@inheritdoc}
100
+     */
101
+    public function rename($source, $target) {
102
+        if ($this->file_exists($target)) {
103
+            $this->unlink($target);
104
+        }
105
+        return $this->flysystem->rename($this->buildPath($source), $this->buildPath($target));
106
+    }
107 107
 
108
-	/**
109
-	 * {@inheritdoc}
110
-	 */
111
-	public function copy($source, $target) {
112
-		if ($this->file_exists($target)) {
113
-			$this->unlink($target);
114
-		}
115
-		return $this->flysystem->copy($this->buildPath($source), $this->buildPath($target));
116
-	}
108
+    /**
109
+     * {@inheritdoc}
110
+     */
111
+    public function copy($source, $target) {
112
+        if ($this->file_exists($target)) {
113
+            $this->unlink($target);
114
+        }
115
+        return $this->flysystem->copy($this->buildPath($source), $this->buildPath($target));
116
+    }
117 117
 
118
-	/**
119
-	 * {@inheritdoc}
120
-	 */
121
-	public function filesize($path) {
122
-		if ($this->is_dir($path)) {
123
-			return 0;
124
-		} else {
125
-			return $this->flysystem->getSize($this->buildPath($path));
126
-		}
127
-	}
118
+    /**
119
+     * {@inheritdoc}
120
+     */
121
+    public function filesize($path) {
122
+        if ($this->is_dir($path)) {
123
+            return 0;
124
+        } else {
125
+            return $this->flysystem->getSize($this->buildPath($path));
126
+        }
127
+    }
128 128
 
129
-	/**
130
-	 * {@inheritdoc}
131
-	 */
132
-	public function mkdir($path) {
133
-		if ($this->file_exists($path)) {
134
-			return false;
135
-		}
136
-		return $this->flysystem->createDir($this->buildPath($path));
137
-	}
129
+    /**
130
+     * {@inheritdoc}
131
+     */
132
+    public function mkdir($path) {
133
+        if ($this->file_exists($path)) {
134
+            return false;
135
+        }
136
+        return $this->flysystem->createDir($this->buildPath($path));
137
+    }
138 138
 
139
-	/**
140
-	 * {@inheritdoc}
141
-	 */
142
-	public function filemtime($path) {
143
-		return $this->flysystem->getTimestamp($this->buildPath($path));
144
-	}
139
+    /**
140
+     * {@inheritdoc}
141
+     */
142
+    public function filemtime($path) {
143
+        return $this->flysystem->getTimestamp($this->buildPath($path));
144
+    }
145 145
 
146
-	/**
147
-	 * {@inheritdoc}
148
-	 */
149
-	public function rmdir($path) {
150
-		try {
151
-			return @$this->flysystem->deleteDir($this->buildPath($path));
152
-		} catch (FileNotFoundException $e) {
153
-			return false;
154
-		}
155
-	}
146
+    /**
147
+     * {@inheritdoc}
148
+     */
149
+    public function rmdir($path) {
150
+        try {
151
+            return @$this->flysystem->deleteDir($this->buildPath($path));
152
+        } catch (FileNotFoundException $e) {
153
+            return false;
154
+        }
155
+    }
156 156
 
157
-	/**
158
-	 * {@inheritdoc}
159
-	 */
160
-	public function opendir($path) {
161
-		try {
162
-			$content = $this->flysystem->listContents($this->buildPath($path));
163
-		} catch (FileNotFoundException $e) {
164
-			return false;
165
-		}
166
-		$names = array_map(function ($object) {
167
-			return $object['basename'];
168
-		}, $content);
169
-		return IteratorDirectory::wrap($names);
170
-	}
157
+    /**
158
+     * {@inheritdoc}
159
+     */
160
+    public function opendir($path) {
161
+        try {
162
+            $content = $this->flysystem->listContents($this->buildPath($path));
163
+        } catch (FileNotFoundException $e) {
164
+            return false;
165
+        }
166
+        $names = array_map(function ($object) {
167
+            return $object['basename'];
168
+        }, $content);
169
+        return IteratorDirectory::wrap($names);
170
+    }
171 171
 
172
-	/**
173
-	 * {@inheritdoc}
174
-	 */
175
-	public function fopen($path, $mode) {
176
-		$fullPath = $this->buildPath($path);
177
-		$useExisting = true;
178
-		switch ($mode) {
179
-			case 'r':
180
-			case 'rb':
181
-				try {
182
-					return $this->flysystem->readStream($fullPath);
183
-				} catch (FileNotFoundException $e) {
184
-					return false;
185
-				}
186
-			case 'w':
187
-			case 'w+':
188
-			case 'wb':
189
-			case 'wb+':
190
-				$useExisting = false;
191
-			case 'a':
192
-			case 'ab':
193
-			case 'r+':
194
-			case 'a+':
195
-			case 'x':
196
-			case 'x+':
197
-			case 'c':
198
-			case 'c+':
199
-				//emulate these
200
-				if ($useExisting and $this->file_exists($path)) {
201
-					if (!$this->isUpdatable($path)) {
202
-						return false;
203
-					}
204
-					$tmpFile = $this->getCachedFile($path);
205
-				} else {
206
-					if (!$this->isCreatable(dirname($path))) {
207
-						return false;
208
-					}
209
-					$tmpFile = \OCP\Files::tmpFile();
210
-				}
211
-				$source = fopen($tmpFile, $mode);
212
-				return CallbackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath) {
213
-					$this->flysystem->putStream($fullPath, fopen($tmpFile, 'r'));
214
-					unlink($tmpFile);
215
-				});
216
-		}
217
-		return false;
218
-	}
172
+    /**
173
+     * {@inheritdoc}
174
+     */
175
+    public function fopen($path, $mode) {
176
+        $fullPath = $this->buildPath($path);
177
+        $useExisting = true;
178
+        switch ($mode) {
179
+            case 'r':
180
+            case 'rb':
181
+                try {
182
+                    return $this->flysystem->readStream($fullPath);
183
+                } catch (FileNotFoundException $e) {
184
+                    return false;
185
+                }
186
+            case 'w':
187
+            case 'w+':
188
+            case 'wb':
189
+            case 'wb+':
190
+                $useExisting = false;
191
+            case 'a':
192
+            case 'ab':
193
+            case 'r+':
194
+            case 'a+':
195
+            case 'x':
196
+            case 'x+':
197
+            case 'c':
198
+            case 'c+':
199
+                //emulate these
200
+                if ($useExisting and $this->file_exists($path)) {
201
+                    if (!$this->isUpdatable($path)) {
202
+                        return false;
203
+                    }
204
+                    $tmpFile = $this->getCachedFile($path);
205
+                } else {
206
+                    if (!$this->isCreatable(dirname($path))) {
207
+                        return false;
208
+                    }
209
+                    $tmpFile = \OCP\Files::tmpFile();
210
+                }
211
+                $source = fopen($tmpFile, $mode);
212
+                return CallbackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath) {
213
+                    $this->flysystem->putStream($fullPath, fopen($tmpFile, 'r'));
214
+                    unlink($tmpFile);
215
+                });
216
+        }
217
+        return false;
218
+    }
219 219
 
220
-	/**
221
-	 * {@inheritdoc}
222
-	 */
223
-	public function touch($path, $mtime = null) {
224
-		if ($this->file_exists($path)) {
225
-			return false;
226
-		} else {
227
-			$this->file_put_contents($path, '');
228
-			return true;
229
-		}
230
-	}
220
+    /**
221
+     * {@inheritdoc}
222
+     */
223
+    public function touch($path, $mtime = null) {
224
+        if ($this->file_exists($path)) {
225
+            return false;
226
+        } else {
227
+            $this->file_put_contents($path, '');
228
+            return true;
229
+        }
230
+    }
231 231
 
232
-	/**
233
-	 * {@inheritdoc}
234
-	 */
235
-	public function stat($path) {
236
-		$info = $this->flysystem->getWithMetadata($this->buildPath($path), ['timestamp', 'size']);
237
-		return [
238
-			'mtime' => $info['timestamp'],
239
-			'size' => $info['size']
240
-		];
241
-	}
232
+    /**
233
+     * {@inheritdoc}
234
+     */
235
+    public function stat($path) {
236
+        $info = $this->flysystem->getWithMetadata($this->buildPath($path), ['timestamp', 'size']);
237
+        return [
238
+            'mtime' => $info['timestamp'],
239
+            'size' => $info['size']
240
+        ];
241
+    }
242 242
 
243
-	/**
244
-	 * {@inheritdoc}
245
-	 */
246
-	public function filetype($path) {
247
-		if ($path === '' or $path === '/' or $path === '.') {
248
-			return 'dir';
249
-		}
250
-		try {
251
-			$info = $this->flysystem->getMetadata($this->buildPath($path));
252
-		} catch (FileNotFoundException $e) {
253
-			return false;
254
-		}
255
-		return $info['type'];
256
-	}
243
+    /**
244
+     * {@inheritdoc}
245
+     */
246
+    public function filetype($path) {
247
+        if ($path === '' or $path === '/' or $path === '.') {
248
+            return 'dir';
249
+        }
250
+        try {
251
+            $info = $this->flysystem->getMetadata($this->buildPath($path));
252
+        } catch (FileNotFoundException $e) {
253
+            return false;
254
+        }
255
+        return $info['type'];
256
+    }
257 257
 }
Please login to merge, or discard this patch.
lib/private/Files/Storage/CommonTest.php 1 patch
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -33,53 +33,53 @@
 block discarded – undo
33 33
 namespace OC\Files\Storage;
34 34
 
35 35
 class CommonTest extends \OC\Files\Storage\Common{
36
-	/**
37
-	 * underlying local storage used for missing functions
38
-	 * @var \OC\Files\Storage\Local
39
-	 */
40
-	private $storage;
36
+    /**
37
+     * underlying local storage used for missing functions
38
+     * @var \OC\Files\Storage\Local
39
+     */
40
+    private $storage;
41 41
 
42
-	public function __construct($params) {
43
-		$this->storage=new \OC\Files\Storage\Local($params);
44
-	}
42
+    public function __construct($params) {
43
+        $this->storage=new \OC\Files\Storage\Local($params);
44
+    }
45 45
 
46
-	public function getId(){
47
-		return 'test::'.$this->storage->getId();
48
-	}
49
-	public function mkdir($path) {
50
-		return $this->storage->mkdir($path);
51
-	}
52
-	public function rmdir($path) {
53
-		return $this->storage->rmdir($path);
54
-	}
55
-	public function opendir($path) {
56
-		return $this->storage->opendir($path);
57
-	}
58
-	public function stat($path) {
59
-		return $this->storage->stat($path);
60
-	}
61
-	public function filetype($path) {
62
-		return @$this->storage->filetype($path);
63
-	}
64
-	public function isReadable($path) {
65
-		return $this->storage->isReadable($path);
66
-	}
67
-	public function isUpdatable($path) {
68
-		return $this->storage->isUpdatable($path);
69
-	}
70
-	public function file_exists($path) {
71
-		return $this->storage->file_exists($path);
72
-	}
73
-	public function unlink($path) {
74
-		return $this->storage->unlink($path);
75
-	}
76
-	public function fopen($path, $mode) {
77
-		return $this->storage->fopen($path, $mode);
78
-	}
79
-	public function free_space($path) {
80
-		return $this->storage->free_space($path);
81
-	}
82
-	public function touch($path, $mtime=null) {
83
-		return $this->storage->touch($path, $mtime);
84
-	}
46
+    public function getId(){
47
+        return 'test::'.$this->storage->getId();
48
+    }
49
+    public function mkdir($path) {
50
+        return $this->storage->mkdir($path);
51
+    }
52
+    public function rmdir($path) {
53
+        return $this->storage->rmdir($path);
54
+    }
55
+    public function opendir($path) {
56
+        return $this->storage->opendir($path);
57
+    }
58
+    public function stat($path) {
59
+        return $this->storage->stat($path);
60
+    }
61
+    public function filetype($path) {
62
+        return @$this->storage->filetype($path);
63
+    }
64
+    public function isReadable($path) {
65
+        return $this->storage->isReadable($path);
66
+    }
67
+    public function isUpdatable($path) {
68
+        return $this->storage->isUpdatable($path);
69
+    }
70
+    public function file_exists($path) {
71
+        return $this->storage->file_exists($path);
72
+    }
73
+    public function unlink($path) {
74
+        return $this->storage->unlink($path);
75
+    }
76
+    public function fopen($path, $mode) {
77
+        return $this->storage->fopen($path, $mode);
78
+    }
79
+    public function free_space($path) {
80
+        return $this->storage->free_space($path);
81
+    }
82
+    public function touch($path, $mtime=null) {
83
+        return $this->storage->touch($path, $mtime);
84
+    }
85 85
 }
Please login to merge, or discard this patch.
lib/private/Files/Notify/RenameChange.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -26,27 +26,27 @@
 block discarded – undo
26 26
 use OCP\Files\Notify\IRenameChange;
27 27
 
28 28
 class RenameChange extends Change implements IRenameChange {
29
-	/** @var string */
30
-	private $targetPath;
29
+    /** @var string */
30
+    private $targetPath;
31 31
 
32
-	/**
33
-	 * Change constructor.
34
-	 *
35
-	 * @param int $type
36
-	 * @param string $path
37
-	 * @param string $targetPath
38
-	 */
39
-	public function __construct($type, $path, $targetPath) {
40
-		parent::__construct($type, $path);
41
-		$this->targetPath = $targetPath;
42
-	}
32
+    /**
33
+     * Change constructor.
34
+     *
35
+     * @param int $type
36
+     * @param string $path
37
+     * @param string $targetPath
38
+     */
39
+    public function __construct($type, $path, $targetPath) {
40
+        parent::__construct($type, $path);
41
+        $this->targetPath = $targetPath;
42
+    }
43 43
 
44
-	/**
45
-	 * Get the new path of the renamed file relative to the storage root
46
-	 *
47
-	 * @return string
48
-	 */
49
-	public function getTargetPath() {
50
-		return $this->targetPath;
51
-	}
44
+    /**
45
+     * Get the new path of the renamed file relative to the storage root
46
+     *
47
+     * @return string
48
+     */
49
+    public function getTargetPath() {
50
+        return $this->targetPath;
51
+    }
52 52
 }
Please login to merge, or discard this patch.
lib/private/Files/Notify/Change.php 1 patch
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -26,40 +26,40 @@
 block discarded – undo
26 26
 use OCP\Files\Notify\IChange;
27 27
 
28 28
 class Change implements IChange {
29
-	/** @var int */
30
-	private $type;
29
+    /** @var int */
30
+    private $type;
31 31
 
32
-	/** @var string */
33
-	private $path;
32
+    /** @var string */
33
+    private $path;
34 34
 
35
-	/**
36
-	 * Change constructor.
37
-	 *
38
-	 * @param int $type
39
-	 * @param string $path
40
-	 */
41
-	public function __construct($type, $path) {
42
-		$this->type = $type;
43
-		$this->path = $path;
44
-	}
35
+    /**
36
+     * Change constructor.
37
+     *
38
+     * @param int $type
39
+     * @param string $path
40
+     */
41
+    public function __construct($type, $path) {
42
+        $this->type = $type;
43
+        $this->path = $path;
44
+    }
45 45
 
46
-	/**
47
-	 * Get the type of the change
48
-	 *
49
-	 * @return int IChange::ADDED, IChange::REMOVED, IChange::MODIFIED or IChange::RENAMED
50
-	 */
51
-	public function getType() {
52
-		return $this->type;
53
-	}
46
+    /**
47
+     * Get the type of the change
48
+     *
49
+     * @return int IChange::ADDED, IChange::REMOVED, IChange::MODIFIED or IChange::RENAMED
50
+     */
51
+    public function getType() {
52
+        return $this->type;
53
+    }
54 54
 
55
-	/**
56
-	 * Get the path of the file that was changed relative to the root of the storage
57
-	 *
58
-	 * Note, for rename changes this path is the old path for the file
59
-	 *
60
-	 * @return mixed
61
-	 */
62
-	public function getPath() {
63
-		return $this->path;
64
-	}
55
+    /**
56
+     * Get the path of the file that was changed relative to the root of the storage
57
+     *
58
+     * Note, for rename changes this path is the old path for the file
59
+     *
60
+     * @return mixed
61
+     */
62
+    public function getPath() {
63
+        return $this->path;
64
+    }
65 65
 }
Please login to merge, or discard this patch.
lib/private/Files/Cache/Storage.php 1 patch
Indentation   +157 added lines, -157 removed lines patch added patch discarded remove patch
@@ -40,161 +40,161 @@
 block discarded – undo
40 40
  * @package OC\Files\Cache
41 41
  */
42 42
 class Storage {
43
-	/** @var StorageGlobal|null */
44
-	private static $globalCache = null;
45
-	private $storageId;
46
-	private $numericId;
47
-
48
-	/**
49
-	 * @return StorageGlobal
50
-	 */
51
-	public static function getGlobalCache() {
52
-		if (is_null(self::$globalCache)) {
53
-			self::$globalCache = new StorageGlobal(\OC::$server->getDatabaseConnection());
54
-		}
55
-		return self::$globalCache;
56
-	}
57
-
58
-	/**
59
-	 * @param \OC\Files\Storage\Storage|string $storage
60
-	 * @param bool $isAvailable
61
-	 * @throws \RuntimeException
62
-	 */
63
-	public function __construct($storage, $isAvailable = true) {
64
-		if ($storage instanceof \OC\Files\Storage\Storage) {
65
-			$this->storageId = $storage->getId();
66
-		} else {
67
-			$this->storageId = $storage;
68
-		}
69
-		$this->storageId = self::adjustStorageId($this->storageId);
70
-
71
-		if ($row = self::getStorageById($this->storageId)) {
72
-			$this->numericId = (int)$row['numeric_id'];
73
-		} else {
74
-			$connection = \OC::$server->getDatabaseConnection();
75
-			$available = $isAvailable ? 1 : 0;
76
-			if ($connection->insertIfNotExist('*PREFIX*storages', ['id' => $this->storageId, 'available' => $available])) {
77
-				$this->numericId = (int)$connection->lastInsertId('*PREFIX*storages');
78
-			} else {
79
-				if ($row = self::getStorageById($this->storageId)) {
80
-					$this->numericId = (int)$row['numeric_id'];
81
-				} else {
82
-					throw new \RuntimeException('Storage could neither be inserted nor be selected from the database');
83
-				}
84
-			}
85
-		}
86
-	}
87
-
88
-	/**
89
-	 * @param string $storageId
90
-	 * @return array
91
-	 */
92
-	public static function getStorageById($storageId) {
93
-		return self::getGlobalCache()->getStorageInfo($storageId);
94
-	}
95
-
96
-	/**
97
-	 * Adjusts the storage id to use md5 if too long
98
-	 * @param string $storageId storage id
99
-	 * @return string unchanged $storageId if its length is less than 64 characters,
100
-	 * else returns the md5 of $storageId
101
-	 */
102
-	public static function adjustStorageId($storageId) {
103
-		if (strlen($storageId) > 64) {
104
-			return md5($storageId);
105
-		}
106
-		return $storageId;
107
-	}
108
-
109
-	/**
110
-	 * Get the numeric id for the storage
111
-	 *
112
-	 * @return int
113
-	 */
114
-	public function getNumericId() {
115
-		return $this->numericId;
116
-	}
117
-
118
-	/**
119
-	 * Get the string id for the storage
120
-	 *
121
-	 * @param int $numericId
122
-	 * @return string|null either the storage id string or null if the numeric id is not known
123
-	 */
124
-	public static function getStorageId($numericId) {
125
-
126
-		$sql = 'SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?';
127
-		$result = \OC_DB::executeAudited($sql, array($numericId));
128
-		if ($row = $result->fetchRow()) {
129
-			return $row['id'];
130
-		} else {
131
-			return null;
132
-		}
133
-	}
134
-
135
-	/**
136
-	 * Get the numeric of the storage with the provided string id
137
-	 *
138
-	 * @param $storageId
139
-	 * @return int|null either the numeric storage id or null if the storage id is not knwon
140
-	 */
141
-	public static function getNumericStorageId($storageId) {
142
-		$storageId = self::adjustStorageId($storageId);
143
-
144
-		if ($row = self::getStorageById($storageId)) {
145
-			return (int)$row['numeric_id'];
146
-		} else {
147
-			return null;
148
-		}
149
-	}
150
-
151
-	/**
152
-	 * @return array|null [ available, last_checked ]
153
-	 */
154
-	public function getAvailability() {
155
-		if ($row = self::getStorageById($this->storageId)) {
156
-			return [
157
-				'available' => ((int)$row['available'] === 1),
158
-				'last_checked' => $row['last_checked']
159
-			];
160
-		} else {
161
-			return null;
162
-		}
163
-	}
164
-
165
-	/**
166
-	 * @param bool $isAvailable
167
-	 */
168
-	public function setAvailability($isAvailable) {
169
-		$sql = 'UPDATE `*PREFIX*storages` SET `available` = ?, `last_checked` = ? WHERE `id` = ?';
170
-		$available = $isAvailable ? 1 : 0;
171
-		\OC_DB::executeAudited($sql, array($available, time(), $this->storageId));
172
-	}
173
-
174
-	/**
175
-	 * Check if a string storage id is known
176
-	 *
177
-	 * @param string $storageId
178
-	 * @return bool
179
-	 */
180
-	public static function exists($storageId) {
181
-		return !is_null(self::getNumericStorageId($storageId));
182
-	}
183
-
184
-	/**
185
-	 * remove the entry for the storage
186
-	 *
187
-	 * @param string $storageId
188
-	 */
189
-	public static function remove($storageId) {
190
-		$storageId = self::adjustStorageId($storageId);
191
-		$numericId = self::getNumericStorageId($storageId);
192
-		$sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
193
-		\OC_DB::executeAudited($sql, array($storageId));
194
-
195
-		if (!is_null($numericId)) {
196
-			$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `storage` = ?';
197
-			\OC_DB::executeAudited($sql, array($numericId));
198
-		}
199
-	}
43
+    /** @var StorageGlobal|null */
44
+    private static $globalCache = null;
45
+    private $storageId;
46
+    private $numericId;
47
+
48
+    /**
49
+     * @return StorageGlobal
50
+     */
51
+    public static function getGlobalCache() {
52
+        if (is_null(self::$globalCache)) {
53
+            self::$globalCache = new StorageGlobal(\OC::$server->getDatabaseConnection());
54
+        }
55
+        return self::$globalCache;
56
+    }
57
+
58
+    /**
59
+     * @param \OC\Files\Storage\Storage|string $storage
60
+     * @param bool $isAvailable
61
+     * @throws \RuntimeException
62
+     */
63
+    public function __construct($storage, $isAvailable = true) {
64
+        if ($storage instanceof \OC\Files\Storage\Storage) {
65
+            $this->storageId = $storage->getId();
66
+        } else {
67
+            $this->storageId = $storage;
68
+        }
69
+        $this->storageId = self::adjustStorageId($this->storageId);
70
+
71
+        if ($row = self::getStorageById($this->storageId)) {
72
+            $this->numericId = (int)$row['numeric_id'];
73
+        } else {
74
+            $connection = \OC::$server->getDatabaseConnection();
75
+            $available = $isAvailable ? 1 : 0;
76
+            if ($connection->insertIfNotExist('*PREFIX*storages', ['id' => $this->storageId, 'available' => $available])) {
77
+                $this->numericId = (int)$connection->lastInsertId('*PREFIX*storages');
78
+            } else {
79
+                if ($row = self::getStorageById($this->storageId)) {
80
+                    $this->numericId = (int)$row['numeric_id'];
81
+                } else {
82
+                    throw new \RuntimeException('Storage could neither be inserted nor be selected from the database');
83
+                }
84
+            }
85
+        }
86
+    }
87
+
88
+    /**
89
+     * @param string $storageId
90
+     * @return array
91
+     */
92
+    public static function getStorageById($storageId) {
93
+        return self::getGlobalCache()->getStorageInfo($storageId);
94
+    }
95
+
96
+    /**
97
+     * Adjusts the storage id to use md5 if too long
98
+     * @param string $storageId storage id
99
+     * @return string unchanged $storageId if its length is less than 64 characters,
100
+     * else returns the md5 of $storageId
101
+     */
102
+    public static function adjustStorageId($storageId) {
103
+        if (strlen($storageId) > 64) {
104
+            return md5($storageId);
105
+        }
106
+        return $storageId;
107
+    }
108
+
109
+    /**
110
+     * Get the numeric id for the storage
111
+     *
112
+     * @return int
113
+     */
114
+    public function getNumericId() {
115
+        return $this->numericId;
116
+    }
117
+
118
+    /**
119
+     * Get the string id for the storage
120
+     *
121
+     * @param int $numericId
122
+     * @return string|null either the storage id string or null if the numeric id is not known
123
+     */
124
+    public static function getStorageId($numericId) {
125
+
126
+        $sql = 'SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?';
127
+        $result = \OC_DB::executeAudited($sql, array($numericId));
128
+        if ($row = $result->fetchRow()) {
129
+            return $row['id'];
130
+        } else {
131
+            return null;
132
+        }
133
+    }
134
+
135
+    /**
136
+     * Get the numeric of the storage with the provided string id
137
+     *
138
+     * @param $storageId
139
+     * @return int|null either the numeric storage id or null if the storage id is not knwon
140
+     */
141
+    public static function getNumericStorageId($storageId) {
142
+        $storageId = self::adjustStorageId($storageId);
143
+
144
+        if ($row = self::getStorageById($storageId)) {
145
+            return (int)$row['numeric_id'];
146
+        } else {
147
+            return null;
148
+        }
149
+    }
150
+
151
+    /**
152
+     * @return array|null [ available, last_checked ]
153
+     */
154
+    public function getAvailability() {
155
+        if ($row = self::getStorageById($this->storageId)) {
156
+            return [
157
+                'available' => ((int)$row['available'] === 1),
158
+                'last_checked' => $row['last_checked']
159
+            ];
160
+        } else {
161
+            return null;
162
+        }
163
+    }
164
+
165
+    /**
166
+     * @param bool $isAvailable
167
+     */
168
+    public function setAvailability($isAvailable) {
169
+        $sql = 'UPDATE `*PREFIX*storages` SET `available` = ?, `last_checked` = ? WHERE `id` = ?';
170
+        $available = $isAvailable ? 1 : 0;
171
+        \OC_DB::executeAudited($sql, array($available, time(), $this->storageId));
172
+    }
173
+
174
+    /**
175
+     * Check if a string storage id is known
176
+     *
177
+     * @param string $storageId
178
+     * @return bool
179
+     */
180
+    public static function exists($storageId) {
181
+        return !is_null(self::getNumericStorageId($storageId));
182
+    }
183
+
184
+    /**
185
+     * remove the entry for the storage
186
+     *
187
+     * @param string $storageId
188
+     */
189
+    public static function remove($storageId) {
190
+        $storageId = self::adjustStorageId($storageId);
191
+        $numericId = self::getNumericStorageId($storageId);
192
+        $sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
193
+        \OC_DB::executeAudited($sql, array($storageId));
194
+
195
+        if (!is_null($numericId)) {
196
+            $sql = 'DELETE FROM `*PREFIX*filecache` WHERE `storage` = ?';
197
+            \OC_DB::executeAudited($sql, array($numericId));
198
+        }
199
+    }
200 200
 }
Please login to merge, or discard this patch.
lib/private/Files/Cache/HomePropagator.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -25,28 +25,28 @@
 block discarded – undo
25 25
 use OCP\IDBConnection;
26 26
 
27 27
 class HomePropagator extends Propagator {
28
-	private $ignoredBaseFolders;
28
+    private $ignoredBaseFolders;
29 29
 
30
-	/**
31
-	 * @param \OC\Files\Storage\Storage $storage
32
-	 */
33
-	public function __construct(\OC\Files\Storage\Storage $storage, IDBConnection $connection) {
34
-		parent::__construct($storage, $connection);
35
-		$this->ignoredBaseFolders = ['files_encryption'];
36
-	}
30
+    /**
31
+     * @param \OC\Files\Storage\Storage $storage
32
+     */
33
+    public function __construct(\OC\Files\Storage\Storage $storage, IDBConnection $connection) {
34
+        parent::__construct($storage, $connection);
35
+        $this->ignoredBaseFolders = ['files_encryption'];
36
+    }
37 37
 
38 38
 
39
-	/**
40
-	 * @param string $internalPath
41
-	 * @param int $time
42
-	 * @param int $sizeDifference number of bytes the file has grown
43
-	 */
44
-	public function propagateChange($internalPath, $time, $sizeDifference = 0) {
45
-		list($baseFolder) = explode('/', $internalPath, 2);
46
-		if (in_array($baseFolder, $this->ignoredBaseFolders)) {
47
-			return [];
48
-		} else {
49
-			parent::propagateChange($internalPath, $time, $sizeDifference);
50
-		}
51
-	}
39
+    /**
40
+     * @param string $internalPath
41
+     * @param int $time
42
+     * @param int $sizeDifference number of bytes the file has grown
43
+     */
44
+    public function propagateChange($internalPath, $time, $sizeDifference = 0) {
45
+        list($baseFolder) = explode('/', $internalPath, 2);
46
+        if (in_array($baseFolder, $this->ignoredBaseFolders)) {
47
+            return [];
48
+        } else {
49
+            parent::propagateChange($internalPath, $time, $sizeDifference);
50
+        }
51
+    }
52 52
 }
Please login to merge, or discard this patch.
lib/private/Files/Cache/Updater.php 1 patch
Indentation   +212 added lines, -212 removed lines patch added patch discarded remove patch
@@ -36,216 +36,216 @@
 block discarded – undo
36 36
  *
37 37
  */
38 38
 class Updater implements IUpdater {
39
-	/**
40
-	 * @var bool
41
-	 */
42
-	protected $enabled = true;
43
-
44
-	/**
45
-	 * @var \OC\Files\Storage\Storage
46
-	 */
47
-	protected $storage;
48
-
49
-	/**
50
-	 * @var \OC\Files\Cache\Propagator
51
-	 */
52
-	protected $propagator;
53
-
54
-	/**
55
-	 * @var Scanner
56
-	 */
57
-	protected $scanner;
58
-
59
-	/**
60
-	 * @var Cache
61
-	 */
62
-	protected $cache;
63
-
64
-	/**
65
-	 * @param \OC\Files\Storage\Storage $storage
66
-	 */
67
-	public function __construct(\OC\Files\Storage\Storage $storage) {
68
-		$this->storage = $storage;
69
-		$this->propagator = $storage->getPropagator();
70
-		$this->scanner = $storage->getScanner();
71
-		$this->cache = $storage->getCache();
72
-	}
73
-
74
-	/**
75
-	 * Disable updating the cache trough this updater
76
-	 */
77
-	public function disable() {
78
-		$this->enabled = false;
79
-	}
80
-
81
-	/**
82
-	 * Re-enable the updating of the cache trough this updater
83
-	 */
84
-	public function enable() {
85
-		$this->enabled = true;
86
-	}
87
-
88
-	/**
89
-	 * Get the propagator for etags and mtime for the view the updater works on
90
-	 *
91
-	 * @return Propagator
92
-	 */
93
-	public function getPropagator() {
94
-		return $this->propagator;
95
-	}
96
-
97
-	/**
98
-	 * Propagate etag and mtime changes for the parent folders of $path up to the root of the filesystem
99
-	 *
100
-	 * @param string $path the path of the file to propagate the changes for
101
-	 * @param int|null $time the timestamp to set as mtime for the parent folders, if left out the current time is used
102
-	 */
103
-	public function propagate($path, $time = null) {
104
-		if (Scanner::isPartialFile($path)) {
105
-			return;
106
-		}
107
-		$this->propagator->propagateChange($path, $time);
108
-	}
109
-
110
-	/**
111
-	 * Update the cache for $path and update the size, etag and mtime of the parent folders
112
-	 *
113
-	 * @param string $path
114
-	 * @param int $time
115
-	 */
116
-	public function update($path, $time = null) {
117
-		if (!$this->enabled or Scanner::isPartialFile($path)) {
118
-			return;
119
-		}
120
-		if (is_null($time)) {
121
-			$time = time();
122
-		}
123
-
124
-		$data = $this->scanner->scan($path, Scanner::SCAN_SHALLOW, -1, false);
125
-		if (
126
-			isset($data['oldSize']) && isset($data['size']) &&
127
-			!$data['encrypted'] // encryption is a pita and touches the cache itself
128
-		) {
129
-			$sizeDifference = $data['size'] - $data['oldSize'];
130
-		} else {
131
-			// scanner didn't provide size info, fallback to full size calculation
132
-			$sizeDifference = 0;
133
-			if ($this->cache instanceof Cache) {
134
-				$this->cache->correctFolderSize($path, $data);
135
-			}
136
-		}
137
-		$this->correctParentStorageMtime($path);
138
-		$this->propagator->propagateChange($path, $time, $sizeDifference);
139
-	}
140
-
141
-	/**
142
-	 * Remove $path from the cache and update the size, etag and mtime of the parent folders
143
-	 *
144
-	 * @param string $path
145
-	 */
146
-	public function remove($path) {
147
-		if (!$this->enabled or Scanner::isPartialFile($path)) {
148
-			return;
149
-		}
150
-
151
-		$parent = dirname($path);
152
-		if ($parent === '.') {
153
-			$parent = '';
154
-		}
155
-
156
-		$entry = $this->cache->get($path);
157
-
158
-		$this->cache->remove($path);
159
-
160
-		$this->correctParentStorageMtime($path);
161
-		if ($entry instanceof ICacheEntry) {
162
-			$this->propagator->propagateChange($path, time(), -$entry->getSize());
163
-		} else {
164
-			$this->propagator->propagateChange($path, time());
165
-			if ($this->cache instanceof Cache) {
166
-				$this->cache->correctFolderSize($parent);
167
-			}
168
-		}
169
-
170
-	}
171
-
172
-	/**
173
-	 * Rename a file or folder in the cache and update the size, etag and mtime of the parent folders
174
-	 *
175
-	 * @param IStorage $sourceStorage
176
-	 * @param string $source
177
-	 * @param string $target
178
-	 */
179
-	public function renameFromStorage(IStorage $sourceStorage, $source, $target) {
180
-		if (!$this->enabled or Scanner::isPartialFile($source) or Scanner::isPartialFile($target)) {
181
-			return;
182
-		}
183
-
184
-		$time = time();
185
-
186
-		$sourceCache = $sourceStorage->getCache();
187
-		$sourceUpdater = $sourceStorage->getUpdater();
188
-		$sourcePropagator = $sourceStorage->getPropagator();
189
-
190
-		if ($sourceCache->inCache($source)) {
191
-			if ($this->cache->inCache($target)) {
192
-				$this->cache->remove($target);
193
-			}
194
-
195
-			if ($sourceStorage === $this->storage) {
196
-				$this->cache->move($source, $target);
197
-			} else {
198
-				$this->cache->moveFromCache($sourceCache, $source, $target);
199
-			}
200
-		}
201
-
202
-		if (pathinfo($source, PATHINFO_EXTENSION) !== pathinfo($target, PATHINFO_EXTENSION)) {
203
-			// handle mime type change
204
-			$mimeType = $this->storage->getMimeType($target);
205
-			$fileId = $this->cache->getId($target);
206
-			$this->cache->update($fileId, ['mimetype' => $mimeType]);
207
-		}
208
-
209
-		if ($sourceCache instanceof Cache) {
210
-			$sourceCache->correctFolderSize($source);
211
-		}
212
-		if ($this->cache instanceof Cache) {
213
-			$this->cache->correctFolderSize($target);
214
-		}
215
-		if ($sourceUpdater instanceof Updater) {
216
-			$sourceUpdater->correctParentStorageMtime($source);
217
-		}
218
-		$this->correctParentStorageMtime($target);
219
-		$this->updateStorageMTimeOnly($target);
220
-		$sourcePropagator->propagateChange($source, $time);
221
-		$this->propagator->propagateChange($target, $time);
222
-	}
223
-
224
-	private function updateStorageMTimeOnly($internalPath) {
225
-		$fileId = $this->cache->getId($internalPath);
226
-		if ($fileId !== -1) {
227
-			$this->cache->update(
228
-				$fileId, [
229
-					'mtime' => null, // this magic tells it to not overwrite mtime
230
-					'storage_mtime' => $this->storage->filemtime($internalPath)
231
-				]
232
-			);
233
-		}
234
-	}
235
-
236
-	/**
237
-	 * update the storage_mtime of the direct parent in the cache to the mtime from the storage
238
-	 *
239
-	 * @param string $internalPath
240
-	 */
241
-	private function correctParentStorageMtime($internalPath) {
242
-		$parentId = $this->cache->getParentId($internalPath);
243
-		$parent = dirname($internalPath);
244
-		if ($parentId != -1) {
245
-			$mtime = $this->storage->filemtime($parent);
246
-			if ($mtime !== false) {
247
-				$this->cache->update($parentId, array('storage_mtime' => $mtime));
248
-			}
249
-		}
250
-	}
39
+    /**
40
+     * @var bool
41
+     */
42
+    protected $enabled = true;
43
+
44
+    /**
45
+     * @var \OC\Files\Storage\Storage
46
+     */
47
+    protected $storage;
48
+
49
+    /**
50
+     * @var \OC\Files\Cache\Propagator
51
+     */
52
+    protected $propagator;
53
+
54
+    /**
55
+     * @var Scanner
56
+     */
57
+    protected $scanner;
58
+
59
+    /**
60
+     * @var Cache
61
+     */
62
+    protected $cache;
63
+
64
+    /**
65
+     * @param \OC\Files\Storage\Storage $storage
66
+     */
67
+    public function __construct(\OC\Files\Storage\Storage $storage) {
68
+        $this->storage = $storage;
69
+        $this->propagator = $storage->getPropagator();
70
+        $this->scanner = $storage->getScanner();
71
+        $this->cache = $storage->getCache();
72
+    }
73
+
74
+    /**
75
+     * Disable updating the cache trough this updater
76
+     */
77
+    public function disable() {
78
+        $this->enabled = false;
79
+    }
80
+
81
+    /**
82
+     * Re-enable the updating of the cache trough this updater
83
+     */
84
+    public function enable() {
85
+        $this->enabled = true;
86
+    }
87
+
88
+    /**
89
+     * Get the propagator for etags and mtime for the view the updater works on
90
+     *
91
+     * @return Propagator
92
+     */
93
+    public function getPropagator() {
94
+        return $this->propagator;
95
+    }
96
+
97
+    /**
98
+     * Propagate etag and mtime changes for the parent folders of $path up to the root of the filesystem
99
+     *
100
+     * @param string $path the path of the file to propagate the changes for
101
+     * @param int|null $time the timestamp to set as mtime for the parent folders, if left out the current time is used
102
+     */
103
+    public function propagate($path, $time = null) {
104
+        if (Scanner::isPartialFile($path)) {
105
+            return;
106
+        }
107
+        $this->propagator->propagateChange($path, $time);
108
+    }
109
+
110
+    /**
111
+     * Update the cache for $path and update the size, etag and mtime of the parent folders
112
+     *
113
+     * @param string $path
114
+     * @param int $time
115
+     */
116
+    public function update($path, $time = null) {
117
+        if (!$this->enabled or Scanner::isPartialFile($path)) {
118
+            return;
119
+        }
120
+        if (is_null($time)) {
121
+            $time = time();
122
+        }
123
+
124
+        $data = $this->scanner->scan($path, Scanner::SCAN_SHALLOW, -1, false);
125
+        if (
126
+            isset($data['oldSize']) && isset($data['size']) &&
127
+            !$data['encrypted'] // encryption is a pita and touches the cache itself
128
+        ) {
129
+            $sizeDifference = $data['size'] - $data['oldSize'];
130
+        } else {
131
+            // scanner didn't provide size info, fallback to full size calculation
132
+            $sizeDifference = 0;
133
+            if ($this->cache instanceof Cache) {
134
+                $this->cache->correctFolderSize($path, $data);
135
+            }
136
+        }
137
+        $this->correctParentStorageMtime($path);
138
+        $this->propagator->propagateChange($path, $time, $sizeDifference);
139
+    }
140
+
141
+    /**
142
+     * Remove $path from the cache and update the size, etag and mtime of the parent folders
143
+     *
144
+     * @param string $path
145
+     */
146
+    public function remove($path) {
147
+        if (!$this->enabled or Scanner::isPartialFile($path)) {
148
+            return;
149
+        }
150
+
151
+        $parent = dirname($path);
152
+        if ($parent === '.') {
153
+            $parent = '';
154
+        }
155
+
156
+        $entry = $this->cache->get($path);
157
+
158
+        $this->cache->remove($path);
159
+
160
+        $this->correctParentStorageMtime($path);
161
+        if ($entry instanceof ICacheEntry) {
162
+            $this->propagator->propagateChange($path, time(), -$entry->getSize());
163
+        } else {
164
+            $this->propagator->propagateChange($path, time());
165
+            if ($this->cache instanceof Cache) {
166
+                $this->cache->correctFolderSize($parent);
167
+            }
168
+        }
169
+
170
+    }
171
+
172
+    /**
173
+     * Rename a file or folder in the cache and update the size, etag and mtime of the parent folders
174
+     *
175
+     * @param IStorage $sourceStorage
176
+     * @param string $source
177
+     * @param string $target
178
+     */
179
+    public function renameFromStorage(IStorage $sourceStorage, $source, $target) {
180
+        if (!$this->enabled or Scanner::isPartialFile($source) or Scanner::isPartialFile($target)) {
181
+            return;
182
+        }
183
+
184
+        $time = time();
185
+
186
+        $sourceCache = $sourceStorage->getCache();
187
+        $sourceUpdater = $sourceStorage->getUpdater();
188
+        $sourcePropagator = $sourceStorage->getPropagator();
189
+
190
+        if ($sourceCache->inCache($source)) {
191
+            if ($this->cache->inCache($target)) {
192
+                $this->cache->remove($target);
193
+            }
194
+
195
+            if ($sourceStorage === $this->storage) {
196
+                $this->cache->move($source, $target);
197
+            } else {
198
+                $this->cache->moveFromCache($sourceCache, $source, $target);
199
+            }
200
+        }
201
+
202
+        if (pathinfo($source, PATHINFO_EXTENSION) !== pathinfo($target, PATHINFO_EXTENSION)) {
203
+            // handle mime type change
204
+            $mimeType = $this->storage->getMimeType($target);
205
+            $fileId = $this->cache->getId($target);
206
+            $this->cache->update($fileId, ['mimetype' => $mimeType]);
207
+        }
208
+
209
+        if ($sourceCache instanceof Cache) {
210
+            $sourceCache->correctFolderSize($source);
211
+        }
212
+        if ($this->cache instanceof Cache) {
213
+            $this->cache->correctFolderSize($target);
214
+        }
215
+        if ($sourceUpdater instanceof Updater) {
216
+            $sourceUpdater->correctParentStorageMtime($source);
217
+        }
218
+        $this->correctParentStorageMtime($target);
219
+        $this->updateStorageMTimeOnly($target);
220
+        $sourcePropagator->propagateChange($source, $time);
221
+        $this->propagator->propagateChange($target, $time);
222
+    }
223
+
224
+    private function updateStorageMTimeOnly($internalPath) {
225
+        $fileId = $this->cache->getId($internalPath);
226
+        if ($fileId !== -1) {
227
+            $this->cache->update(
228
+                $fileId, [
229
+                    'mtime' => null, // this magic tells it to not overwrite mtime
230
+                    'storage_mtime' => $this->storage->filemtime($internalPath)
231
+                ]
232
+            );
233
+        }
234
+    }
235
+
236
+    /**
237
+     * update the storage_mtime of the direct parent in the cache to the mtime from the storage
238
+     *
239
+     * @param string $internalPath
240
+     */
241
+    private function correctParentStorageMtime($internalPath) {
242
+        $parentId = $this->cache->getParentId($internalPath);
243
+        $parent = dirname($internalPath);
244
+        if ($parentId != -1) {
245
+            $mtime = $this->storage->filemtime($parent);
246
+            if ($mtime !== false) {
247
+                $this->cache->update($parentId, array('storage_mtime' => $mtime));
248
+            }
249
+        }
250
+    }
251 251
 }
Please login to merge, or discard this patch.
lib/private/Files/Cache/CacheEntry.php 1 patch
Indentation   +62 added lines, -62 removed lines patch added patch discarded remove patch
@@ -28,88 +28,88 @@
 block discarded – undo
28 28
  * meta data for a file or folder
29 29
  */
30 30
 class CacheEntry implements ICacheEntry, \ArrayAccess {
31
-	/**
32
-	 * @var array
33
-	 */
34
-	private $data;
31
+    /**
32
+     * @var array
33
+     */
34
+    private $data;
35 35
 
36
-	public function __construct(array $data) {
37
-		$this->data = $data;
38
-	}
36
+    public function __construct(array $data) {
37
+        $this->data = $data;
38
+    }
39 39
 
40
-	public function offsetSet($offset, $value) {
41
-		$this->data[$offset] = $value;
42
-	}
40
+    public function offsetSet($offset, $value) {
41
+        $this->data[$offset] = $value;
42
+    }
43 43
 
44
-	public function offsetExists($offset) {
45
-		return isset($this->data[$offset]);
46
-	}
44
+    public function offsetExists($offset) {
45
+        return isset($this->data[$offset]);
46
+    }
47 47
 
48
-	public function offsetUnset($offset) {
49
-		unset($this->data[$offset]);
50
-	}
48
+    public function offsetUnset($offset) {
49
+        unset($this->data[$offset]);
50
+    }
51 51
 
52
-	public function offsetGet($offset) {
53
-		if (isset($this->data[$offset])) {
54
-			return $this->data[$offset];
55
-		} else {
56
-			return null;
57
-		}
58
-	}
52
+    public function offsetGet($offset) {
53
+        if (isset($this->data[$offset])) {
54
+            return $this->data[$offset];
55
+        } else {
56
+            return null;
57
+        }
58
+    }
59 59
 
60
-	public function getId() {
61
-		return (int)$this->data['fileid'];
62
-	}
60
+    public function getId() {
61
+        return (int)$this->data['fileid'];
62
+    }
63 63
 
64
-	public function getStorageId() {
65
-		return $this->data['storage'];
66
-	}
64
+    public function getStorageId() {
65
+        return $this->data['storage'];
66
+    }
67 67
 
68 68
 
69
-	public function getPath() {
70
-		return $this->data['path'];
71
-	}
69
+    public function getPath() {
70
+        return $this->data['path'];
71
+    }
72 72
 
73 73
 
74
-	public function getName() {
75
-		return $this->data['name'];
76
-	}
74
+    public function getName() {
75
+        return $this->data['name'];
76
+    }
77 77
 
78 78
 
79
-	public function getMimeType() {
80
-		return $this->data['mimetype'];
81
-	}
79
+    public function getMimeType() {
80
+        return $this->data['mimetype'];
81
+    }
82 82
 
83 83
 
84
-	public function getMimePart() {
85
-		return $this->data['mimepart'];
86
-	}
84
+    public function getMimePart() {
85
+        return $this->data['mimepart'];
86
+    }
87 87
 
88
-	public function getSize() {
89
-		return $this->data['size'];
90
-	}
88
+    public function getSize() {
89
+        return $this->data['size'];
90
+    }
91 91
 
92
-	public function getMTime() {
93
-		return $this->data['mtime'];
94
-	}
92
+    public function getMTime() {
93
+        return $this->data['mtime'];
94
+    }
95 95
 
96
-	public function getStorageMTime() {
97
-		return $this->data['storage_mtime'];
98
-	}
96
+    public function getStorageMTime() {
97
+        return $this->data['storage_mtime'];
98
+    }
99 99
 
100
-	public function getEtag() {
101
-		return $this->data['etag'];
102
-	}
100
+    public function getEtag() {
101
+        return $this->data['etag'];
102
+    }
103 103
 
104
-	public function getPermissions() {
105
-		return $this->data['permissions'];
106
-	}
104
+    public function getPermissions() {
105
+        return $this->data['permissions'];
106
+    }
107 107
 
108
-	public function isEncrypted() {
109
-		return isset($this->data['encrypted']) && $this->data['encrypted'];
110
-	}
108
+    public function isEncrypted() {
109
+        return isset($this->data['encrypted']) && $this->data['encrypted'];
110
+    }
111 111
 
112
-	public function getData() {
113
-		return $this->data;
114
-	}
112
+    public function getData() {
113
+        return $this->data;
114
+    }
115 115
 }
Please login to merge, or discard this patch.