From 9b001ed90397e18601096bd16e565b232e223c5f Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Mon, 23 Jun 2014 11:57:43 +0200
Subject: [PATCH] Setup the external share manager in a hook

To make sure the external shares are initialized in the right order and
make sure the session is correctly initialized before, the external
share manager is now set up in a filesystem setup hook.
---
 apps/files_sharing/appinfo/app.php          |  9 +--------
 apps/files_sharing/lib/external/manager.php | 12 +++++++++++-
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index a9f4ff5089..a4a0a57c67 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -14,15 +14,8 @@ OC::$CLASSPATH['OCA\Files\Share\Proxy'] = 'files_sharing/lib/proxy.php';
 
 \OCP\App::registerAdmin('files_sharing', 'settings-admin');
 
-$externalManager = new \OCA\Files_Sharing\External\Manager(
-	\OC::$server->getDatabaseConnection(),
-	\OC\Files\Filesystem::getMountManager(),
-	\OC\Files\Filesystem::getLoader(),
-	\OC::$server->getUserSession()
-);
-$externalManager->setup();
-
 OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
+OCP\Util::connectHook('OC_Filesystem', 'setup', '\OCA\Files_Sharing\External\Manager', 'setup');
 OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
 OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
 
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 70a0e98ebd..4441a72fb1 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -67,7 +67,7 @@ class Manager {
 		}
 	}
 
-	public function setup() {
+	private function setupMounts() {
 		// don't setup server-to-server shares if the file_external app is disabled
 		// FIXME no longer needed if we use the webdav implementation from  core
 		if (\OC_App::isEnabled('files_external') === false) {
@@ -88,6 +88,16 @@ class Manager {
 		}
 	}
 
+	public static function setup() {
+		$externalManager = new \OCA\Files_Sharing\External\Manager(
+			\OC::$server->getDatabaseConnection(),
+			\OC\Files\Filesystem::getMountManager(),
+			\OC\Files\Filesystem::getLoader(),
+			\OC::$server->getUserSession()
+		);
+		$externalManager->setupMounts();
+	}
+
 	protected function stripPath($path) {
 		$prefix = '/' . $this->userSession->getUser()->getUID() . '/files';
 		return rtrim(substr($path, strlen($prefix)), '/');
-- 
GitLab