]> source.dussan.org Git - nextcloud-server.git/commitdiff
Register preview providers on the preview manager instead of OC\Preview
authorJoas Schilling <nickvergessen@owncloud.com>
Wed, 11 Mar 2015 15:43:00 +0000 (16:43 +0100)
committerJoas Schilling <nickvergessen@owncloud.com>
Mon, 16 Mar 2015 11:44:11 +0000 (12:44 +0100)
lib/private/preview.php
lib/private/preview/provider.php
lib/private/previewmanager.php
lib/public/ipreview.php

index 6af1586293fc2dee806a3b772abd68b03a87a751..f55cf280b3e074262a58cb2354d3e9598e197e63 100644 (file)
@@ -510,7 +510,7 @@ class Preview {
                if (is_null($this->preview)) {
                        $preview = null;
 
-                       foreach (self::$providers as $supportedMimeType => $provider) {
+                       foreach (self::getProviders() as $supportedMimeType => $provider) {
                                if (!preg_match($supportedMimeType, $this->mimeType)) {
                                        continue;
                                }
@@ -757,6 +757,14 @@ class Preview {
                array_multisort($keys, SORT_DESC, self::$providers);
        }
 
+       protected static function getProviders() {
+               if (empty(self::$providers)) {
+                       self::initProviders();
+               }
+
+               return self::$providers;
+       }
+
        protected static function registerCoreProviders() {
                self::registerProvider('OC\Preview\TXT');
                self::registerProvider('OC\Preview\MarkDown');
@@ -914,60 +922,6 @@ class Preview {
                $preview->deleteAllPreviews();
        }
 
-       /**
-        * Check if a preview can be generated for a file
-        *
-        * @param \OC\Files\FileInfo $file
-        * @return bool
-        */
-       public static function isAvailable(\OC\Files\FileInfo $file) {
-               if (!\OC_Config::getValue('enable_previews', true)) {
-                       return false;
-               }
-
-               $mount = $file->getMountPoint();
-               if ($mount and !$mount->getOption('previews', true)){
-                       return false;
-               }
-
-               //check if there are preview backends
-               if (empty(self::$providers)) {
-                       self::initProviders();
-               }
-
-               foreach (self::$providers as $supportedMimeType => $provider) {
-                       /**
-                        * @var \OC\Preview\Provider $provider
-                        */
-                       if (preg_match($supportedMimeType, $file->getMimetype())) {
-                               return $provider->isAvailable($file);
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * @param string $mimeType
-        * @return bool
-        */
-       public static function isMimeSupported($mimeType) {
-               if (!\OC_Config::getValue('enable_previews', true)) {
-                       return false;
-               }
-
-               //check if there are preview backends
-               if (empty(self::$providers)) {
-                       self::initProviders();
-               }
-
-               foreach(self::$providers as $supportedMimetype => $provider) {
-                       if(preg_match($supportedMimetype, $mimeType)) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
        /**
         * @param int $fileId
         * @return string
index ead67eaeef7c729f3fd752c9d6d168f1bbc10b31..34c61307238f4c9204d7263c3b86666600469398 100644 (file)
@@ -16,7 +16,7 @@ abstract class Provider {
        /**
         * Check if a preview can be generated for $path
         *
-        * @param \OC\Files\FileInfo $file
+        * @param \OCP\Files\FileInfo $file
         * @return bool
         */
        public function isAvailable($file) {
index 85bf609743d23c79e7ef57a72bed8cbf9359ac56..29c205e730916db23a053ad5e8e5d4758982e3af 100644 (file)
@@ -12,6 +12,26 @@ use OCP\image;
 use OCP\IPreview;
 
 class PreviewManager implements IPreview {
+       /** @var array */
+       protected $providers = [];
+
+       /**
+        * In order to improve lazy loading a closure can be registered which will be
+        * called in case preview providers are actually requested
+        *
+        * $callable has to return an instance of \OC\Preview\Provider
+        *
+        * @param string $mimeTypeRegex Regex with the mime types that are supported by this provider
+        * @param \Closure $callable
+        * @return void
+        */
+       public function registerProvider($mimeTypeRegex, \Closure $callable) {
+               if (!isset($this->providers[$mimeTypeRegex])) {
+                       $this->providers[$mimeTypeRegex] = [];
+               }
+               $this->providers[$mimeTypeRegex][] = $callable;
+       }
+
        /**
         * return a preview of a file
         *
@@ -33,16 +53,45 @@ class PreviewManager implements IPreview {
         * @return boolean
         */
        function isMimeSupported($mimeType = '*') {
-               return \OC\Preview::isMimeSupported($mimeType);
+               if (!\OC::$server->getConfig()->getSystemValue('enable_previews', true)) {
+                       return false;
+               }
+
+               $providerMimeTypes = array_keys($this->providers);
+               foreach ($providerMimeTypes as $supportedMimeType) {
+                       if (preg_match($supportedMimeType, $mimeType)) {
+                               return true;
+                       }
+               }
+               return false;
        }
 
        /**
         * Check if a preview can be generated for a file
         *
-        * @param \OC\Files\FileInfo $file
+        * @param \OCP\Files\FileInfo $file
         * @return bool
         */
        function isAvailable($file) {
-               return \OC\Preview::isAvailable($file);
+               if (!\OC::$server->getConfig()->getSystemValue('enable_previews', true)) {
+                       return false;
+               }
+
+               $mount = $file->getMountPoint();
+               if ($mount and !$mount->getOption('previews', true)){
+                       return false;
+               }
+
+               foreach ($this->providers as $supportedMimeType => $providers) {
+                       if (preg_match($supportedMimeType, $file->getMimetype())) {
+                               foreach ($providers as $provider) {
+                                       /** @var $provider \OC\Preview\Provider */
+                                       if ($provider->isAvailable($file)) {
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+               return false;
        }
 }
index cc756ef80d368926bf1e7edb2803113020016212..9ebe2e2d1cfda7ce725d811f27df3c34e68272ff 100644 (file)
@@ -36,8 +36,18 @@ namespace OCP;
 /**
  * This class provides functions to render and show thumbnails and previews of files
  */
-interface IPreview
-{
+interface IPreview {
+       /**
+        * In order to improve lazy loading a closure can be registered which will be
+        * called in case preview providers are actually requested
+        *
+        * $callable has to return an instance of \OC\Preview\Provider
+        *
+        * @param string $mimeTypeRegex Regex with the mime types that are supported by this provider
+        * @param \Closure $callable
+        * @return void
+        */
+       public function registerProvider($mimeTypeRegex, \Closure $callable);
 
        /**
         * Return a preview of a file