]> source.dussan.org Git - nextcloud-server.git/commitdiff
let file cache handle the versions size
authorBjoern Schiessle <schiessle@owncloud.com>
Tue, 6 May 2014 11:55:26 +0000 (13:55 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 2 Jun 2014 16:55:13 +0000 (18:55 +0200)
apps/files_versions/appinfo/database.xml [deleted file]
apps/files_versions/appinfo/update.php
apps/files_versions/appinfo/version
apps/files_versions/lib/versions.php
lib/private/files/cache/homecache.php

diff --git a/apps/files_versions/appinfo/database.xml b/apps/files_versions/appinfo/database.xml
deleted file mode 100644 (file)
index d385477..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<database>
-
- <name>*dbname*</name>
- <create>true</create>
- <overwrite>false</overwrite>
-
- <charset>utf8</charset>
-
- <table>
-
-  <name>*dbprefix*files_versions</name>
-
-  <declaration>
-
-   <field>
-    <name>user</name>
-    <type>text</type>
-    <default></default>
-    <notnull>true</notnull>
-    <length>64</length>
-   </field>
-   <field>
-    <name>size</name>
-    <type>text</type>
-    <default></default>
-    <notnull>true</notnull>
-    <length>50</length>
-   </field>
-   
-  </declaration>
-
- </table>
-
-</database>
index 52a4850758a0b416372180dc1c94a58fc0c6144d..ee6d3c14c9ac582c00097059bf09919b9fc26d96 100644 (file)
@@ -2,14 +2,7 @@
 
 $installedVersion=OCP\Config::getAppValue('files_versions', 'installed_version');
 // move versions to new directory
-if (version_compare($installedVersion, '1.0.2', '<')) {
-       $users = \OCP\User::getUsers();
-       $datadir =  \OCP\Config::getSystemValue('datadirectory').'/';
-       foreach ($users as $user) {
-               $oldPath = $datadir.$user.'/versions';
-               $newPath = $datadir.$user.'/files_versions';
-               if(is_dir($oldPath)) {
-                       rename($oldPath, $newPath);
-               }
-       }
+if (version_compare($installedVersion, '1.0.4', '<')) {
+       $query = \OCP\DB::prepare("DROP TABLE `*PREFIX*files_versions`");
+       $query->execute(array());
 }
index e4c0d46e55ffb2237c9e900aa77172886f6c8aa5..ee90284c27f187a315f1267b063fa81b5b84f613 100644 (file)
@@ -1 +1 @@
-1.0.3
\ No newline at end of file
+1.0.4
index 56e1dfc2e2416cb7fd8ad49e48ef2a608288cb34..8dc01d18ad9a8e90851a7c8c8dca0ab77604ef96 100644 (file)
@@ -54,31 +54,12 @@ class Storage {
         * get current size of all versions from a given user
         *
         * @param string $user user who owns the versions
-        * @return mixed versions size or false if no versions size is stored
+        * @return int versions size
         */
        private static function getVersionsSize($user) {
-               $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*files_versions` WHERE `user`=?');
-               $result = $query->execute(array($user))->fetchAll();
-
-               if ($result) {
-                       return $result[0]['size'];
-               }
-               return false;
-       }
-
-       /**
-        * write to the database how much space is in use for versions
-        *
-        * @param string $user owner of the versions
-        * @param int $size size of the versions
-        */
-       private static function setVersionsSize($user, $size) {
-               if ( self::getVersionsSize($user) === false) {
-                       $query = \OC_DB::prepare('INSERT INTO `*PREFIX*files_versions` (`size`, `user`) VALUES (?, ?)');
-               }else {
-                       $query = \OC_DB::prepare('UPDATE `*PREFIX*files_versions` SET `size`=? WHERE `user`=?');
-               }
-               $query->execute(array($size, $user));
+               $view = new \OC\Files\View('/' . $user);
+               $fileInfo = $view->getFileInfo('/files_versions');
+               return isset($fileInfo['size']) ? $fileInfo['size'] : 0;
        }
 
        /**
@@ -115,16 +96,13 @@ class Storage {
                        self::createMissingDirectories($filename, $users_view);
 
                        $versionsSize = self::getVersionsSize($uid);
-                       if (  $versionsSize === false || $versionsSize < 0 ) {
-                               $versionsSize = self::calculateSize($uid);
-                       }
 
                        // assumption: we need filesize($filename) for the new version +
                        // some more free space for the modified file which might be
                        // 1.5 times as large as the current version -> 2.5
                        $neededSpace = $files_view->filesize($filename) * 2.5;
 
-                       $versionsSize = self::expire($filename, $versionsSize, $neededSpace);
+                       self::expire($filename, $versionsSize, $neededSpace);
 
                        // disable proxy to prevent multiple fopen calls
                        $proxyStatus = \OC_FileProxy::$enabled;
@@ -138,10 +116,6 @@ class Storage {
 
                        // reset proxy state
                        \OC_FileProxy::$enabled = $proxyStatus;
-
-                       $versionsSize += $users_view->filesize('files'.$filename);
-
-                       self::setVersionsSize($uid, $versionsSize);
                }
        }
 
@@ -173,17 +147,11 @@ class Storage {
                        $abs_path = $versions_fileview->getLocalFile($filename . '.v');
                        $versions = self::getVersions($uid, $filename);
                        if (!empty($versions)) {
-                               $versionsSize = self::getVersionsSize($uid);
-                               if ($versionsSize === false || $versionsSize < 0) {
-                                       $versionsSize = self::calculateSize($uid);
-                               }
                                foreach ($versions as $v) {
                                        \OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $abs_path . $v['version']));
                                        unlink($abs_path . $v['version']);
                                        \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $abs_path . $v['version']));
-                                       $versionsSize -= $v['size'];
                                }
-                               self::setVersionsSize($uid, $versionsSize);
                        }
                }
                unset(self::$deletedFiles[$path]);
@@ -345,6 +313,7 @@ class Storage {
        }
 
        /**
+<<<<<<< HEAD
         * get the size of all stored versions from a given user
         * @param string $uid id from the user
         * @return int size of versions
@@ -373,6 +342,9 @@ class Storage {
 
        /**
         * returns all stored file versions from a given user
+=======
+        * @brief returns all stored file versions from a given user
+>>>>>>> 2f97e2f... let file cache handle the versions size
         * @param string $uid id of the user
         * @return array with contains two arrays 'all' which contains all versions sorted by age and 'by_file' which contains all versions sorted by filename
         */
@@ -500,9 +472,6 @@ class Storage {
                        // make sure that we have the current size of the version history
                        if ( $versionsSize === null ) {
                                $versionsSize = self::getVersionsSize($uid);
-                               if (  $versionsSize === false || $versionsSize < 0 ) {
-                                       $versionsSize = self::calculateSize($uid);
-                               }
                        }
 
                        // calculate available space for version history
index f61769f0b9bff0ba7b1965db3ee87a317a048282..06ae62015a564d6e40571230ef514dd7a73ad1b7 100644 (file)
@@ -17,7 +17,7 @@ class HomeCache extends Cache {
         * @return int
         */
        public function calculateFolderSize($path, $entry = null) {
-               if ($path !== '/' and $path !== '' and $path !== 'files' and $path !== 'files_trashbin') {
+               if ($path !== '/' and $path !== '' and $path !== 'files' and $path !== 'files_trashbin' and $path !== 'files_versions') {
                        return parent::calculateFolderSize($path, $entry);
                } elseif ($path === '' or $path === '/') {
                        // since the size of / isn't used (the size of /files is used instead) there is no use in calculating it