From aa15fcf22f4c32026eca5ff8ae5e5df244f2c53e Mon Sep 17 00:00:00 2001
From: Michael Gapczynski <mtgap@owncloud.com>
Date: Thu, 10 Jan 2013 12:09:55 -0500
Subject: [PATCH] Scan mount points in root before adding a entry

---
 lib/files/view.php | 46 ++++++++++++++++++++++++++++------------------
 1 file changed, 28 insertions(+), 18 deletions(-)

diff --git a/lib/files/view.php b/lib/files/view.php
index 94c89603ae..703cda5123 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -767,27 +767,37 @@ class View {
 				$subStorage = Filesystem::getStorage($mountPoint);
 				if ($subStorage) {
 					$subCache = $subStorage->getCache('');
-					$rootEntry = $subCache->get('');
 
-					$relativePath = trim(substr($mountPoint, $dirLength), '/');
-					if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder
-						$entryName = substr($relativePath, 0, $pos);
-						foreach ($files as &$entry) {
-							if ($entry['name'] === $entryName) {
-								$entry['size'] += $rootEntry['size'];
+					if ($subCache->getStatus('') < Cache\Cache::COMPLETE) {
+						$subScanner = $subStorage->getScanner('');
+						$subScanner->scan('', Cache\Scanner::SCAN_SHALLOW);
+					} else {
+						$subWatcher = $subStorage->getWatcher('');
+						$subWatcher->checkUpdate('');
+					}
+
+					$rootEntry = $subCache->get('');
+					if ($rootEntry) {
+						$relativePath = trim(substr($mountPoint, $dirLength), '/');
+						if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder
+							$entryName = substr($relativePath, 0, $pos);
+							foreach ($files as &$entry) {
+								if ($entry['name'] === $entryName) {
+									$entry['size'] += $rootEntry['size'];
+								}
 							}
+						} else { //mountpoint in this folder, add an entry for it
+							$rootEntry['name'] = $relativePath;
+							$rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
+							$subPermissionsCache = $subStorage->getPermissionsCache('');
+							$permissions = $subPermissionsCache->get($rootEntry['fileid'], $user);
+							if ($permissions === -1) {
+								$permissions = $subStorage->getPermissions($rootEntry['path']);
+								$subPermissionsCache->set($rootEntry['fileid'], $user, $permissions);
+							}
+							$rootEntry['permissions'] = $permissions;
+							$files[] = $rootEntry;
 						}
-					} else { //mountpoint in this folder, add an entry for it
-						$rootEntry['name'] = $relativePath;
-						$rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
-						$subPermissionsCache = $subStorage->getPermissionsCache('');
-						$permissions = $subPermissionsCache->get($rootEntry['fileid'], $user);
-						if ($permissions === -1) {
-							$permissions = $subStorage->getPermissions($rootEntry['path']);
-							$subPermissionsCache->set($rootEntry['fileid'], $user, $permissions);
-						}
-						$rootEntry['permissions'] = $permissions;
-						$files[] = $rootEntry;
 					}
 				}
 			}
-- 
GitLab