|
|
|
|
@ -21,6 +21,9 @@ class Storage {
|
|
|
|
|
const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
|
|
|
|
|
const VERSIONS_ROOT = 'files_versions/';
|
|
|
|
|
|
|
|
|
|
// files for which we can remove the versions after the delete operation was successful
|
|
|
|
|
private static $deletedFiles = array();
|
|
|
|
|
|
|
|
|
|
private static $max_versions_per_interval = array(
|
|
|
|
|
//first 10sec, one version every 2sec
|
|
|
|
|
1 => array('intervalEndsAfter' => 10, 'step' => 2),
|
|
|
|
|
@ -141,26 +144,45 @@ class Storage {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief mark file as deleted so that we can remove the versions if the file is gone
|
|
|
|
|
* @param string $path
|
|
|
|
|
*/
|
|
|
|
|
public static function markDeletedFile($path) {
|
|
|
|
|
list($uid, $filename) = self::getUidAndFilename($path);
|
|
|
|
|
self::$deletedFiles[$path] = array(
|
|
|
|
|
'uid' => $uid,
|
|
|
|
|
'filename' => $filename);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete versions of a file
|
|
|
|
|
*/
|
|
|
|
|
public static function delete($filename) {
|
|
|
|
|
list($uid, $filename) = self::getUidAndFilename($filename);
|
|
|
|
|
$versions_fileview = new \OC\Files\View('/'.$uid .'/files_versions');
|
|
|
|
|
public static function delete($path) {
|
|
|
|
|
|
|
|
|
|
$abs_path = $versions_fileview->getLocalFile($filename.'.v');
|
|
|
|
|
if( ($versions = self::getVersions($uid, $filename)) ) {
|
|
|
|
|
$versionsSize = self::getVersionsSize($uid);
|
|
|
|
|
if ( $versionsSize === false || $versionsSize < 0 ) {
|
|
|
|
|
$versionsSize = self::calculateSize($uid);
|
|
|
|
|
}
|
|
|
|
|
foreach ($versions as $v) {
|
|
|
|
|
unlink($abs_path . $v['version']);
|
|
|
|
|
\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $abs_path . $v['version']));
|
|
|
|
|
$versionsSize -= $v['size'];
|
|
|
|
|
$deletedFile = self::$deletedFiles[$path];
|
|
|
|
|
$uid = $deletedFile['uid'];
|
|
|
|
|
$filename = $deletedFile['filename'];
|
|
|
|
|
|
|
|
|
|
if (!\OC\Files\Filesystem::file_exists($path)) {
|
|
|
|
|
|
|
|
|
|
$versions_fileview = new \OC\Files\View('/' . $uid . '/files_versions');
|
|
|
|
|
|
|
|
|
|
$abs_path = $versions_fileview->getLocalFile($filename . '.v');
|
|
|
|
|
if (($versions = self::getVersions($uid, $filename))) {
|
|
|
|
|
$versionsSize = self::getVersionsSize($uid);
|
|
|
|
|
if ($versionsSize === false || $versionsSize < 0) {
|
|
|
|
|
$versionsSize = self::calculateSize($uid);
|
|
|
|
|
}
|
|
|
|
|
foreach ($versions as $v) {
|
|
|
|
|
unlink($abs_path . $v['version']);
|
|
|
|
|
\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $abs_path . $v['version']));
|
|
|
|
|
$versionsSize -= $v['size'];
|
|
|
|
|
}
|
|
|
|
|
self::setVersionsSize($uid, $versionsSize);
|
|
|
|
|
}
|
|
|
|
|
self::setVersionsSize($uid, $versionsSize);
|
|
|
|
|
}
|
|
|
|
|
unset(self::$deletedFiles[$path]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|