aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_trashbin
diff options
context:
space:
mode:
authorBjörn Schießle <schiessle@owncloud.com>2013-07-26 11:45:38 +0200
committerBjörn Schießle <schiessle@owncloud.com>2013-07-26 11:45:38 +0200
commit0182a503a6876a37493c29055a21cc22e1164404 (patch)
treebdbad70cb1e4495ecee438be8836705df2c49291 /apps/files_trashbin
parenta00cff7c0543a8860b839a0bf345478e99bc6c18 (diff)
downloadnextcloud-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.php4
-rw-r--r--apps/files_trashbin/lib/trash.php37
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");
}
/**