diff options
author | Björn Schießle <schiessle@owncloud.com> | 2013-07-26 11:45:38 +0200 |
---|---|---|
committer | Björn Schießle <schiessle@owncloud.com> | 2013-07-26 11:45:38 +0200 |
commit | 0182a503a6876a37493c29055a21cc22e1164404 (patch) | |
tree | bdbad70cb1e4495ecee438be8836705df2c49291 /apps/files_trashbin | |
parent | a00cff7c0543a8860b839a0bf345478e99bc6c18 (diff) | |
download | nextcloud-server-0182a503a6876a37493c29055a21cc22e1164404.tar.gz nextcloud-server-0182a503a6876a37493c29055a21cc22e1164404.zip |
expire trash bin if trash bin exceeds max size after a new file was added to ownCloud
Diffstat (limited to 'apps/files_trashbin')
-rw-r--r-- | apps/files_trashbin/lib/hooks.php | 4 | ||||
-rw-r--r-- | apps/files_trashbin/lib/trash.php | 37 |
2 files changed, 34 insertions, 7 deletions
diff --git a/apps/files_trashbin/lib/hooks.php b/apps/files_trashbin/lib/hooks.php index f1df1d7ec77..b2c6bc1df50 100644 --- a/apps/files_trashbin/lib/hooks.php +++ b/apps/files_trashbin/lib/hooks.php @@ -56,4 +56,8 @@ class Hooks { Trashbin::deleteUser($uid); } } + + public static function post_write_hook($params) { + Trashbin::resizeTrash(\OCP\User::getUser()); + } } diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index cff97418fe4..b2bd562e37d 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -105,8 +105,8 @@ class Trashbin { \OCP\Util::emitHook('\OCA\Files_Trashbin\Trashbin', 'post_moveToTrash', array('filePath' => \OC\Files\Filesystem::normalizePath($file_path), 'trashPath' => \OC\Files\Filesystem::normalizePath($filename . '.d' . $timestamp))); - $trashbinSize += self::retainVersions($view, $file_path, $filename, $timestamp); - $trashbinSize += self::retainEncryptionKeys($view, $file_path, $filename, $timestamp); + $trashbinSize += self::retainVersions($file_path, $filename, $timestamp); + $trashbinSize += self::retainEncryptionKeys($file_path, $filename, $timestamp); } else { \OC_Log::write('files_trashbin', 'Couldn\'t move ' . $file_path . ' to the trash bin', \OC_log::ERROR); } @@ -119,14 +119,13 @@ class Trashbin { /** * Move file versions to trash so that they can be restored later * - * @param \OC\Files\View $view * @param $file_path path to original file * @param $filename of deleted file * @param $timestamp when the file was deleted * * @return size of stored versions */ - private static function retainVersions($view, $file_path, $filename, $timestamp) { + private static function retainVersions($file_path, $filename, $timestamp) { $size = 0; if (\OCP\App::isEnabled('files_versions')) { @@ -159,14 +158,13 @@ class Trashbin { /** * Move encryption keys to trash so that they can be restored later * - * @param \OC\Files\View $view * @param $file_path path to original file * @param $filename of deleted file * @param $timestamp when the file was deleted * * @return size of encryption keys */ - private static function retainEncryptionKeys($view, $file_path, $filename, $timestamp) { + private static function retainEncryptionKeys($file_path, $filename, $timestamp) { $size = 0; if (\OCP\App::isEnabled('files_encryption')) { @@ -671,8 +669,31 @@ class Trashbin { } /** + * @brief resize trash bin if necessary after a new file was added to ownCloud + * @param string $user user id + */ + public static function resizeTrash($user) { + + $size = self::getTrashbinSize($user); + + if ($size === false || $size < 0) { + $size = self::calculateSize(new \OC\Files\View('/' . $user . '/files_trashbin')); + } + + $freeSpace = self::calculateFreeSpace($size); + + if ($freeSpace < 0) { + $newSize = $size - self::expire($size); + if ($newSize !== $size) { + self::setTrashbinSize($user, $newSize); + } + } + } + + /** * clean up the trash bin * @param current size of the trash bin + * @return size of expired files */ private static function expire($trashbinSize) { @@ -839,7 +860,7 @@ class Trashbin { $result = $query->execute(array($user))->fetchAll(); if ($result) { - return $result[0]['size']; + return (int)$result[0]['size']; } return false; } @@ -867,6 +888,8 @@ class Trashbin { \OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Files_Trashbin\Hooks", "remove_hook"); //Listen to delete user signal \OCP\Util::connectHook('OC_User', 'pre_deleteUser', "OCA\Files_Trashbin\Hooks", "deleteUser_hook"); + //Listen to post write hook + \OCP\Util::connectHook('OC_Filesystem', 'post_write', "OCA\Files_Trashbin\Hooks", "post_write_hook"); } /** |