diff --git a/apps/files_trashbin/lib/Storage.php b/apps/files_trashbin/lib/Storage.php index b8f154ea05..e3fe648281 100644 --- a/apps/files_trashbin/lib/Storage.php +++ b/apps/files_trashbin/lib/Storage.php @@ -28,6 +28,8 @@ namespace OCA\Files_Trashbin; use OC\Files\Filesystem; use OC\Files\Storage\Wrapper\Wrapper; use OC\Files\View; +use OCP\Encryption\Exceptions\GenericEncryptionException; +use OCP\ILogger; use OCP\IUserManager; class Storage extends Wrapper { @@ -55,15 +57,21 @@ class Storage extends Wrapper { /** @var IUserManager */ private $userManager; + /** @var ILogger */ + private $logger; + /** * Storage constructor. * * @param array $parameters * @param IUserManager|null $userManager */ - public function __construct($parameters, IUserManager $userManager = null) { + public function __construct($parameters, + IUserManager $userManager = null, + ILogger $logger = null) { $this->mountPoint = $parameters['mountPoint']; $this->userManager = $userManager; + $this->logger = $logger; parent::__construct($parameters); } @@ -147,11 +155,20 @@ class Storage extends Wrapper { * @return bool true if the operation succeeded, false otherwise */ public function unlink($path) { - if (isset(self::$moveOutOfSharedFolder[$this->mountPoint . $path])) { - $result = $this->doDelete($path, 'unlink', true); - unset(self::$moveOutOfSharedFolder[$this->mountPoint . $path]); - } else { - $result = $this->doDelete($path, 'unlink'); + try { + if (isset(self::$moveOutOfSharedFolder[$this->mountPoint . $path])) { + $result = $this->doDelete($path, 'unlink', true); + unset(self::$moveOutOfSharedFolder[$this->mountPoint . $path]); + } else { + $result = $this->doDelete($path, 'unlink'); + } + } catch (GenericEncryptionException $e) { + // in case of a encryption exception we delete the file right away + $this->logger->info( + "Can't move file" . $path . + "to the trash bin, therefore it was deleted right away"); + + $result = $this->storage->unlink($path); } return $result; @@ -251,7 +268,8 @@ class Storage extends Wrapper { \OC\Files\Filesystem::addStorageWrapper('oc_trashbin', function ($mountPoint, $storage) { return new \OCA\Files_Trashbin\Storage( array('storage' => $storage, 'mountPoint' => $mountPoint), - \OC::$server->getUserManager() + \OC::$server->getUserManager(), + \OC::$server->getLogger() ); }, 1); } diff --git a/apps/files_trashbin/tests/StorageTest.php b/apps/files_trashbin/tests/StorageTest.php index 2aebe6414f..52d5f05614 100644 --- a/apps/files_trashbin/tests/StorageTest.php +++ b/apps/files_trashbin/tests/StorageTest.php @@ -31,6 +31,7 @@ namespace OCA\Files_Trashbin\Tests; use OC\Files\Storage\Temporary; use OC\Files\Filesystem; +use OCP\ILogger; /** * Class Storage @@ -528,9 +529,11 @@ class StorageTest extends \Test\TestCase { ->disableOriginalConstructor()->getMock(); $userManager->expects($this->any()) ->method('userExists')->willReturn($userExists); + $logger = $this->getMockBuilder(ILogger::class)->getMock(); $storage = new \OCA\Files_Trashbin\Storage( ['mountPoint' => $mountPoint, 'storage' => $tmpStorage], - $userManager + $userManager, + $logger ); $this->assertSame($expected,