Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2014-07-24 20:54:12 +0400
committerVincent Petry <pvince81@owncloud.com>2014-10-14 13:36:39 +0400
commit07377be378f633ac1e3450b8aa5d2acb2fe1f728 (patch)
tree98f84a288c00473532dc2f2d30ee7e6e64743b3a
parentfd55d73ac50e6a2b2838f3b8dc755d5d79165538 (diff)
make sure that we always find all versions
-rw-r--r--apps/files_versions/lib/hooks.php1
-rw-r--r--apps/files_versions/lib/versions.php59
2 files changed, 37 insertions, 23 deletions
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index 5421f5a3ec4..a47816a0f50 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -22,7 +22,6 @@ class Hooks {
\OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Files_Versions\Hooks", "pre_remove_hook");
\OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook");
\OCP\Util::connectHook('OC_Filesystem', 'copy', "OCA\Files_Versions\Hooks", "copy_hook");
- \OCP\Util::connectHook('OC_Filesystem', 'copy', "OCA\Files_Versions\Hooks", "copy_hook");
//Listen to delete user signal
\OCP\Util::connectHook('OC_User', 'pre_deleteUser', "OCA\Files_Versions\Hooks", "deleteUser_hook");
}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index fd2de520095..c54ed3fdd9a 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -206,8 +206,6 @@ class Storage {
return self::store($new_path);
}
- self::expire($newpath);
-
if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
$versions_view->$operation($oldpath, $newpath);
} else if ( ($versions = Storage::getVersions($uid, $oldpath)) ) {
@@ -218,6 +216,11 @@ class Storage {
$versions_view->$operation($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
}
}
+
+ if (!$files_view->is_dir($newpath)) {
+ self::expire($newpath);
+ }
+
}
/**
@@ -272,34 +275,46 @@ class Storage {
public static function getVersions($uid, $filename, $userFullPath = '') {
$versions = array();
// fetch for old versions
- $view = new \OC\Files\View('/' . $uid . '/' . self::VERSIONS_ROOT);
+ $view = new \OC\Files\View('/' . $uid . '/');
$pathinfo = pathinfo($filename);
+ $versionedFile = $pathinfo['basename'];
- $files = $view->getDirectoryContent($pathinfo['dirname']);
+ $dir = self::VERSIONS_ROOT . '/' . $pathinfo['dirname'];
- $versionedFile = $pathinfo['basename'];
+ $dirContent = false;
+ if ($view->is_dir($dir)) {
+ $dirContent = $view->opendir($dir);
+ }
+
+ if ($dirContent === false) {
+ return $versions;
+ }
- foreach ($files as $file) {
- if ($file['type'] === 'file') {
- $pos = strrpos($file['path'], '.v');
- $currentFile = substr($file['name'], 0, strrpos($file['name'], '.v'));
- if ($currentFile === $versionedFile) {
- $version = substr($file['path'], $pos + 2);
- $key = $version . '#' . $filename;
- $versions[$key]['cur'] = 0;
- $versions[$key]['version'] = $version;
- $versions[$key]['humanReadableTimestamp'] = self::getHumanReadableTimestamp($version);
- if (empty($userFullPath)) {
- $versions[$key]['preview'] = '';
- } else {
- $versions[$key]['preview'] = \OCP\Util::linkToRoute('core_ajax_versions_preview', array('file' => $userFullPath, 'version' => $version));
+ if (is_resource($dirContent)) {
+ while (($entryName = readdir($dirContent)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
+ $pathparts = pathinfo($entryName);
+ $filename = $pathparts['filename'];
+ if ($filename === $versionedFile) {
+ $pathparts = pathinfo($entryName);
+ $timestamp = substr($pathparts['extension'], 1);
+ $filename = $pathparts['filename'];
+ $key = $timestamp . '#' . $filename;
+ $versions[$key]['version'] = $timestamp;
+ $versions[$key]['humanReadableTimestamp'] = self::getHumanReadableTimestamp($timestamp);
+ if (empty($userFullPath)) {
+ $versions[$key]['preview'] = '';
+ } else {
+ $versions[$key]['preview'] = \OCP\Util::linkToRoute('core_ajax_versions_preview', array('file' => $userFullPath, 'version' => $timestamp));
+ }
+ $versions[$key]['path'] = $filename;
+ $versions[$key]['name'] = $versionedFile;
+ $versions[$key]['size'] = $view->filesize($dir . '/' . $entryName);
}
- $versions[$key]['path'] = $filename;
- $versions[$key]['name'] = $versionedFile;
- $versions[$key]['size'] = $file['size'];
}
}
+ closedir($dirContent);
}
// sort with newest version first