Completed
Pull Request — master (#3590)
by Individual IT
11:38
created
apps/files/lib/AppInfo/Application.php 1 patch
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -31,67 +31,67 @@
 block discarded – undo
31 31
 use OCA\Files\Controller\ViewController;
32 32
 
33 33
 class Application extends App {
34
-	public function __construct(array $urlParams=array()) {
35
-		parent::__construct('files', $urlParams);
36
-		$container = $this->getContainer();
37
-		$server = $container->getServer();
34
+    public function __construct(array $urlParams=array()) {
35
+        parent::__construct('files', $urlParams);
36
+        $container = $this->getContainer();
37
+        $server = $container->getServer();
38 38
 
39
-		/**
40
-		 * Controllers
41
-		 */
42
-		$container->registerService('APIController', function (IContainer $c) use ($server) {
43
-			return new ApiController(
44
-				$c->query('AppName'),
45
-				$c->query('Request'),
46
-				$server->getUserSession(),
47
-				$c->query('TagService'),
48
-				$server->getPreviewManager(),
49
-				$server->getShareManager(),
50
-				$server->getConfig(),
51
-				$server->getUserFolder()
52
-			);
53
-		});
39
+        /**
40
+         * Controllers
41
+         */
42
+        $container->registerService('APIController', function (IContainer $c) use ($server) {
43
+            return new ApiController(
44
+                $c->query('AppName'),
45
+                $c->query('Request'),
46
+                $server->getUserSession(),
47
+                $c->query('TagService'),
48
+                $server->getPreviewManager(),
49
+                $server->getShareManager(),
50
+                $server->getConfig(),
51
+                $server->getUserFolder()
52
+            );
53
+        });
54 54
 
55
-		$container->registerService('ViewController', function (IContainer $c) use ($server) {
56
-			return new ViewController(
57
-				$c->query('AppName'),
58
-				$c->query('Request'),
59
-				$server->getURLGenerator(),
60
-				$c->query('L10N'),
61
-				$server->getConfig(),
62
-				$server->getEventDispatcher(),
63
-				$server->getUserSession(),
64
-				$server->getAppManager(),
65
-				$server->getRootFolder()
66
-			);
67
-		});
55
+        $container->registerService('ViewController', function (IContainer $c) use ($server) {
56
+            return new ViewController(
57
+                $c->query('AppName'),
58
+                $c->query('Request'),
59
+                $server->getURLGenerator(),
60
+                $c->query('L10N'),
61
+                $server->getConfig(),
62
+                $server->getEventDispatcher(),
63
+                $server->getUserSession(),
64
+                $server->getAppManager(),
65
+                $server->getRootFolder()
66
+            );
67
+        });
68 68
 
69
-		/**
70
-		 * Core
71
-		 */
72
-		$container->registerService('L10N', function(IContainer $c) {
73
-			return $c->query('ServerContainer')->getL10N($c->query('AppName'));
74
-		});
69
+        /**
70
+         * Core
71
+         */
72
+        $container->registerService('L10N', function(IContainer $c) {
73
+            return $c->query('ServerContainer')->getL10N($c->query('AppName'));
74
+        });
75 75
 
76
-		/**
77
-		 * Services
78
-		 */
79
-		$container->registerService('Tagger', function(IContainer $c)  {
80
-			return $c->query('ServerContainer')->getTagManager()->load('files');
81
-		});
82
-		$container->registerService('TagService', function(IContainer $c)  {
83
-			$homeFolder = $c->query('ServerContainer')->getUserFolder();
84
-			return new TagService(
85
-				$c->query('ServerContainer')->getUserSession(),
86
-				$c->query('ServerContainer')->getActivityManager(),
87
-				$c->query('Tagger'),
88
-				$homeFolder
89
-			);
90
-		});
76
+        /**
77
+         * Services
78
+         */
79
+        $container->registerService('Tagger', function(IContainer $c)  {
80
+            return $c->query('ServerContainer')->getTagManager()->load('files');
81
+        });
82
+        $container->registerService('TagService', function(IContainer $c)  {
83
+            $homeFolder = $c->query('ServerContainer')->getUserFolder();
84
+            return new TagService(
85
+                $c->query('ServerContainer')->getUserSession(),
86
+                $c->query('ServerContainer')->getActivityManager(),
87
+                $c->query('Tagger'),
88
+                $homeFolder
89
+            );
90
+        });
91 91
 
92
-		/*
92
+        /*
93 93
 		 * Register capabilities
94 94
 		 */
95
-		$container->registerCapability('OCA\Files\Capabilities');
96
-	}
95
+        $container->registerCapability('OCA\Files\Capabilities');
96
+    }
97 97
 }
Please login to merge, or discard this patch.
apps/files/lib/Helper.php 1 patch
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -37,213 +37,213 @@
 block discarded – undo
37 37
  * Helper class for manipulating file information
38 38
  */
39 39
 class Helper {
40
-	/**
41
-	 * @param string $dir
42
-	 * @return array
43
-	 * @throws \OCP\Files\NotFoundException
44
-	 */
45
-	public static function buildFileStorageStatistics($dir) {
46
-		// information about storage capacities
47
-		$storageInfo = \OC_Helper::getStorageInfo($dir);
48
-		$l = \OC::$server->getL10N('files');
49
-		$maxUploadFileSize = \OCP\Util::maxUploadFilesize($dir, $storageInfo['free']);
50
-		$maxHumanFileSize = \OCP\Util::humanFileSize($maxUploadFileSize);
51
-		$maxHumanFileSize = $l->t('Upload (max. %s)', array($maxHumanFileSize));
52
-
53
-		return [
54
-			'uploadMaxFilesize' => $maxUploadFileSize,
55
-			'maxHumanFilesize'  => $maxHumanFileSize,
56
-			'freeSpace' => $storageInfo['free'],
57
-			'usedSpacePercent'  => (int)$storageInfo['relative'],
58
-			'owner' => $storageInfo['owner'],
59
-			'ownerDisplayName' => $storageInfo['ownerDisplayName'],
60
-		];
61
-	}
62
-
63
-	/**
64
-	 * Determine icon for a given file
65
-	 *
66
-	 * @param \OCP\Files\FileInfo $file file info
67
-	 * @return string icon URL
68
-	 */
69
-	public static function determineIcon($file) {
70
-		if($file['type'] === 'dir') {
71
-			$icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir');
72
-			// TODO: move this part to the client side, using mountType
73
-			if ($file->isShared()) {
74
-				$icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-shared');
75
-			} elseif ($file->isMounted()) {
76
-				$icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-external');
77
-			}
78
-		}else{
79
-			$icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($file->getMimetype());
80
-		}
81
-
82
-		return substr($icon, 0, -3) . 'svg';
83
-	}
84
-
85
-	/**
86
-	 * Comparator function to sort files alphabetically and have
87
-	 * the directories appear first
88
-	 *
89
-	 * @param \OCP\Files\FileInfo $a file
90
-	 * @param \OCP\Files\FileInfo $b file
91
-	 * @return int -1 if $a must come before $b, 1 otherwise
92
-	 */
93
-	public static function compareFileNames(FileInfo $a, FileInfo $b) {
94
-		$aType = $a->getType();
95
-		$bType = $b->getType();
96
-		if ($aType === 'dir' and $bType !== 'dir') {
97
-			return -1;
98
-		} elseif ($aType !== 'dir' and $bType === 'dir') {
99
-			return 1;
100
-		} else {
101
-			return \OCP\Util::naturalSortCompare($a->getName(), $b->getName());
102
-		}
103
-	}
104
-
105
-	/**
106
-	 * Comparator function to sort files by date
107
-	 *
108
-	 * @param \OCP\Files\FileInfo $a file
109
-	 * @param \OCP\Files\FileInfo $b file
110
-	 * @return int -1 if $a must come before $b, 1 otherwise
111
-	 */
112
-	public static function compareTimestamp(FileInfo $a, FileInfo $b) {
113
-		$aTime = $a->getMTime();
114
-		$bTime = $b->getMTime();
115
-		return ($aTime < $bTime) ? -1 : 1;
116
-	}
117
-
118
-	/**
119
-	 * Comparator function to sort files by size
120
-	 *
121
-	 * @param \OCP\Files\FileInfo $a file
122
-	 * @param \OCP\Files\FileInfo $b file
123
-	 * @return int -1 if $a must come before $b, 1 otherwise
124
-	 */
125
-	public static function compareSize(FileInfo $a, FileInfo $b) {
126
-		$aSize = $a->getSize();
127
-		$bSize = $b->getSize();
128
-		return ($aSize < $bSize) ? -1 : 1;
129
-	}
130
-
131
-	/**
132
-	 * Formats the file info to be returned as JSON to the client.
133
-	 *
134
-	 * @param \OCP\Files\FileInfo $i
135
-	 * @return array formatted file info
136
-	 */
137
-	public static function formatFileInfo(FileInfo $i) {
138
-		$entry = array();
139
-
140
-		$entry['id'] = $i['fileid'];
141
-		$entry['parentId'] = $i['parent'];
142
-		$entry['mtime'] = $i['mtime'] * 1000;
143
-		// only pick out the needed attributes
144
-		$entry['name'] = $i->getName();
145
-		$entry['permissions'] = $i['permissions'];
146
-		$entry['mimetype'] = $i['mimetype'];
147
-		$entry['size'] = $i['size'];
148
-		$entry['type'] = $i['type'];
149
-		$entry['etag'] = $i['etag'];
150
-		if (isset($i['tags'])) {
151
-			$entry['tags'] = $i['tags'];
152
-		}
153
-		if (isset($i['displayname_owner'])) {
154
-			$entry['shareOwner'] = $i['displayname_owner'];
155
-		}
156
-		if (isset($i['is_share_mount_point'])) {
157
-			$entry['isShareMountPoint'] = $i['is_share_mount_point'];
158
-		}
159
-		$mountType = null;
160
-		if ($i->isShared()) {
161
-			$mountType = 'shared';
162
-		} else if ($i->isMounted()) {
163
-			$mountType = 'external';
164
-		}
165
-		if ($mountType !== null) {
166
-			if ($i->getInternalPath() === '') {
167
-				$mountType .= '-root';
168
-			}
169
-			$entry['mountType'] = $mountType;
170
-		}
171
-		if (isset($i['extraData'])) {
172
-			$entry['extraData'] = $i['extraData'];
173
-		}
174
-		return $entry;
175
-	}
176
-
177
-	/**
178
-	 * Format file info for JSON
179
-	 * @param \OCP\Files\FileInfo[] $fileInfos file infos
180
-	 * @return array
181
-	 */
182
-	public static function formatFileInfos($fileInfos) {
183
-		$files = array();
184
-		foreach ($fileInfos as $i) {
185
-			$files[] = self::formatFileInfo($i);
186
-		}
187
-
188
-		return $files;
189
-	}
190
-
191
-	/**
192
-	 * Retrieves the contents of the given directory and
193
-	 * returns it as a sorted array of FileInfo.
194
-	 *
195
-	 * @param string $dir path to the directory
196
-	 * @param string $sortAttribute attribute to sort on
197
-	 * @param bool $sortDescending true for descending sort, false otherwise
198
-	 * @param string $mimetypeFilter limit returned content to this mimetype or mimepart
199
-	 * @return \OCP\Files\FileInfo[] files
200
-	 */
201
-	public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false, $mimetypeFilter = '') {
202
-		$content = \OC\Files\Filesystem::getDirectoryContent($dir, $mimetypeFilter);
203
-
204
-		return self::sortFiles($content, $sortAttribute, $sortDescending);
205
-	}
206
-
207
-	/**
208
-	 * Populate the result set with file tags
209
-	 *
210
-	 * @param array $fileList
211
-	 * @return array file list populated with tags
212
-	 */
213
-	public static function populateTags(array $fileList) {
214
-		$filesById = array();
215
-		foreach ($fileList as $fileData) {
216
-			$filesById[$fileData['fileid']] = $fileData;
217
-		}
218
-		$tagger = \OC::$server->getTagManager()->load('files');
219
-		$tags = $tagger->getTagsForObjects(array_keys($filesById));
220
-		if ($tags) {
221
-			foreach ($tags as $fileId => $fileTags) {
222
-				$filesById[$fileId]['tags'] = $fileTags;
223
-			}
224
-		}
225
-		return $fileList;
226
-	}
227
-
228
-	/**
229
-	 * Sort the given file info array
230
-	 *
231
-	 * @param \OCP\Files\FileInfo[] $files files to sort
232
-	 * @param string $sortAttribute attribute to sort on
233
-	 * @param bool $sortDescending true for descending sort, false otherwise
234
-	 * @return \OCP\Files\FileInfo[] sorted files
235
-	 */
236
-	public static function sortFiles($files, $sortAttribute = 'name', $sortDescending = false) {
237
-		$sortFunc = 'compareFileNames';
238
-		if ($sortAttribute === 'mtime') {
239
-			$sortFunc = 'compareTimestamp';
240
-		} else if ($sortAttribute === 'size') {
241
-			$sortFunc = 'compareSize';
242
-		}
243
-		usort($files, array('\OCA\Files\Helper', $sortFunc));
244
-		if ($sortDescending) {
245
-			$files = array_reverse($files);
246
-		}
247
-		return $files;
248
-	}
40
+    /**
41
+     * @param string $dir
42
+     * @return array
43
+     * @throws \OCP\Files\NotFoundException
44
+     */
45
+    public static function buildFileStorageStatistics($dir) {
46
+        // information about storage capacities
47
+        $storageInfo = \OC_Helper::getStorageInfo($dir);
48
+        $l = \OC::$server->getL10N('files');
49
+        $maxUploadFileSize = \OCP\Util::maxUploadFilesize($dir, $storageInfo['free']);
50
+        $maxHumanFileSize = \OCP\Util::humanFileSize($maxUploadFileSize);
51
+        $maxHumanFileSize = $l->t('Upload (max. %s)', array($maxHumanFileSize));
52
+
53
+        return [
54
+            'uploadMaxFilesize' => $maxUploadFileSize,
55
+            'maxHumanFilesize'  => $maxHumanFileSize,
56
+            'freeSpace' => $storageInfo['free'],
57
+            'usedSpacePercent'  => (int)$storageInfo['relative'],
58
+            'owner' => $storageInfo['owner'],
59
+            'ownerDisplayName' => $storageInfo['ownerDisplayName'],
60
+        ];
61
+    }
62
+
63
+    /**
64
+     * Determine icon for a given file
65
+     *
66
+     * @param \OCP\Files\FileInfo $file file info
67
+     * @return string icon URL
68
+     */
69
+    public static function determineIcon($file) {
70
+        if($file['type'] === 'dir') {
71
+            $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir');
72
+            // TODO: move this part to the client side, using mountType
73
+            if ($file->isShared()) {
74
+                $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-shared');
75
+            } elseif ($file->isMounted()) {
76
+                $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-external');
77
+            }
78
+        }else{
79
+            $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($file->getMimetype());
80
+        }
81
+
82
+        return substr($icon, 0, -3) . 'svg';
83
+    }
84
+
85
+    /**
86
+     * Comparator function to sort files alphabetically and have
87
+     * the directories appear first
88
+     *
89
+     * @param \OCP\Files\FileInfo $a file
90
+     * @param \OCP\Files\FileInfo $b file
91
+     * @return int -1 if $a must come before $b, 1 otherwise
92
+     */
93
+    public static function compareFileNames(FileInfo $a, FileInfo $b) {
94
+        $aType = $a->getType();
95
+        $bType = $b->getType();
96
+        if ($aType === 'dir' and $bType !== 'dir') {
97
+            return -1;
98
+        } elseif ($aType !== 'dir' and $bType === 'dir') {
99
+            return 1;
100
+        } else {
101
+            return \OCP\Util::naturalSortCompare($a->getName(), $b->getName());
102
+        }
103
+    }
104
+
105
+    /**
106
+     * Comparator function to sort files by date
107
+     *
108
+     * @param \OCP\Files\FileInfo $a file
109
+     * @param \OCP\Files\FileInfo $b file
110
+     * @return int -1 if $a must come before $b, 1 otherwise
111
+     */
112
+    public static function compareTimestamp(FileInfo $a, FileInfo $b) {
113
+        $aTime = $a->getMTime();
114
+        $bTime = $b->getMTime();
115
+        return ($aTime < $bTime) ? -1 : 1;
116
+    }
117
+
118
+    /**
119
+     * Comparator function to sort files by size
120
+     *
121
+     * @param \OCP\Files\FileInfo $a file
122
+     * @param \OCP\Files\FileInfo $b file
123
+     * @return int -1 if $a must come before $b, 1 otherwise
124
+     */
125
+    public static function compareSize(FileInfo $a, FileInfo $b) {
126
+        $aSize = $a->getSize();
127
+        $bSize = $b->getSize();
128
+        return ($aSize < $bSize) ? -1 : 1;
129
+    }
130
+
131
+    /**
132
+     * Formats the file info to be returned as JSON to the client.
133
+     *
134
+     * @param \OCP\Files\FileInfo $i
135
+     * @return array formatted file info
136
+     */
137
+    public static function formatFileInfo(FileInfo $i) {
138
+        $entry = array();
139
+
140
+        $entry['id'] = $i['fileid'];
141
+        $entry['parentId'] = $i['parent'];
142
+        $entry['mtime'] = $i['mtime'] * 1000;
143
+        // only pick out the needed attributes
144
+        $entry['name'] = $i->getName();
145
+        $entry['permissions'] = $i['permissions'];
146
+        $entry['mimetype'] = $i['mimetype'];
147
+        $entry['size'] = $i['size'];
148
+        $entry['type'] = $i['type'];
149
+        $entry['etag'] = $i['etag'];
150
+        if (isset($i['tags'])) {
151
+            $entry['tags'] = $i['tags'];
152
+        }
153
+        if (isset($i['displayname_owner'])) {
154
+            $entry['shareOwner'] = $i['displayname_owner'];
155
+        }
156
+        if (isset($i['is_share_mount_point'])) {
157
+            $entry['isShareMountPoint'] = $i['is_share_mount_point'];
158
+        }
159
+        $mountType = null;
160
+        if ($i->isShared()) {
161
+            $mountType = 'shared';
162
+        } else if ($i->isMounted()) {
163
+            $mountType = 'external';
164
+        }
165
+        if ($mountType !== null) {
166
+            if ($i->getInternalPath() === '') {
167
+                $mountType .= '-root';
168
+            }
169
+            $entry['mountType'] = $mountType;
170
+        }
171
+        if (isset($i['extraData'])) {
172
+            $entry['extraData'] = $i['extraData'];
173
+        }
174
+        return $entry;
175
+    }
176
+
177
+    /**
178
+     * Format file info for JSON
179
+     * @param \OCP\Files\FileInfo[] $fileInfos file infos
180
+     * @return array
181
+     */
182
+    public static function formatFileInfos($fileInfos) {
183
+        $files = array();
184
+        foreach ($fileInfos as $i) {
185
+            $files[] = self::formatFileInfo($i);
186
+        }
187
+
188
+        return $files;
189
+    }
190
+
191
+    /**
192
+     * Retrieves the contents of the given directory and
193
+     * returns it as a sorted array of FileInfo.
194
+     *
195
+     * @param string $dir path to the directory
196
+     * @param string $sortAttribute attribute to sort on
197
+     * @param bool $sortDescending true for descending sort, false otherwise
198
+     * @param string $mimetypeFilter limit returned content to this mimetype or mimepart
199
+     * @return \OCP\Files\FileInfo[] files
200
+     */
201
+    public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false, $mimetypeFilter = '') {
202
+        $content = \OC\Files\Filesystem::getDirectoryContent($dir, $mimetypeFilter);
203
+
204
+        return self::sortFiles($content, $sortAttribute, $sortDescending);
205
+    }
206
+
207
+    /**
208
+     * Populate the result set with file tags
209
+     *
210
+     * @param array $fileList
211
+     * @return array file list populated with tags
212
+     */
213
+    public static function populateTags(array $fileList) {
214
+        $filesById = array();
215
+        foreach ($fileList as $fileData) {
216
+            $filesById[$fileData['fileid']] = $fileData;
217
+        }
218
+        $tagger = \OC::$server->getTagManager()->load('files');
219
+        $tags = $tagger->getTagsForObjects(array_keys($filesById));
220
+        if ($tags) {
221
+            foreach ($tags as $fileId => $fileTags) {
222
+                $filesById[$fileId]['tags'] = $fileTags;
223
+            }
224
+        }
225
+        return $fileList;
226
+    }
227
+
228
+    /**
229
+     * Sort the given file info array
230
+     *
231
+     * @param \OCP\Files\FileInfo[] $files files to sort
232
+     * @param string $sortAttribute attribute to sort on
233
+     * @param bool $sortDescending true for descending sort, false otherwise
234
+     * @return \OCP\Files\FileInfo[] sorted files
235
+     */
236
+    public static function sortFiles($files, $sortAttribute = 'name', $sortDescending = false) {
237
+        $sortFunc = 'compareFileNames';
238
+        if ($sortAttribute === 'mtime') {
239
+            $sortFunc = 'compareTimestamp';
240
+        } else if ($sortAttribute === 'size') {
241
+            $sortFunc = 'compareSize';
242
+        }
243
+        usort($files, array('\OCA\Files\Helper', $sortFunc));
244
+        if ($sortDescending) {
245
+            $files = array_reverse($files);
246
+        }
247
+        return $files;
248
+    }
249 249
 }
Please login to merge, or discard this patch.
apps/files/lib/Command/DeleteOrphanedFiles.php 1 patch
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -35,51 +35,51 @@
 block discarded – undo
35 35
  */
36 36
 class DeleteOrphanedFiles extends Command {
37 37
 
38
-	const CHUNK_SIZE = 200;
38
+    const CHUNK_SIZE = 200;
39 39
 
40
-	/**
41
-	 * @var IDBConnection
42
-	 */
43
-	protected $connection;
40
+    /**
41
+     * @var IDBConnection
42
+     */
43
+    protected $connection;
44 44
 
45
-	public function __construct(IDBConnection $connection) {
46
-		$this->connection = $connection;
47
-		parent::__construct();
48
-	}
45
+    public function __construct(IDBConnection $connection) {
46
+        $this->connection = $connection;
47
+        parent::__construct();
48
+    }
49 49
 
50
-	protected function configure() {
51
-		$this
52
-			->setName('files:cleanup')
53
-			->setDescription('cleanup filecache');
54
-	}
50
+    protected function configure() {
51
+        $this
52
+            ->setName('files:cleanup')
53
+            ->setDescription('cleanup filecache');
54
+    }
55 55
 
56
-	public function execute(InputInterface $input, OutputInterface $output) {
57
-		$deletedEntries = 0;
56
+    public function execute(InputInterface $input, OutputInterface $output) {
57
+        $deletedEntries = 0;
58 58
 
59
-		$query = $this->connection->getQueryBuilder();
60
-		$query->select('fc.fileid')
61
-			->from('filecache', 'fc')
62
-			->where($query->expr()->isNull('s.numeric_id'))
63
-			->leftJoin('fc', 'storages', 's', $query->expr()->eq('fc.storage', 's.numeric_id'))
64
-			->setMaxResults(self::CHUNK_SIZE);
59
+        $query = $this->connection->getQueryBuilder();
60
+        $query->select('fc.fileid')
61
+            ->from('filecache', 'fc')
62
+            ->where($query->expr()->isNull('s.numeric_id'))
63
+            ->leftJoin('fc', 'storages', 's', $query->expr()->eq('fc.storage', 's.numeric_id'))
64
+            ->setMaxResults(self::CHUNK_SIZE);
65 65
 
66
-		$deleteQuery = $this->connection->getQueryBuilder();
67
-		$deleteQuery->delete('filecache')
68
-			->where($deleteQuery->expr()->eq('fileid', $deleteQuery->createParameter('objectid')));
66
+        $deleteQuery = $this->connection->getQueryBuilder();
67
+        $deleteQuery->delete('filecache')
68
+            ->where($deleteQuery->expr()->eq('fileid', $deleteQuery->createParameter('objectid')));
69 69
 
70
-		$deletedInLastChunk = self::CHUNK_SIZE;
71
-		while ($deletedInLastChunk === self::CHUNK_SIZE) {
72
-			$deletedInLastChunk = 0;
73
-			$result = $query->execute();
74
-			while ($row = $result->fetch()) {
75
-				$deletedInLastChunk++;
76
-				$deletedEntries += $deleteQuery->setParameter('objectid', (int) $row['fileid'])
77
-					->execute();
78
-			}
79
-			$result->closeCursor();
80
-		}
70
+        $deletedInLastChunk = self::CHUNK_SIZE;
71
+        while ($deletedInLastChunk === self::CHUNK_SIZE) {
72
+            $deletedInLastChunk = 0;
73
+            $result = $query->execute();
74
+            while ($row = $result->fetch()) {
75
+                $deletedInLastChunk++;
76
+                $deletedEntries += $deleteQuery->setParameter('objectid', (int) $row['fileid'])
77
+                    ->execute();
78
+            }
79
+            $result->closeCursor();
80
+        }
81 81
 
82
-		$output->writeln("$deletedEntries orphaned file cache entries deleted");
83
-	}
82
+        $output->writeln("$deletedEntries orphaned file cache entries deleted");
83
+    }
84 84
 
85 85
 }
Please login to merge, or discard this patch.
apps/files/lib/Command/TransferOwnership.php 1 patch
Indentation   +216 added lines, -216 removed lines patch added patch discarded remove patch
@@ -41,220 +41,220 @@
 block discarded – undo
41 41
 
42 42
 class TransferOwnership extends Command {
43 43
 
44
-	/** @var IUserManager $userManager */
45
-	private $userManager;
46
-
47
-	/** @var IManager */
48
-	private $shareManager;
49
-
50
-	/** @var IMountManager */
51
-	private $mountManager;
52
-
53
-	/** @var FileInfo[] */
54
-	private $allFiles = [];
55
-
56
-	/** @var FileInfo[] */
57
-	private $encryptedFiles = [];
58
-
59
-	/** @var IShare[] */
60
-	private $shares = [];
61
-
62
-	/** @var string */
63
-	private $sourceUser;
64
-
65
-	/** @var string */
66
-	private $destinationUser;
67
-
68
-	/** @var string */
69
-	private $finalTarget;
70
-
71
-	public function __construct(IUserManager $userManager, IManager $shareManager, IMountManager $mountManager) {
72
-		$this->userManager = $userManager;
73
-		$this->shareManager = $shareManager;
74
-		$this->mountManager = $mountManager;
75
-		parent::__construct();
76
-	}
77
-
78
-	protected function configure() {
79
-		$this
80
-			->setName('files:transfer-ownership')
81
-			->setDescription('All files and folders are moved to another user - shares are moved as well.')
82
-			->addArgument(
83
-				'source-user',
84
-				InputArgument::REQUIRED,
85
-				'owner of files which shall be moved'
86
-			)
87
-			->addArgument(
88
-				'destination-user',
89
-				InputArgument::REQUIRED,
90
-				'user who will be the new owner of the files'
91
-			);
92
-	}
93
-
94
-	protected function execute(InputInterface $input, OutputInterface $output) {
95
-		$sourceUserObject = $this->userManager->get($input->getArgument('source-user'));
96
-		$destinationUserObject = $this->userManager->get($input->getArgument('destination-user'));
97
-
98
-		if (!$sourceUserObject instanceof IUser) {
99
-			$output->writeln("<error>Unknown source user $this->sourceUser</error>");
100
-			return 1;
101
-		}
102
-
103
-		if (!$destinationUserObject instanceof IUser) {
104
-			$output->writeln("<error>Unknown destination user $this->destinationUser</error>");
105
-			return 1;
106
-		}
107
-
108
-		$this->sourceUser = $sourceUserObject->getUID();
109
-		$this->destinationUser = $destinationUserObject->getUID();
110
-
111
-		// target user has to be ready
112
-		if (!\OC::$server->getEncryptionManager()->isReadyForUser($this->destinationUser)) {
113
-			$output->writeln("<error>The target user is not ready to accept files. The user has at least to be logged in once.</error>");
114
-			return 2;
115
-		}
116
-
117
-		$date = date('c');
118
-		$this->finalTarget = "$this->destinationUser/files/transferred from $this->sourceUser on $date";
119
-
120
-		// setup filesystem
121
-		Filesystem::initMountPoints($this->sourceUser);
122
-		Filesystem::initMountPoints($this->destinationUser);
123
-
124
-		// analyse source folder
125
-		$this->analyse($output);
126
-
127
-		// collect all the shares
128
-		$this->collectUsersShares($output);
129
-
130
-		// transfer the files
131
-		$this->transfer($output);
132
-
133
-		// restore the shares
134
-		$this->restoreShares($output);
135
-	}
136
-
137
-	private function walkFiles(View $view, $path, \Closure $callBack) {
138
-		foreach ($view->getDirectoryContent($path) as $fileInfo) {
139
-			if (!$callBack($fileInfo)) {
140
-				return;
141
-			}
142
-			if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
143
-				$this->walkFiles($view, $fileInfo->getPath(), $callBack);
144
-			}
145
-		}
146
-	}
147
-
148
-	/**
149
-	 * @param OutputInterface $output
150
-	 * @throws \Exception
151
-	 */
152
-	protected function analyse(OutputInterface $output) {
153
-		$view = new View();
154
-		$output->writeln("Analysing files of $this->sourceUser ...");
155
-		$progress = new ProgressBar($output);
156
-		$progress->start();
157
-		$self = $this;
158
-		$this->walkFiles($view, "$this->sourceUser/files",
159
-				function (FileInfo $fileInfo) use ($progress, $self) {
160
-					if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
161
-						// only analyze into folders from main storage,
162
-						if (!$fileInfo->getStorage()->instanceOfStorage(IHomeStorage::class)) {
163
-							return false;
164
-						}
165
-						return true;
166
-					}
167
-					$progress->advance();
168
-					$this->allFiles[] = $fileInfo;
169
-					if ($fileInfo->isEncrypted()) {
170
-						$this->encryptedFiles[] = $fileInfo;
171
-					}
172
-					return true;
173
-				});
174
-		$progress->finish();
175
-		$output->writeln('');
176
-
177
-		// no file is allowed to be encrypted
178
-		if (!empty($this->encryptedFiles)) {
179
-			$output->writeln("<error>Some files are encrypted - please decrypt them first</error>");
180
-			foreach($this->encryptedFiles as $encryptedFile) {
181
-				/** @var FileInfo $encryptedFile */
182
-				$output->writeln("  " . $encryptedFile->getPath());
183
-			}
184
-			throw new \Exception('Execution terminated.');
185
-		}
186
-
187
-	}
188
-
189
-	/**
190
-	 * @param OutputInterface $output
191
-	 */
192
-	private function collectUsersShares(OutputInterface $output) {
193
-		$output->writeln("Collecting all share information for files and folder of $this->sourceUser ...");
194
-
195
-		$progress = new ProgressBar($output, count($this->shares));
196
-		foreach([\OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE] as $shareType) {
197
-		$offset = 0;
198
-			while (true) {
199
-				$sharePage = $this->shareManager->getSharesBy($this->sourceUser, $shareType, null, true, 50, $offset);
200
-				$progress->advance(count($sharePage));
201
-				if (empty($sharePage)) {
202
-					break;
203
-				}
204
-				$this->shares = array_merge($this->shares, $sharePage);
205
-				$offset += 50;
206
-			}
207
-		}
208
-
209
-		$progress->finish();
210
-		$output->writeln('');
211
-	}
212
-
213
-	/**
214
-	 * @param OutputInterface $output
215
-	 */
216
-	protected function transfer(OutputInterface $output) {
217
-		$view = new View();
218
-		$output->writeln("Transferring files to $this->finalTarget ...");
219
-		$view->rename("$this->sourceUser/files", $this->finalTarget);
220
-		// because the files folder is moved away we need to recreate it
221
-		$view->mkdir("$this->sourceUser/files");
222
-	}
223
-
224
-	/**
225
-	 * @param OutputInterface $output
226
-	 */
227
-	private function restoreShares(OutputInterface $output) {
228
-		$output->writeln("Restoring shares ...");
229
-		$progress = new ProgressBar($output, count($this->shares));
230
-
231
-		foreach($this->shares as $share) {
232
-			try {
233
-				if ($share->getSharedWith() === $this->destinationUser) {
234
-					// Unmount the shares before deleting, so we don't try to get the storage later on.
235
-					$shareMountPoint = $this->mountManager->find('/' . $this->destinationUser . '/files' . $share->getTarget());
236
-					if ($shareMountPoint) {
237
-						$this->mountManager->removeMount($shareMountPoint->getMountPoint());
238
-					}
239
-					$this->shareManager->deleteShare($share);
240
-				} else {
241
-					if ($share->getShareOwner() === $this->sourceUser) {
242
-						$share->setShareOwner($this->destinationUser);
243
-					}
244
-					if ($share->getSharedBy() === $this->sourceUser) {
245
-						$share->setSharedBy($this->destinationUser);
246
-					}
247
-
248
-					$this->shareManager->updateShare($share);
249
-				}
250
-			} catch (\OCP\Files\NotFoundException $e) {
251
-				$output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>');
252
-			} catch (\Exception $e) {
253
-				$output->writeln('<error>Could not restore share with id ' . $share->getId() . ':' . $e->getTraceAsString() . '</error>');
254
-			}
255
-			$progress->advance();
256
-		}
257
-		$progress->finish();
258
-		$output->writeln('');
259
-	}
44
+    /** @var IUserManager $userManager */
45
+    private $userManager;
46
+
47
+    /** @var IManager */
48
+    private $shareManager;
49
+
50
+    /** @var IMountManager */
51
+    private $mountManager;
52
+
53
+    /** @var FileInfo[] */
54
+    private $allFiles = [];
55
+
56
+    /** @var FileInfo[] */
57
+    private $encryptedFiles = [];
58
+
59
+    /** @var IShare[] */
60
+    private $shares = [];
61
+
62
+    /** @var string */
63
+    private $sourceUser;
64
+
65
+    /** @var string */
66
+    private $destinationUser;
67
+
68
+    /** @var string */
69
+    private $finalTarget;
70
+
71
+    public function __construct(IUserManager $userManager, IManager $shareManager, IMountManager $mountManager) {
72
+        $this->userManager = $userManager;
73
+        $this->shareManager = $shareManager;
74
+        $this->mountManager = $mountManager;
75
+        parent::__construct();
76
+    }
77
+
78
+    protected function configure() {
79
+        $this
80
+            ->setName('files:transfer-ownership')
81
+            ->setDescription('All files and folders are moved to another user - shares are moved as well.')
82
+            ->addArgument(
83
+                'source-user',
84
+                InputArgument::REQUIRED,
85
+                'owner of files which shall be moved'
86
+            )
87
+            ->addArgument(
88
+                'destination-user',
89
+                InputArgument::REQUIRED,
90
+                'user who will be the new owner of the files'
91
+            );
92
+    }
93
+
94
+    protected function execute(InputInterface $input, OutputInterface $output) {
95
+        $sourceUserObject = $this->userManager->get($input->getArgument('source-user'));
96
+        $destinationUserObject = $this->userManager->get($input->getArgument('destination-user'));
97
+
98
+        if (!$sourceUserObject instanceof IUser) {
99
+            $output->writeln("<error>Unknown source user $this->sourceUser</error>");
100
+            return 1;
101
+        }
102
+
103
+        if (!$destinationUserObject instanceof IUser) {
104
+            $output->writeln("<error>Unknown destination user $this->destinationUser</error>");
105
+            return 1;
106
+        }
107
+
108
+        $this->sourceUser = $sourceUserObject->getUID();
109
+        $this->destinationUser = $destinationUserObject->getUID();
110
+
111
+        // target user has to be ready
112
+        if (!\OC::$server->getEncryptionManager()->isReadyForUser($this->destinationUser)) {
113
+            $output->writeln("<error>The target user is not ready to accept files. The user has at least to be logged in once.</error>");
114
+            return 2;
115
+        }
116
+
117
+        $date = date('c');
118
+        $this->finalTarget = "$this->destinationUser/files/transferred from $this->sourceUser on $date";
119
+
120
+        // setup filesystem
121
+        Filesystem::initMountPoints($this->sourceUser);
122
+        Filesystem::initMountPoints($this->destinationUser);
123
+
124
+        // analyse source folder
125
+        $this->analyse($output);
126
+
127
+        // collect all the shares
128
+        $this->collectUsersShares($output);
129
+
130
+        // transfer the files
131
+        $this->transfer($output);
132
+
133
+        // restore the shares
134
+        $this->restoreShares($output);
135
+    }
136
+
137
+    private function walkFiles(View $view, $path, \Closure $callBack) {
138
+        foreach ($view->getDirectoryContent($path) as $fileInfo) {
139
+            if (!$callBack($fileInfo)) {
140
+                return;
141
+            }
142
+            if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
143
+                $this->walkFiles($view, $fileInfo->getPath(), $callBack);
144
+            }
145
+        }
146
+    }
147
+
148
+    /**
149
+     * @param OutputInterface $output
150
+     * @throws \Exception
151
+     */
152
+    protected function analyse(OutputInterface $output) {
153
+        $view = new View();
154
+        $output->writeln("Analysing files of $this->sourceUser ...");
155
+        $progress = new ProgressBar($output);
156
+        $progress->start();
157
+        $self = $this;
158
+        $this->walkFiles($view, "$this->sourceUser/files",
159
+                function (FileInfo $fileInfo) use ($progress, $self) {
160
+                    if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
161
+                        // only analyze into folders from main storage,
162
+                        if (!$fileInfo->getStorage()->instanceOfStorage(IHomeStorage::class)) {
163
+                            return false;
164
+                        }
165
+                        return true;
166
+                    }
167
+                    $progress->advance();
168
+                    $this->allFiles[] = $fileInfo;
169
+                    if ($fileInfo->isEncrypted()) {
170
+                        $this->encryptedFiles[] = $fileInfo;
171
+                    }
172
+                    return true;
173
+                });
174
+        $progress->finish();
175
+        $output->writeln('');
176
+
177
+        // no file is allowed to be encrypted
178
+        if (!empty($this->encryptedFiles)) {
179
+            $output->writeln("<error>Some files are encrypted - please decrypt them first</error>");
180
+            foreach($this->encryptedFiles as $encryptedFile) {
181
+                /** @var FileInfo $encryptedFile */
182
+                $output->writeln("  " . $encryptedFile->getPath());
183
+            }
184
+            throw new \Exception('Execution terminated.');
185
+        }
186
+
187
+    }
188
+
189
+    /**
190
+     * @param OutputInterface $output
191
+     */
192
+    private function collectUsersShares(OutputInterface $output) {
193
+        $output->writeln("Collecting all share information for files and folder of $this->sourceUser ...");
194
+
195
+        $progress = new ProgressBar($output, count($this->shares));
196
+        foreach([\OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE] as $shareType) {
197
+        $offset = 0;
198
+            while (true) {
199
+                $sharePage = $this->shareManager->getSharesBy($this->sourceUser, $shareType, null, true, 50, $offset);
200
+                $progress->advance(count($sharePage));
201
+                if (empty($sharePage)) {
202
+                    break;
203
+                }
204
+                $this->shares = array_merge($this->shares, $sharePage);
205
+                $offset += 50;
206
+            }
207
+        }
208
+
209
+        $progress->finish();
210
+        $output->writeln('');
211
+    }
212
+
213
+    /**
214
+     * @param OutputInterface $output
215
+     */
216
+    protected function transfer(OutputInterface $output) {
217
+        $view = new View();
218
+        $output->writeln("Transferring files to $this->finalTarget ...");
219
+        $view->rename("$this->sourceUser/files", $this->finalTarget);
220
+        // because the files folder is moved away we need to recreate it
221
+        $view->mkdir("$this->sourceUser/files");
222
+    }
223
+
224
+    /**
225
+     * @param OutputInterface $output
226
+     */
227
+    private function restoreShares(OutputInterface $output) {
228
+        $output->writeln("Restoring shares ...");
229
+        $progress = new ProgressBar($output, count($this->shares));
230
+
231
+        foreach($this->shares as $share) {
232
+            try {
233
+                if ($share->getSharedWith() === $this->destinationUser) {
234
+                    // Unmount the shares before deleting, so we don't try to get the storage later on.
235
+                    $shareMountPoint = $this->mountManager->find('/' . $this->destinationUser . '/files' . $share->getTarget());
236
+                    if ($shareMountPoint) {
237
+                        $this->mountManager->removeMount($shareMountPoint->getMountPoint());
238
+                    }
239
+                    $this->shareManager->deleteShare($share);
240
+                } else {
241
+                    if ($share->getShareOwner() === $this->sourceUser) {
242
+                        $share->setShareOwner($this->destinationUser);
243
+                    }
244
+                    if ($share->getSharedBy() === $this->sourceUser) {
245
+                        $share->setSharedBy($this->destinationUser);
246
+                    }
247
+
248
+                    $this->shareManager->updateShare($share);
249
+                }
250
+            } catch (\OCP\Files\NotFoundException $e) {
251
+                $output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>');
252
+            } catch (\Exception $e) {
253
+                $output->writeln('<error>Could not restore share with id ' . $share->getId() . ':' . $e->getTraceAsString() . '</error>');
254
+            }
255
+            $progress->advance();
256
+        }
257
+        $progress->finish();
258
+        $output->writeln('');
259
+    }
260 260
 }
Please login to merge, or discard this patch.
apps/files/lib/Command/Scan.php 1 patch
Indentation   +276 added lines, -276 removed lines patch added patch discarded remove patch
@@ -42,305 +42,305 @@
 block discarded – undo
42 42
 
43 43
 class Scan extends Base {
44 44
 
45
-	/** @var IUserManager $userManager */
46
-	private $userManager;
47
-	/** @var float */
48
-	protected $execTime = 0;
49
-	/** @var int */
50
-	protected $foldersCounter = 0;
51
-	/** @var int */
52
-	protected $filesCounter = 0;
45
+    /** @var IUserManager $userManager */
46
+    private $userManager;
47
+    /** @var float */
48
+    protected $execTime = 0;
49
+    /** @var int */
50
+    protected $foldersCounter = 0;
51
+    /** @var int */
52
+    protected $filesCounter = 0;
53 53
 
54
-	public function __construct(IUserManager $userManager) {
55
-		$this->userManager = $userManager;
56
-		parent::__construct();
57
-	}
54
+    public function __construct(IUserManager $userManager) {
55
+        $this->userManager = $userManager;
56
+        parent::__construct();
57
+    }
58 58
 
59
-	protected function configure() {
60
-		parent::configure();
59
+    protected function configure() {
60
+        parent::configure();
61 61
 
62
-		$this
63
-			->setName('files:scan')
64
-			->setDescription('rescan filesystem')
65
-			->addArgument(
66
-				'user_id',
67
-				InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
68
-				'will rescan all files of the given user(s)'
69
-			)
70
-			->addOption(
71
-				'path',
72
-				'p',
73
-				InputArgument::OPTIONAL,
74
-				'limit rescan to this path, eg. --path="/alice/files/Music", the user_id is determined by the path and the user_id parameter and --all are ignored'
75
-			)
76
-			->addOption(
77
-				'quiet',
78
-				'q',
79
-				InputOption::VALUE_NONE,
80
-				'suppress any output'
81
-			)
82
-			->addOption(
83
-				'verbose',
84
-				'-v|vv|vvv',
85
-				InputOption::VALUE_NONE,
86
-				'verbose the output'
87
-			)
88
-			->addOption(
89
-				'all',
90
-				null,
91
-				InputOption::VALUE_NONE,
92
-				'will rescan all files of all known users'
93
-			)->addOption(
94
-				'unscanned',
95
-				null,
96
-				InputOption::VALUE_NONE,
97
-				'only scan files which are marked as not fully scanned'
98
-			);
99
-	}
62
+        $this
63
+            ->setName('files:scan')
64
+            ->setDescription('rescan filesystem')
65
+            ->addArgument(
66
+                'user_id',
67
+                InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
68
+                'will rescan all files of the given user(s)'
69
+            )
70
+            ->addOption(
71
+                'path',
72
+                'p',
73
+                InputArgument::OPTIONAL,
74
+                'limit rescan to this path, eg. --path="/alice/files/Music", the user_id is determined by the path and the user_id parameter and --all are ignored'
75
+            )
76
+            ->addOption(
77
+                'quiet',
78
+                'q',
79
+                InputOption::VALUE_NONE,
80
+                'suppress any output'
81
+            )
82
+            ->addOption(
83
+                'verbose',
84
+                '-v|vv|vvv',
85
+                InputOption::VALUE_NONE,
86
+                'verbose the output'
87
+            )
88
+            ->addOption(
89
+                'all',
90
+                null,
91
+                InputOption::VALUE_NONE,
92
+                'will rescan all files of all known users'
93
+            )->addOption(
94
+                'unscanned',
95
+                null,
96
+                InputOption::VALUE_NONE,
97
+                'only scan files which are marked as not fully scanned'
98
+            );
99
+    }
100 100
 
101
-	public function checkScanWarning($fullPath, OutputInterface $output) {
102
-		$normalizedPath = basename(\OC\Files\Filesystem::normalizePath($fullPath));
103
-		$path = basename($fullPath);
101
+    public function checkScanWarning($fullPath, OutputInterface $output) {
102
+        $normalizedPath = basename(\OC\Files\Filesystem::normalizePath($fullPath));
103
+        $path = basename($fullPath);
104 104
 
105
-		if ($normalizedPath !== $path) {
106
-			$output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>');
107
-		}
108
-	}
105
+        if ($normalizedPath !== $path) {
106
+            $output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>');
107
+        }
108
+    }
109 109
 
110
-	protected function scanFiles($user, $path, $verbose, OutputInterface $output, $backgroundScan = false) {
111
-		$connection = $this->reconnectToDatabase($output);
112
-		$scanner = new \OC\Files\Utils\Scanner($user, $connection, \OC::$server->getLogger());
113
-		# check on each file/folder if there was a user interrupt (ctrl-c) and throw an exception
114
-		# printout and count
115
-		if ($verbose) {
116
-			$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
117
-				$output->writeln("\tFile   <info>$path</info>");
118
-				$this->filesCounter += 1;
119
-				if ($this->hasBeenInterrupted()) {
120
-					throw new \Exception('ctrl-c');
121
-				}
122
-			});
123
-			$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
124
-				$output->writeln("\tFolder <info>$path</info>");
125
-				$this->foldersCounter += 1;
126
-				if ($this->hasBeenInterrupted()) {
127
-					throw new \Exception('ctrl-c');
128
-				}
129
-			});
130
-			$scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) {
131
-				$output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")");
132
-			});
133
-		# count only
134
-		} else {
135
-			$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function () use ($output) {
136
-				$this->filesCounter += 1;
137
-				if ($this->hasBeenInterrupted()) {
138
-					throw new \Exception('ctrl-c');
139
-				}
140
-			});
141
-			$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function () use ($output) {
142
-				$this->foldersCounter += 1;
143
-				if ($this->hasBeenInterrupted()) {
144
-					throw new \Exception('ctrl-c');
145
-				}
146
-			});
147
-		}
148
-		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) use ($output) {
149
-			$this->checkScanWarning($path, $output);
150
-		});
151
-		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) use ($output) {
152
-			$this->checkScanWarning($path, $output);
153
-		});
110
+    protected function scanFiles($user, $path, $verbose, OutputInterface $output, $backgroundScan = false) {
111
+        $connection = $this->reconnectToDatabase($output);
112
+        $scanner = new \OC\Files\Utils\Scanner($user, $connection, \OC::$server->getLogger());
113
+        # check on each file/folder if there was a user interrupt (ctrl-c) and throw an exception
114
+        # printout and count
115
+        if ($verbose) {
116
+            $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
117
+                $output->writeln("\tFile   <info>$path</info>");
118
+                $this->filesCounter += 1;
119
+                if ($this->hasBeenInterrupted()) {
120
+                    throw new \Exception('ctrl-c');
121
+                }
122
+            });
123
+            $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
124
+                $output->writeln("\tFolder <info>$path</info>");
125
+                $this->foldersCounter += 1;
126
+                if ($this->hasBeenInterrupted()) {
127
+                    throw new \Exception('ctrl-c');
128
+                }
129
+            });
130
+            $scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) {
131
+                $output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")");
132
+            });
133
+        # count only
134
+        } else {
135
+            $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function () use ($output) {
136
+                $this->filesCounter += 1;
137
+                if ($this->hasBeenInterrupted()) {
138
+                    throw new \Exception('ctrl-c');
139
+                }
140
+            });
141
+            $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function () use ($output) {
142
+                $this->foldersCounter += 1;
143
+                if ($this->hasBeenInterrupted()) {
144
+                    throw new \Exception('ctrl-c');
145
+                }
146
+            });
147
+        }
148
+        $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) use ($output) {
149
+            $this->checkScanWarning($path, $output);
150
+        });
151
+        $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) use ($output) {
152
+            $this->checkScanWarning($path, $output);
153
+        });
154 154
 
155
-		try {
156
-			if ($backgroundScan) {
157
-				$scanner->backgroundScan($path);
158
-			}else {
159
-				$scanner->scan($path);
160
-			}
161
-		} catch (ForbiddenException $e) {
162
-			$output->writeln("<error>Home storage for user $user not writable</error>");
163
-			$output->writeln("Make sure you're running the scan command only as the user the web server runs as");
164
-		} catch (\Exception $e) {
165
-			if ($e->getMessage() !== 'ctrl-c') {
166
-				$output->writeln('<error>Exception while scanning: ' . $e->getMessage() . "\n" . $e->getTraceAsString() . '</error>');
167
-			}
168
-			return;
169
-		}
170
-	}
155
+        try {
156
+            if ($backgroundScan) {
157
+                $scanner->backgroundScan($path);
158
+            }else {
159
+                $scanner->scan($path);
160
+            }
161
+        } catch (ForbiddenException $e) {
162
+            $output->writeln("<error>Home storage for user $user not writable</error>");
163
+            $output->writeln("Make sure you're running the scan command only as the user the web server runs as");
164
+        } catch (\Exception $e) {
165
+            if ($e->getMessage() !== 'ctrl-c') {
166
+                $output->writeln('<error>Exception while scanning: ' . $e->getMessage() . "\n" . $e->getTraceAsString() . '</error>');
167
+            }
168
+            return;
169
+        }
170
+    }
171 171
 
172 172
 
173
-	protected function execute(InputInterface $input, OutputInterface $output) {
174
-		$inputPath = $input->getOption('path');
175
-		if ($inputPath) {
176
-			$inputPath = '/' . trim($inputPath, '/');
177
-			list (, $user,) = explode('/', $inputPath, 3);
178
-			$users = array($user);
179
-		} else if ($input->getOption('all')) {
180
-			$users = $this->userManager->search('');
181
-		} else {
182
-			$users = $input->getArgument('user_id');
183
-		}
173
+    protected function execute(InputInterface $input, OutputInterface $output) {
174
+        $inputPath = $input->getOption('path');
175
+        if ($inputPath) {
176
+            $inputPath = '/' . trim($inputPath, '/');
177
+            list (, $user,) = explode('/', $inputPath, 3);
178
+            $users = array($user);
179
+        } else if ($input->getOption('all')) {
180
+            $users = $this->userManager->search('');
181
+        } else {
182
+            $users = $input->getArgument('user_id');
183
+        }
184 184
 
185
-		# no messaging level option means: no full printout but statistics
186
-		# $quiet   means no print at all
187
-		# $verbose means full printout including statistics
188
-		# -q	-v	full	stat
189
-		#  0	 0	no	yes
190
-		#  0	 1	yes	yes
191
-		#  1	--	no	no  (quiet overrules verbose)
192
-		$verbose = $input->getOption('verbose');
193
-		$quiet = $input->getOption('quiet');
194
-		# restrict the verbosity level to VERBOSITY_VERBOSE
195
-		if ($output->getVerbosity()>OutputInterface::VERBOSITY_VERBOSE) {
196
-			$output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE);
197
-		}
198
-		if ($quiet) {
199
-			$verbose = false;
200
-		}
185
+        # no messaging level option means: no full printout but statistics
186
+        # $quiet   means no print at all
187
+        # $verbose means full printout including statistics
188
+        # -q	-v	full	stat
189
+        #  0	 0	no	yes
190
+        #  0	 1	yes	yes
191
+        #  1	--	no	no  (quiet overrules verbose)
192
+        $verbose = $input->getOption('verbose');
193
+        $quiet = $input->getOption('quiet');
194
+        # restrict the verbosity level to VERBOSITY_VERBOSE
195
+        if ($output->getVerbosity()>OutputInterface::VERBOSITY_VERBOSE) {
196
+            $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE);
197
+        }
198
+        if ($quiet) {
199
+            $verbose = false;
200
+        }
201 201
 
202
-		# check quantity of users to be process and show it on the command line
203
-		$users_total = count($users);
204
-		if ($users_total === 0) {
205
-			$output->writeln("<error>Please specify the user id to scan, \"--all\" to scan for all users or \"--path=...\"</error>");
206
-			return;
207
-		} else {
208
-			if ($users_total > 1) {
209
-				$output->writeln("\nScanning files for $users_total users");
210
-			}
211
-		}
202
+        # check quantity of users to be process and show it on the command line
203
+        $users_total = count($users);
204
+        if ($users_total === 0) {
205
+            $output->writeln("<error>Please specify the user id to scan, \"--all\" to scan for all users or \"--path=...\"</error>");
206
+            return;
207
+        } else {
208
+            if ($users_total > 1) {
209
+                $output->writeln("\nScanning files for $users_total users");
210
+            }
211
+        }
212 212
 
213
-		$this->initTools();
213
+        $this->initTools();
214 214
 
215
-		$user_count = 0;
216
-		foreach ($users as $user) {
217
-			if (is_object($user)) {
218
-				$user = $user->getUID();
219
-			}
220
-			$path = $inputPath ? $inputPath : '/' . $user;
221
-			$user_count += 1;
222
-			if ($this->userManager->userExists($user)) {
223
-				# add an extra line when verbose is set to optical separate users
224
-				if ($verbose) {$output->writeln(""); }
225
-				$output->writeln("Starting scan for user $user_count out of $users_total ($user)");
226
-				# full: printout data if $verbose was set
227
-				$this->scanFiles($user, $path, $verbose, $output, $input->getOption('unscanned'));
228
-			} else {
229
-				$output->writeln("<error>Unknown user $user_count $user</error>");
230
-			}
231
-			# check on each user if there was a user interrupt (ctrl-c) and exit foreach
232
-			if ($this->hasBeenInterrupted()) {
233
-				break;
234
-			}
235
-		}
215
+        $user_count = 0;
216
+        foreach ($users as $user) {
217
+            if (is_object($user)) {
218
+                $user = $user->getUID();
219
+            }
220
+            $path = $inputPath ? $inputPath : '/' . $user;
221
+            $user_count += 1;
222
+            if ($this->userManager->userExists($user)) {
223
+                # add an extra line when verbose is set to optical separate users
224
+                if ($verbose) {$output->writeln(""); }
225
+                $output->writeln("Starting scan for user $user_count out of $users_total ($user)");
226
+                # full: printout data if $verbose was set
227
+                $this->scanFiles($user, $path, $verbose, $output, $input->getOption('unscanned'));
228
+            } else {
229
+                $output->writeln("<error>Unknown user $user_count $user</error>");
230
+            }
231
+            # check on each user if there was a user interrupt (ctrl-c) and exit foreach
232
+            if ($this->hasBeenInterrupted()) {
233
+                break;
234
+            }
235
+        }
236 236
 
237
-		# stat: printout statistics if $quiet was not set
238
-		if (!$quiet) {
239
-			$this->presentStats($output);
240
-		}
241
-	}
237
+        # stat: printout statistics if $quiet was not set
238
+        if (!$quiet) {
239
+            $this->presentStats($output);
240
+        }
241
+    }
242 242
 
243
-	/**
244
-	 * Initialises some useful tools for the Command
245
-	 */
246
-	protected function initTools() {
247
-		// Start the timer
248
-		$this->execTime = -microtime(true);
249
-		// Convert PHP errors to exceptions
250
-		set_error_handler([$this, 'exceptionErrorHandler'], E_ALL);
251
-	}
243
+    /**
244
+     * Initialises some useful tools for the Command
245
+     */
246
+    protected function initTools() {
247
+        // Start the timer
248
+        $this->execTime = -microtime(true);
249
+        // Convert PHP errors to exceptions
250
+        set_error_handler([$this, 'exceptionErrorHandler'], E_ALL);
251
+    }
252 252
 
253
-	/**
254
-	 * Processes PHP errors as exceptions in order to be able to keep track of problems
255
-	 *
256
-	 * @see https://secure.php.net/manual/en/function.set-error-handler.php
257
-	 *
258
-	 * @param int $severity the level of the error raised
259
-	 * @param string $message
260
-	 * @param string $file the filename that the error was raised in
261
-	 * @param int $line the line number the error was raised
262
-	 *
263
-	 * @throws \ErrorException
264
-	 */
265
-	public function exceptionErrorHandler($severity, $message, $file, $line) {
266
-		if (!(error_reporting() & $severity)) {
267
-			// This error code is not included in error_reporting
268
-			return;
269
-		}
270
-		throw new \ErrorException($message, 0, $severity, $file, $line);
271
-	}
253
+    /**
254
+     * Processes PHP errors as exceptions in order to be able to keep track of problems
255
+     *
256
+     * @see https://secure.php.net/manual/en/function.set-error-handler.php
257
+     *
258
+     * @param int $severity the level of the error raised
259
+     * @param string $message
260
+     * @param string $file the filename that the error was raised in
261
+     * @param int $line the line number the error was raised
262
+     *
263
+     * @throws \ErrorException
264
+     */
265
+    public function exceptionErrorHandler($severity, $message, $file, $line) {
266
+        if (!(error_reporting() & $severity)) {
267
+            // This error code is not included in error_reporting
268
+            return;
269
+        }
270
+        throw new \ErrorException($message, 0, $severity, $file, $line);
271
+    }
272 272
 
273
-	/**
274
-	 * @param OutputInterface $output
275
-	 */
276
-	protected function presentStats(OutputInterface $output) {
277
-		// Stop the timer
278
-		$this->execTime += microtime(true);
279
-		$output->writeln("");
273
+    /**
274
+     * @param OutputInterface $output
275
+     */
276
+    protected function presentStats(OutputInterface $output) {
277
+        // Stop the timer
278
+        $this->execTime += microtime(true);
279
+        $output->writeln("");
280 280
 
281
-		$headers = [
282
-			'Folders', 'Files', 'Elapsed time'
283
-		];
281
+        $headers = [
282
+            'Folders', 'Files', 'Elapsed time'
283
+        ];
284 284
 
285
-		$this->showSummary($headers, null, $output);
286
-	}
285
+        $this->showSummary($headers, null, $output);
286
+    }
287 287
 
288
-	/**
289
-	 * Shows a summary of operations
290
-	 *
291
-	 * @param string[] $headers
292
-	 * @param string[] $rows
293
-	 * @param OutputInterface $output
294
-	 */
295
-	protected function showSummary($headers, $rows, OutputInterface $output) {
296
-		$niceDate = $this->formatExecTime();
297
-		if (!$rows) {
298
-			$rows = [
299
-				$this->foldersCounter,
300
-				$this->filesCounter,
301
-				$niceDate,
302
-			];
303
-		}
304
-		$table = new Table($output);
305
-		$table
306
-			->setHeaders($headers)
307
-			->setRows([$rows]);
308
-		$table->render();
309
-	}
288
+    /**
289
+     * Shows a summary of operations
290
+     *
291
+     * @param string[] $headers
292
+     * @param string[] $rows
293
+     * @param OutputInterface $output
294
+     */
295
+    protected function showSummary($headers, $rows, OutputInterface $output) {
296
+        $niceDate = $this->formatExecTime();
297
+        if (!$rows) {
298
+            $rows = [
299
+                $this->foldersCounter,
300
+                $this->filesCounter,
301
+                $niceDate,
302
+            ];
303
+        }
304
+        $table = new Table($output);
305
+        $table
306
+            ->setHeaders($headers)
307
+            ->setRows([$rows]);
308
+        $table->render();
309
+    }
310 310
 
311 311
 
312
-	/**
313
-	 * Formats microtime into a human readable format
314
-	 *
315
-	 * @return string
316
-	 */
317
-	protected function formatExecTime() {
318
-		list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime)));
312
+    /**
313
+     * Formats microtime into a human readable format
314
+     *
315
+     * @return string
316
+     */
317
+    protected function formatExecTime() {
318
+        list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime)));
319 319
 
320
-		# if you want to have microseconds add this:   . '.' . $tens;
321
-		return date('H:i:s', $secs);
322
-	}
320
+        # if you want to have microseconds add this:   . '.' . $tens;
321
+        return date('H:i:s', $secs);
322
+    }
323 323
 
324
-	/**
325
-	 * @return \OCP\IDBConnection
326
-	 */
327
-	protected function reconnectToDatabase(OutputInterface $output) {
328
-		/** @var Connection | IDBConnection $connection*/
329
-		$connection = \OC::$server->getDatabaseConnection();
330
-		try {
331
-			$connection->close();
332
-		} catch (\Exception $ex) {
333
-			$output->writeln("<info>Error while disconnecting from database: {$ex->getMessage()}</info>");
334
-		}
335
-		while (!$connection->isConnected()) {
336
-			try {
337
-				$connection->connect();
338
-			} catch (\Exception $ex) {
339
-				$output->writeln("<info>Error while re-connecting to database: {$ex->getMessage()}</info>");
340
-				sleep(60);
341
-			}
342
-		}
343
-		return $connection;
344
-	}
324
+    /**
325
+     * @return \OCP\IDBConnection
326
+     */
327
+    protected function reconnectToDatabase(OutputInterface $output) {
328
+        /** @var Connection | IDBConnection $connection*/
329
+        $connection = \OC::$server->getDatabaseConnection();
330
+        try {
331
+            $connection->close();
332
+        } catch (\Exception $ex) {
333
+            $output->writeln("<info>Error while disconnecting from database: {$ex->getMessage()}</info>");
334
+        }
335
+        while (!$connection->isConnected()) {
336
+            try {
337
+                $connection->connect();
338
+            } catch (\Exception $ex) {
339
+                $output->writeln("<info>Error while re-connecting to database: {$ex->getMessage()}</info>");
340
+                sleep(60);
341
+            }
342
+        }
343
+        return $connection;
344
+    }
345 345
 
346 346
 }
Please login to merge, or discard this patch.
apps/files/lib/Capabilities.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -34,29 +34,29 @@
 block discarded – undo
34 34
  * @package OCA\Files
35 35
  */
36 36
 class Capabilities implements ICapability {
37
-	/** @var IConfig */
38
-	protected $config;
37
+    /** @var IConfig */
38
+    protected $config;
39 39
 
40
-	/**
41
-	 * Capabilities constructor.
42
-	 *
43
-	 * @param IConfig $config
44
-	 */
45
-	public function __construct(IConfig $config) {
46
-		$this->config = $config;
47
-	}
40
+    /**
41
+     * Capabilities constructor.
42
+     *
43
+     * @param IConfig $config
44
+     */
45
+    public function __construct(IConfig $config) {
46
+        $this->config = $config;
47
+    }
48 48
 
49
-	/**
50
-	 * Return this classes capabilities
51
-	 *
52
-	 * @return array
53
-	 */
54
-	public function getCapabilities() {
55
-		return [
56
-			'files' => [
57
-				'bigfilechunking' => true,
58
-				'blacklisted_files' => $this->config->getSystemValue('blacklisted_files', ['.htaccess']),
59
-			],
60
-		];
61
-	}
49
+    /**
50
+     * Return this classes capabilities
51
+     *
52
+     * @return array
53
+     */
54
+    public function getCapabilities() {
55
+        return [
56
+            'files' => [
57
+                'bigfilechunking' => true,
58
+                'blacklisted_files' => $this->config->getSystemValue('blacklisted_files', ['.htaccess']),
59
+            ],
60
+        ];
61
+    }
62 62
 }
Please login to merge, or discard this patch.
apps/files/lib/BackgroundJob/CleanupFileLocks.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -30,29 +30,29 @@
 block discarded – undo
30 30
  */
31 31
 class CleanupFileLocks extends TimedJob {
32 32
 
33
-	/**
34
-	 * Default interval in minutes
35
-	 *
36
-	 * @var int $defaultIntervalMin
37
-	 **/
38
-	protected $defaultIntervalMin = 5;
33
+    /**
34
+     * Default interval in minutes
35
+     *
36
+     * @var int $defaultIntervalMin
37
+     **/
38
+    protected $defaultIntervalMin = 5;
39 39
 
40
-	/**
41
-	 * sets the correct interval for this timed job
42
-	 */
43
-	public function __construct() {
44
-		$this->interval = $this->defaultIntervalMin * 60;
45
-	}
40
+    /**
41
+     * sets the correct interval for this timed job
42
+     */
43
+    public function __construct() {
44
+        $this->interval = $this->defaultIntervalMin * 60;
45
+    }
46 46
 
47
-	/**
48
-	 * Makes the background job do its work
49
-	 *
50
-	 * @param array $argument unused argument
51
-	 */
52
-	public function run($argument) {
53
-		$lockingProvider = \OC::$server->getLockingProvider();
54
-		if($lockingProvider instanceof DBLockingProvider) {
55
-			$lockingProvider->cleanExpiredLocks();
56
-		}
57
-	}
47
+    /**
48
+     * Makes the background job do its work
49
+     *
50
+     * @param array $argument unused argument
51
+     */
52
+    public function run($argument) {
53
+        $lockingProvider = \OC::$server->getLockingProvider();
54
+        if($lockingProvider instanceof DBLockingProvider) {
55
+            $lockingProvider->cleanExpiredLocks();
56
+        }
57
+    }
58 58
 }
Please login to merge, or discard this patch.
apps/files/lib/BackgroundJob/DeleteOrphanedItems.php 1 patch
Indentation   +118 added lines, -118 removed lines patch added patch discarded remove patch
@@ -32,123 +32,123 @@
 block discarded – undo
32 32
  */
33 33
 class DeleteOrphanedItems extends TimedJob {
34 34
 
35
-	const CHUNK_SIZE = 200;
36
-
37
-	/** @var \OCP\IDBConnection */
38
-	protected $connection;
39
-
40
-	/** @var \OCP\ILogger */
41
-	protected $logger;
42
-
43
-	/**
44
-	 * Default interval in minutes
45
-	 *
46
-	 * @var int $defaultIntervalMin
47
-	 **/
48
-	protected $defaultIntervalMin = 60;
49
-
50
-	/**
51
-	 * sets the correct interval for this timed job
52
-	 */
53
-	public function __construct() {
54
-		$this->interval = $this->defaultIntervalMin * 60;
55
-		$this->connection = \OC::$server->getDatabaseConnection();
56
-		$this->logger = \OC::$server->getLogger();
57
-	}
58
-
59
-	/**
60
-	 * Makes the background job do its work
61
-	 *
62
-	 * @param array $argument unused argument
63
-	 */
64
-	public function run($argument) {
65
-		$this->cleanSystemTags();
66
-		$this->cleanUserTags();
67
-		$this->cleanComments();
68
-		$this->cleanCommentMarkers();
69
-	}
70
-
71
-	/**
72
-	 * Deleting orphaned system tag mappings
73
-	 *
74
-	 * @param string $table
75
-	 * @param string $idCol
76
-	 * @param string $typeCol
77
-	 * @return int Number of deleted entries
78
-	 */
79
-	protected function cleanUp($table, $idCol, $typeCol) {
80
-		$deletedEntries = 0;
81
-
82
-		$query = $this->connection->getQueryBuilder();
83
-		$query->select('t1.' . $idCol)
84
-			->from($table, 't1')
85
-			->where($query->expr()->eq($typeCol, $query->expr()->literal('files')))
86
-			->andWhere($query->expr()->isNull('t2.fileid'))
87
-			->leftJoin('t1', 'filecache', 't2', $query->expr()->eq($query->expr()->castColumn('t1.' . $idCol, IQueryBuilder::PARAM_INT), 't2.fileid'))
88
-			->groupBy('t1.' . $idCol)
89
-			->setMaxResults(self::CHUNK_SIZE);
90
-
91
-		$deleteQuery = $this->connection->getQueryBuilder();
92
-		$deleteQuery->delete($table)
93
-			->where($deleteQuery->expr()->eq($idCol, $deleteQuery->createParameter('objectid')));
94
-
95
-		$deletedInLastChunk = self::CHUNK_SIZE;
96
-		while ($deletedInLastChunk === self::CHUNK_SIZE) {
97
-			$result = $query->execute();
98
-			$deletedInLastChunk = 0;
99
-			while ($row = $result->fetch()) {
100
-				$deletedInLastChunk++;
101
-				$deletedEntries += $deleteQuery->setParameter('objectid', (int) $row[$idCol])
102
-					->execute();
103
-			}
104
-			$result->closeCursor();
105
-		}
106
-
107
-		return $deletedEntries;
108
-	}
109
-
110
-	/**
111
-	 * Deleting orphaned system tag mappings
112
-	 *
113
-	 * @return int Number of deleted entries
114
-	 */
115
-	protected function cleanSystemTags() {
116
-		$deletedEntries = $this->cleanUp('systemtag_object_mapping', 'objectid', 'objecttype');
117
-		$this->logger->debug("$deletedEntries orphaned system tag relations deleted", ['app' => 'DeleteOrphanedItems']);
118
-		return $deletedEntries;
119
-	}
120
-
121
-	/**
122
-	 * Deleting orphaned user tag mappings
123
-	 *
124
-	 * @return int Number of deleted entries
125
-	 */
126
-	protected function cleanUserTags() {
127
-		$deletedEntries = $this->cleanUp('vcategory_to_object', 'objid', 'type');
128
-		$this->logger->debug("$deletedEntries orphaned user tag relations deleted", ['app' => 'DeleteOrphanedItems']);
129
-		return $deletedEntries;
130
-	}
131
-
132
-	/**
133
-	 * Deleting orphaned comments
134
-	 *
135
-	 * @return int Number of deleted entries
136
-	 */
137
-	protected function cleanComments() {
138
-		$deletedEntries = $this->cleanUp('comments', 'object_id', 'object_type');
139
-		$this->logger->debug("$deletedEntries orphaned comments deleted", ['app' => 'DeleteOrphanedItems']);
140
-		return $deletedEntries;
141
-	}
142
-
143
-	/**
144
-	 * Deleting orphaned comment read markers
145
-	 *
146
-	 * @return int Number of deleted entries
147
-	 */
148
-	protected function cleanCommentMarkers() {
149
-		$deletedEntries = $this->cleanUp('comments_read_markers', 'object_id', 'object_type');
150
-		$this->logger->debug("$deletedEntries orphaned comment read marks deleted", ['app' => 'DeleteOrphanedItems']);
151
-		return $deletedEntries;
152
-	}
35
+    const CHUNK_SIZE = 200;
36
+
37
+    /** @var \OCP\IDBConnection */
38
+    protected $connection;
39
+
40
+    /** @var \OCP\ILogger */
41
+    protected $logger;
42
+
43
+    /**
44
+     * Default interval in minutes
45
+     *
46
+     * @var int $defaultIntervalMin
47
+     **/
48
+    protected $defaultIntervalMin = 60;
49
+
50
+    /**
51
+     * sets the correct interval for this timed job
52
+     */
53
+    public function __construct() {
54
+        $this->interval = $this->defaultIntervalMin * 60;
55
+        $this->connection = \OC::$server->getDatabaseConnection();
56
+        $this->logger = \OC::$server->getLogger();
57
+    }
58
+
59
+    /**
60
+     * Makes the background job do its work
61
+     *
62
+     * @param array $argument unused argument
63
+     */
64
+    public function run($argument) {
65
+        $this->cleanSystemTags();
66
+        $this->cleanUserTags();
67
+        $this->cleanComments();
68
+        $this->cleanCommentMarkers();
69
+    }
70
+
71
+    /**
72
+     * Deleting orphaned system tag mappings
73
+     *
74
+     * @param string $table
75
+     * @param string $idCol
76
+     * @param string $typeCol
77
+     * @return int Number of deleted entries
78
+     */
79
+    protected function cleanUp($table, $idCol, $typeCol) {
80
+        $deletedEntries = 0;
81
+
82
+        $query = $this->connection->getQueryBuilder();
83
+        $query->select('t1.' . $idCol)
84
+            ->from($table, 't1')
85
+            ->where($query->expr()->eq($typeCol, $query->expr()->literal('files')))
86
+            ->andWhere($query->expr()->isNull('t2.fileid'))
87
+            ->leftJoin('t1', 'filecache', 't2', $query->expr()->eq($query->expr()->castColumn('t1.' . $idCol, IQueryBuilder::PARAM_INT), 't2.fileid'))
88
+            ->groupBy('t1.' . $idCol)
89
+            ->setMaxResults(self::CHUNK_SIZE);
90
+
91
+        $deleteQuery = $this->connection->getQueryBuilder();
92
+        $deleteQuery->delete($table)
93
+            ->where($deleteQuery->expr()->eq($idCol, $deleteQuery->createParameter('objectid')));
94
+
95
+        $deletedInLastChunk = self::CHUNK_SIZE;
96
+        while ($deletedInLastChunk === self::CHUNK_SIZE) {
97
+            $result = $query->execute();
98
+            $deletedInLastChunk = 0;
99
+            while ($row = $result->fetch()) {
100
+                $deletedInLastChunk++;
101
+                $deletedEntries += $deleteQuery->setParameter('objectid', (int) $row[$idCol])
102
+                    ->execute();
103
+            }
104
+            $result->closeCursor();
105
+        }
106
+
107
+        return $deletedEntries;
108
+    }
109
+
110
+    /**
111
+     * Deleting orphaned system tag mappings
112
+     *
113
+     * @return int Number of deleted entries
114
+     */
115
+    protected function cleanSystemTags() {
116
+        $deletedEntries = $this->cleanUp('systemtag_object_mapping', 'objectid', 'objecttype');
117
+        $this->logger->debug("$deletedEntries orphaned system tag relations deleted", ['app' => 'DeleteOrphanedItems']);
118
+        return $deletedEntries;
119
+    }
120
+
121
+    /**
122
+     * Deleting orphaned user tag mappings
123
+     *
124
+     * @return int Number of deleted entries
125
+     */
126
+    protected function cleanUserTags() {
127
+        $deletedEntries = $this->cleanUp('vcategory_to_object', 'objid', 'type');
128
+        $this->logger->debug("$deletedEntries orphaned user tag relations deleted", ['app' => 'DeleteOrphanedItems']);
129
+        return $deletedEntries;
130
+    }
131
+
132
+    /**
133
+     * Deleting orphaned comments
134
+     *
135
+     * @return int Number of deleted entries
136
+     */
137
+    protected function cleanComments() {
138
+        $deletedEntries = $this->cleanUp('comments', 'object_id', 'object_type');
139
+        $this->logger->debug("$deletedEntries orphaned comments deleted", ['app' => 'DeleteOrphanedItems']);
140
+        return $deletedEntries;
141
+    }
142
+
143
+    /**
144
+     * Deleting orphaned comment read markers
145
+     *
146
+     * @return int Number of deleted entries
147
+     */
148
+    protected function cleanCommentMarkers() {
149
+        $deletedEntries = $this->cleanUp('comments_read_markers', 'object_id', 'object_type');
150
+        $this->logger->debug("$deletedEntries orphaned comment read marks deleted", ['app' => 'DeleteOrphanedItems']);
151
+        return $deletedEntries;
152
+    }
153 153
 
154 154
 }
Please login to merge, or discard this patch.
apps/files/lib/BackgroundJob/ScanFiles.php 1 patch
Indentation   +69 added lines, -69 removed lines patch added patch discarded remove patch
@@ -36,80 +36,80 @@
 block discarded – undo
36 36
  * @package OCA\Files\BackgroundJob
37 37
  */
38 38
 class ScanFiles extends \OC\BackgroundJob\TimedJob {
39
-	/** @var IConfig */
40
-	private $config;
41
-	/** @var IUserManager */
42
-	private $userManager;
43
-	/** @var IDBConnection */
44
-	private $dbConnection;
45
-	/** @var ILogger */
46
-	private $logger;
47
-	/** Amount of users that should get scanned per execution */
48
-	const USERS_PER_SESSION = 500;
39
+    /** @var IConfig */
40
+    private $config;
41
+    /** @var IUserManager */
42
+    private $userManager;
43
+    /** @var IDBConnection */
44
+    private $dbConnection;
45
+    /** @var ILogger */
46
+    private $logger;
47
+    /** Amount of users that should get scanned per execution */
48
+    const USERS_PER_SESSION = 500;
49 49
 
50
-	/**
51
-	 * @param IConfig|null $config
52
-	 * @param IUserManager|null $userManager
53
-	 * @param IDBConnection|null $dbConnection
54
-	 * @param ILogger|null $logger
55
-	 */
56
-	public function __construct(IConfig $config = null,
57
-								IUserManager $userManager = null,
58
-								IDBConnection $dbConnection = null,
59
-								ILogger $logger = null) {
60
-		// Run once per 10 minutes
61
-		$this->setInterval(60 * 10);
50
+    /**
51
+     * @param IConfig|null $config
52
+     * @param IUserManager|null $userManager
53
+     * @param IDBConnection|null $dbConnection
54
+     * @param ILogger|null $logger
55
+     */
56
+    public function __construct(IConfig $config = null,
57
+                                IUserManager $userManager = null,
58
+                                IDBConnection $dbConnection = null,
59
+                                ILogger $logger = null) {
60
+        // Run once per 10 minutes
61
+        $this->setInterval(60 * 10);
62 62
 
63
-		if (is_null($userManager) || is_null($config)) {
64
-			$this->fixDIForJobs();
65
-		} else {
66
-			$this->config = $config;
67
-			$this->userManager = $userManager;
68
-			$this->logger = $logger;
69
-		}
70
-	}
63
+        if (is_null($userManager) || is_null($config)) {
64
+            $this->fixDIForJobs();
65
+        } else {
66
+            $this->config = $config;
67
+            $this->userManager = $userManager;
68
+            $this->logger = $logger;
69
+        }
70
+    }
71 71
 
72
-	protected function fixDIForJobs() {
73
-		$this->config = \OC::$server->getConfig();
74
-		$this->userManager = \OC::$server->getUserManager();
75
-		$this->logger = \OC::$server->getLogger();
76
-	}
72
+    protected function fixDIForJobs() {
73
+        $this->config = \OC::$server->getConfig();
74
+        $this->userManager = \OC::$server->getUserManager();
75
+        $this->logger = \OC::$server->getLogger();
76
+    }
77 77
 
78
-	/**
79
-	 * @param IUser $user
80
-	 */
81
-	protected function runScanner(IUser $user) {
82
-		try {
83
-			$scanner = new Scanner(
84
-					$user->getUID(),
85
-					$this->dbConnection,
86
-					$this->logger
87
-			);
88
-			$scanner->backgroundScan('');
89
-		} catch (\Exception $e) {
90
-			$this->logger->logException($e, ['app' => 'files']);
91
-		}
92
-		\OC_Util::tearDownFS();
93
-	}
78
+    /**
79
+     * @param IUser $user
80
+     */
81
+    protected function runScanner(IUser $user) {
82
+        try {
83
+            $scanner = new Scanner(
84
+                    $user->getUID(),
85
+                    $this->dbConnection,
86
+                    $this->logger
87
+            );
88
+            $scanner->backgroundScan('');
89
+        } catch (\Exception $e) {
90
+            $this->logger->logException($e, ['app' => 'files']);
91
+        }
92
+        \OC_Util::tearDownFS();
93
+    }
94 94
 
95
-	/**
96
-	 * @param $argument
97
-	 * @throws \Exception
98
-	 */
99
-	protected function run($argument) {
100
-		$offset = $this->config->getAppValue('files', 'cronjob_scan_files', 0);
101
-		$users = $this->userManager->search('', self::USERS_PER_SESSION, $offset);
102
-		if (!count($users)) {
103
-			// No users found, reset offset and retry
104
-			$offset = 0;
105
-			$users = $this->userManager->search('', self::USERS_PER_SESSION);
106
-		}
95
+    /**
96
+     * @param $argument
97
+     * @throws \Exception
98
+     */
99
+    protected function run($argument) {
100
+        $offset = $this->config->getAppValue('files', 'cronjob_scan_files', 0);
101
+        $users = $this->userManager->search('', self::USERS_PER_SESSION, $offset);
102
+        if (!count($users)) {
103
+            // No users found, reset offset and retry
104
+            $offset = 0;
105
+            $users = $this->userManager->search('', self::USERS_PER_SESSION);
106
+        }
107 107
 
108
-		$offset += self::USERS_PER_SESSION;
109
-		$this->config->setAppValue('files', 'cronjob_scan_files', $offset);
108
+        $offset += self::USERS_PER_SESSION;
109
+        $this->config->setAppValue('files', 'cronjob_scan_files', $offset);
110 110
 
111
-		foreach ($users as $user) {
112
-			$this->runScanner($user);
113
-		}
114
-	}
111
+        foreach ($users as $user) {
112
+            $this->runScanner($user);
113
+        }
114
+    }
115 115
 }
Please login to merge, or discard this patch.