]> source.dussan.org Git - nextcloud-server.git/commitdiff
connect preview lib to filesystem hooks
authorGeorg Ehrke <georg@ownCloud.com>
Wed, 29 May 2013 10:01:43 +0000 (12:01 +0200)
committerGeorg Ehrke <georg@ownCloud.com>
Wed, 29 May 2013 10:01:43 +0000 (12:01 +0200)
lib/base.php
lib/preview.php

index 724bd250a5c63fc3d518b5d19c41933d29b21c36..ae384225bed466d62b180dfadf8526bd2028f6f2 100644 (file)
@@ -474,6 +474,7 @@ class OC {
 
                self::registerCacheHooks();
                self::registerFilesystemHooks();
+               self::registerPreviewHooks();
                self::registerShareHooks();
 
                //make sure temporary files are cleaned up
@@ -539,6 +540,14 @@ class OC {
                OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted');
        }
 
+       /**
+        * register hooks for previews
+        */
+       public static function registerPreviewHooks() {
+               OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_Preview', 'post_write');
+               OC_Hook::connect('OC_Filesystem', 'delete', 'OC_Preview', 'post_delete');
+       }
+
        /**
         * register hooks for sharing
         */
index 6fc166b9c704752c6fdfc322a01d3bc42cbcecd4..7c4db971dfbb5226f6de309fae1987d04e5edada 100755 (executable)
@@ -55,7 +55,7 @@ class OC_Preview {
         *                                      false if thumbnail does not exist
         *                                      path to thumbnail if thumbnail exists
        */
-       public function __construct($user = null, $root = '', $file = '', $maxX = 0, $maxY = 0, $scalingup = true){
+       public function __construct($user = null, $root = '', $file = '', $maxX = 0, $maxY = 0, $scalingup = true, $force = false){
                //set config
                $this->max_x = OC_Config::getValue('preview_max_x', null);
                $this->max_y = OC_Config::getValue('preview_max_y', null);
@@ -71,47 +71,49 @@ class OC_Preview {
                $this->fileview = new \OC\Files\View('/' . $user . '/' . $root);
                $this->userview = new \OC\Files\View('/' . $user);
 
-               if(!is_null($this->max_x)){
-                       if($this->maxX > $this->max_x){
-                               OC_Log::write('core', 'maxX reduced from ' . $this->maxX . ' to ' . $this->max_x, OC_Log::DEBUG);
-                               $this->maxX = $this->max_x;
+               if($force !== true){
+                       if(!is_null($this->max_x)){
+                               if($this->maxX > $this->max_x){
+                                       OC_Log::write('core', 'maxX reduced from ' . $this->maxX . ' to ' . $this->max_x, OC_Log::DEBUG);
+                                       $this->maxX = $this->max_x;
+                               }
                        }
-               }
-
-               if(!is_null($this->max_y)){
-                       if($this->maxY > $this->max_y){
-                               OC_Log::write('core', 'maxY reduced from ' . $this->maxY . ' to ' . $this->max_y, OC_Log::DEBUG);
-                               $this->maxY = $this->max_y;
+       
+                       if(!is_null($this->max_y)){
+                               if($this->maxY > $this->max_y){
+                                       OC_Log::write('core', 'maxY reduced from ' . $this->maxY . ' to ' . $this->max_y, OC_Log::DEBUG);
+                                       $this->maxY = $this->max_y;
+                               }
+                       }
+       
+                       //init providers
+                       if(empty(self::$providers)){
+                               self::initProviders();
+                       }
+       
+                       //check if there are any providers at all
+                       if(empty(self::$providers)){
+                               OC_Log::write('core', 'No preview providers exist', OC_Log::ERROR);
+                               throw new Exception('No providers');
+                       }
+       
+                       //validate parameters
+                       if($file === ''){
+                               OC_Log::write('core', 'No filename passed', OC_Log::ERROR);
+                               throw new Exception('File not found');
+                       }
+       
+                       //check if file exists
+                       if(!$this->fileview->file_exists($file)){
+                               OC_Log::write('core', 'File:"' . $file . '" not found', OC_Log::ERROR);
+                               throw new Exception('File not found');
+                       }
+       
+                       //check if given size makes sense
+                       if($maxX === 0 || $maxY === 0){
+                               OC_Log::write('core', 'Can not create preview with 0px width or 0px height', OC_Log::ERROR);
+                               throw new Exception('Height and/or width set to 0');
                        }
-               }
-
-               //init providers
-               if(empty(self::$providers)){
-                       self::initProviders();
-               }
-
-               //check if there are any providers at all
-               if(empty(self::$providers)){
-                       OC_Log::write('core', 'No preview providers exist', OC_Log::ERROR);
-                       throw new Exception('No providers');
-               }
-
-               //validate parameters
-               if($file === ''){
-                       OC_Log::write('core', 'No filename passed', OC_Log::ERROR);
-                       throw new Exception('File not found');
-               }
-
-               //check if file exists
-               if(!$this->fileview->file_exists($file)){
-                       OC_Log::write('core', 'File:"' . $file . '" not found', OC_Log::ERROR);
-                       throw new Exception('File not found');
-               }
-
-               //check if given size makes sense
-               if($maxX === 0 || $maxY === 0){
-                       OC_Log::write('core', 'Can not create preview with 0px width or 0px height', OC_Log::ERROR);
-                       throw new Exception('Height and/or width set to 0');
                }
        }
 
@@ -186,19 +188,22 @@ class OC_Preview {
        public function deletePreview(){
                $fileinfo = $this->fileview->getFileInfo($this->file);
                $fileid = $fileinfo['fileid'];
-               
-               return $this->userview->unlink(self::THUMBNAILS_FOLDER . '/' . $fileid . '/' . $this->maxX . '-' . $this->maxY . '.png');
+
+               $this->userview->unlink(self::THUMBNAILS_FOLDER . '/' . $fileid . '/' . $this->maxX . '-' . $this->maxY . '.png');
+               return;
        }
 
        /**
         * @brief deletes all previews of a file
         * @return bool
        */
-       public function deleteAllPrevies(){
+       public function deleteAllPreviews(){
                $fileinfo = $this->fileview->getFileInfo($this->file);
                $fileid = $fileinfo['fileid'];
 
-               return $this->userview->rmdir(self::THUMBNAILS_FOLDER . '/' . $fileid);
+               $this->userview->deleteAll(self::THUMBNAILS_FOLDER . '/' . $fileid . '/');
+               $this->userview->rmdir(self::THUMBNAILS_FOLDER . '/' . $fileid . '/');
+               return;
        }
 
        /**
@@ -577,4 +582,17 @@ class OC_Preview {
                        exit;
                }
        }
+
+       public static function post_write($args){
+               self::post_delete($args);
+       }
+       
+       public static function post_delete($args){
+               $path = $args['path'];
+               if(substr($path, 0, 1) == '/'){
+                       $path = substr($path, 1);
+               }
+               $preview = new OC_Preview(OC_User::getUser(), 'files/', $path, 0, 0, false, true);
+               $preview->deleteAllPreviews();
+       }
 }
\ No newline at end of file