From d2652645425777c1a97f8421e51aad9bdcf39684 Mon Sep 17 00:00:00 2001
From: Florin Peter <github@florin-peter.de>
Date: Wed, 29 May 2013 19:11:39 +0200
Subject: [PATCH] fix for share folder on external storage

---
 apps/files_encryption/hooks/hooks.php | 15 ++++++++++++++-
 apps/files_encryption/lib/util.php    | 20 +++++++++++++++++++-
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 9af1f2c6459..4fc8fa75709 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -327,6 +327,13 @@ class Hooks {
 
 			// if a folder was shared, get a list of all (sub-)folders
 			if ($params['itemType'] === 'folder') {
+
+				// get the path including mount point only if not a shared folder
+				if(strncmp($path, '/Shared' , strlen('/Shared') !== 0)) {
+					// get path including the the storage mount point
+					$path = $util->getPathWithMountPoint($params['itemSource']);
+				}
+
 				$allFiles = $util->getAllFiles($path);
 			} else {
 				$allFiles = array($path);
@@ -402,7 +409,13 @@ class Hooks {
 
 			// if we unshare a folder we need a list of all (sub-)files
 			if ( $params['itemType'] === 'folder' ) {
-			
+
+				// get the path including mount point only if not a shared folder
+				if(strncmp($path, '/Shared' , strlen('/Shared') !== 0)) {
+					// get path including the the storage mount point
+					$path = $util->getPathWithMountPoint($params['itemSource']);
+				}
+
 				$allFiles = $util->getAllFiles( $path );
 				
 			} else {
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 0ff76e60580..64d7e9e5842 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -1199,7 +1199,7 @@ class Util {
 
 		$result = array();
 
-		$content = $this->view->getDirectoryContent($this->userFilesDir . $dir);
+		$content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath($this->userFilesDir . '/' . $dir));
 
 		// handling for re shared folders
 		$path_split = explode('/', $dir);
@@ -1531,4 +1531,22 @@ class Util {
 		$this->recoverAllFiles('/', $privateKey);
 	}
 
+	/**
+	 * Get the path including the storage mount point
+	 * @param int $id
+	 * @return string the path including the mount point like AmazonS3/folder/file.txt
+	 */
+	public function getPathWithMountPoint($id) {
+		list($storage, $internalPath) = \OC\Files\Cache\Cache::getById($id);
+		$mount = \OC\Files\Filesystem::getMountByStorageId($storage);
+		$mountPoint = $mount[0]->getMountPoint();
+		$path = \OC\Files\Filesystem::normalizePath($mountPoint.'/'.$internalPath);
+
+		// reformat the path to be relative e.g. /user/files/folder becomes /folder/
+		$pathSplit = explode( '/', $path );
+		$relativePath = implode( '/', array_slice( $pathSplit, 3 ) );
+
+		return $relativePath;
+	}
+
 }