]> source.dussan.org Git - nextcloud-server.git/commitdiff
Move registration of core preview providers to preview
authorJoas Schilling <nickvergessen@gmx.de>
Thu, 27 Nov 2014 18:40:23 +0000 (19:40 +0100)
committerJoas Schilling <nickvergessen@gmx.de>
Thu, 27 Nov 2014 18:40:23 +0000 (19:40 +0100)
So the class files only have class code and don't execute code

lib/private/preview.php
lib/private/preview/bitmap.php
lib/private/preview/image.php
lib/private/preview/movie.php
lib/private/preview/mp3.php
lib/private/preview/office-cl.php
lib/private/preview/office.php [deleted file]
lib/private/preview/provider.php
lib/private/preview/svg.php
lib/private/preview/txt.php

index c9d8810be6f229544b86b688c5a0f115c8a57eba..6547d5b3258eedcebbf0c6cbc3aa2c6222517540 100644 (file)
@@ -21,7 +21,7 @@ require_once 'preview/movie.php';
 require_once 'preview/mp3.php';
 require_once 'preview/svg.php';
 require_once 'preview/txt.php';
-require_once 'preview/office.php';
+require_once 'preview/office-cl.php';
 require_once 'preview/bitmap.php';
 
 class Preview {
@@ -744,10 +744,11 @@ class Preview {
                        return;
                }
 
-               if (count(self::$providers) > 0) {
+               if (!empty(self::$providers)) {
                        return;
                }
 
+               self::registerCoreProviders();
                foreach (self::$registeredProviders as $provider) {
                        $class = $provider['class'];
                        $options = $provider['options'];
@@ -759,7 +760,74 @@ class Preview {
 
                $keys = array_map('strlen', array_keys(self::$providers));
                array_multisort($keys, SORT_DESC, self::$providers);
+       }
+
+       protected static function registerCoreProviders() {
+               self::registerProvider('OC\Preview\TXT');
+               self::registerProvider('OC\Preview\MarkDown');
+               self::registerProvider('OC\Preview\Image');
+               self::registerProvider('OC\Preview\MP3');
+
+               // SVG, Office and Bitmap require imagick
+               if (extension_loaded('imagick')) {
+                       $checkImagick = new \Imagick();
+
+                       $imagickProviders = array(
+                               'SVG'   => 'OC\Preview\SVG',
+                               'TIFF'  => 'OC\Preview\TIFF',
+                               'PDF'   => 'OC\Preview\PDF',
+                               'AI'    => 'OC\Preview\Illustrator',
+                               'PSD'   => 'OC\Preview\Photoshop',
+                               // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php
+                               'EPS'   => 'OC\Preview\Postscript',
+                       );
+
+                       foreach ($imagickProviders as $queryFormat => $provider) {
+                               if (count($checkImagick->queryFormats($queryFormat)) === 1) {
+                                       self::registerProvider($provider);
+                               }
+                       }
+
+                       if (count($checkImagick->queryFormats('PDF')) === 1) {
+                               // Office previews are currently not supported on Windows
+                               if (!\OC_Util::runningOnWindows() && \OC_Helper::is_function_enabled('shell_exec')) {
+                                       $officeFound = is_string(\OC::$server->getConfig()->getSystemValue('preview_libreoffice_path', null));
+
+                                       if (!$officeFound) {
+                                               //let's see if there is libreoffice or openoffice on this machine
+                                               $whichLibreOffice = shell_exec('command -v libreoffice');
+                                               $officeFound = !empty($whichLibreOffice);
+                                               if (!$officeFound) {
+                                                       $whichOpenOffice = shell_exec('command -v openoffice');
+                                                       $officeFound = !empty($whichOpenOffice);
+                                               }
+                                       }
+
+                                       if ($officeFound) {
+                                               self::registerProvider('OC\Preview\MSOfficeDoc');
+                                               self::registerProvider('OC\Preview\MSOffice2003');
+                                               self::registerProvider('OC\Preview\MSOffice2007');
+                                               self::registerProvider('OC\Preview\OpenDocument');
+                                               self::registerProvider('OC\Preview\StarOffice');
+                                       }
+                               }
+                       }
+               }
+
+               // Video requires avconv or ffmpeg and is therefor
+               // currently not supported on Windows.
+               if (!\OC_Util::runningOnWindows()) {
+                       $avconvBinary = \OC_Helper::findBinaryPath('avconv');
+                       $ffmpegBinary = ($avconvBinary) ? null : \OC_Helper::findBinaryPath('ffmpeg');
 
+                       if ($avconvBinary || $ffmpegBinary) {
+                               // FIXME // a bit hacky but didn't want to use subclasses
+                               \OC\Preview\Movie::$avconvBinary = $avconvBinary;
+                               \OC\Preview\Movie::$ffmpegBinary = $ffmpegBinary;
+
+                               self::registerProvider('OC\Preview\Movie');
+                       }
+               }
        }
 
        /**
index 748a63a6afad05211a3f1a3eb63f43d9bfc96964..4632285348613f81cc608cb145b9b2ef4a6b63e5 100644 (file)
@@ -9,10 +9,6 @@ namespace OC\Preview;
 
 use Imagick;
 
-if (extension_loaded('imagick')) {
-
-       $checkImagick = new Imagick();
-
        class Bitmap extends Provider {
 
                public function getMimeType() {
@@ -23,11 +19,11 @@ if (extension_loaded('imagick')) {
                        $tmpPath = $fileview->toTmpFile($path);
 
                        //create imagick object from bitmap or vector file
-                       try{
+                       try {
                                // Layer 0 contains either the bitmap or
                                // a flat representation of all vector layers
                                $bp = new Imagick($tmpPath . '[0]');
-                               
+
                                $bp->setImageFormat('png');
                        } catch (\Exception $e) {
                                \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
@@ -35,17 +31,14 @@ if (extension_loaded('imagick')) {
                        }
 
                        unlink($tmpPath);
-                       
+
                        //new bitmap image object
                        $image = new \OC_Image($bp);
                        //check if image object is valid
                        return $image->valid() ? $image : false;
                }
-
        }
-       
-       if(count($checkImagick->queryFormats('PDF')) === 1) {
-       
+
                //.pdf
                class PDF extends Bitmap {
 
@@ -54,12 +47,7 @@ if (extension_loaded('imagick')) {
                        }
 
                }
-               
-               \OC\Preview::registerProvider('OC\Preview\PDF');
-       }
-       
-       if(count($checkImagick->queryFormats('TIFF')) === 1) {
-       
+
                //.tiff
                class TIFF extends Bitmap {
 
@@ -68,12 +56,7 @@ if (extension_loaded('imagick')) {
                        }
 
                }
-               
-               \OC\Preview::registerProvider('OC\Preview\TIFF');
-       }
 
-       if(count($checkImagick->queryFormats('AI')) === 1) {
-       
                //.ai
                class Illustrator extends Bitmap {
 
@@ -82,12 +65,6 @@ if (extension_loaded('imagick')) {
                        }
 
                }
-               
-               \OC\Preview::registerProvider('OC\Preview\Illustrator');
-       }
-       
-       // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php
-       if(count($checkImagick->queryFormats('EPS')) === 1) {
 
                //.eps
                class Postscript extends Bitmap {
@@ -98,11 +75,6 @@ if (extension_loaded('imagick')) {
 
                }
 
-               \OC\Preview::registerProvider('OC\Preview\Postscript');
-       }
-       
-       if(count($checkImagick->queryFormats('PSD')) === 1) {
-       
                //.psd
                class Photoshop extends Bitmap {
 
@@ -111,7 +83,3 @@ if (extension_loaded('imagick')) {
                        }
 
                }
-               
-               \OC\Preview::registerProvider('OC\Preview\Photoshop');
-       }
-}
index 7bcbddc649e898745eddff3bd3d775d6ac4d0ac4..511052caf2b5f62d1015749c634f9cd53ebd1425 100644 (file)
@@ -35,5 +35,3 @@ class Image extends Provider {
        }
 
 }
-
-\OC\Preview::registerProvider('OC\Preview\Image');
index d69266ceb33b70bd6837fad876c1cb8a6c63d7e5..850027c1a64e23d4c027dde0191d4340c0eb8507 100644 (file)
@@ -8,13 +8,6 @@
  */
 namespace OC\Preview;
 
-// movie preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
-       $avconvBinary = \OC_Helper::findBinaryPath('avconv');
-       $ffmpegBinary = ($avconvBinary) ? null : \OC_Helper::findBinaryPath('ffmpeg');
-
-       if ($avconvBinary || $ffmpegBinary) {
-
                class Movie extends Provider {
                        public static $avconvBinary;
                        public static $ffmpegBinary;
@@ -95,12 +88,3 @@ if (!\OC_Util::runningOnWindows()) {
                                return false;
                        }
                }
-
-               // a bit hacky but didn't want to use subclasses
-               Movie::$avconvBinary = $avconvBinary;
-               Movie::$ffmpegBinary = $ffmpegBinary;
-
-               \OC\Preview::registerProvider('OC\Preview\Movie');
-       }
-}
-
index bb4d3dfce869af1646f7aaa70e6b499636c48b32..661cb92bf624ac6beb0e49eea4175aef1b9a2316 100644 (file)
@@ -44,5 +44,3 @@ class MP3 extends Provider {
        }
 
 }
-
-\OC\Preview::registerProvider('OC\Preview\MP3');
index f5c791e37f25e21d683d9f41c7df764ecbb9cc20..0f175e811d161f35e9906ee4c1d530dfa854cb57 100644 (file)
@@ -7,9 +7,6 @@
  */
 namespace OC\Preview;
 
-// office preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
-
        //we need imagick to convert
        class Office extends Provider {
 
@@ -90,8 +87,6 @@ if (!\OC_Util::runningOnWindows()) {
 
        }
 
-       \OC\Preview::registerProvider('OC\Preview\MSOfficeDoc');
-
        //.docm, .dotm, .xls(m), .xlt(m), .xla(m), .ppt(m), .pot(m), .pps(m), .ppa(m)
        class MSOffice2003 extends Office {
 
@@ -101,8 +96,6 @@ if (!\OC_Util::runningOnWindows()) {
 
        }
 
-       \OC\Preview::registerProvider('OC\Preview\MSOffice2003');
-
        //.docx, .dotx, .xlsx, .xltx, .pptx, .potx, .ppsx
        class MSOffice2007 extends Office {
 
@@ -112,8 +105,6 @@ if (!\OC_Util::runningOnWindows()) {
 
        }
 
-       \OC\Preview::registerProvider('OC\Preview\MSOffice2007');
-
        //.odt, .ott, .oth, .odm, .odg, .otg, .odp, .otp, .ods, .ots, .odc, .odf, .odb, .odi, .oxt
        class OpenDocument extends Office {
 
@@ -123,8 +114,6 @@ if (!\OC_Util::runningOnWindows()) {
 
        }
 
-       \OC\Preview::registerProvider('OC\Preview\OpenDocument');
-
        //.sxw, .stw, .sxc, .stc, .sxd, .std, .sxi, .sti, .sxg, .sxm
        class StarOffice extends Office {
 
@@ -133,6 +122,3 @@ if (!\OC_Util::runningOnWindows()) {
                }
 
        }
-
-       \OC\Preview::registerProvider('OC\Preview\StarOffice');
-}
diff --git a/lib/private/preview/office.php b/lib/private/preview/office.php
deleted file mode 100644 (file)
index b47cbc6..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-//both, libreoffice backend and php fallback, need imagick
-if (extension_loaded('imagick')) {
-
-       $checkImagick = new Imagick();
-
-       if(count($checkImagick->queryFormats('PDF')) === 1) {
-               $isShellExecEnabled = \OC_Helper::is_function_enabled('shell_exec');
-
-               // LibreOffice preview is currently not supported on Windows
-               if (!\OC_Util::runningOnWindows()) {
-                       $whichLibreOffice = ($isShellExecEnabled ? shell_exec('command -v libreoffice') : '');
-                       $isLibreOfficeAvailable = !empty($whichLibreOffice);
-                       $whichOpenOffice = ($isShellExecEnabled ? shell_exec('command -v openoffice') : '');
-                       $isOpenOfficeAvailable = !empty($whichOpenOffice);
-                       //let's see if there is libreoffice or openoffice on this machine
-                       if($isShellExecEnabled && ($isLibreOfficeAvailable || $isOpenOfficeAvailable || is_string(\OC_Config::getValue('preview_libreoffice_path', null)))) {
-                               require_once('office-cl.php');
-                       }
-               }
-       }
-}
index f544c2c4b133a36c2ab2ebbc4b9edeb52b555e79..10e23efa20ab73cbe61cd3bcd5fa6bdced061818 100644 (file)
@@ -5,18 +5,21 @@ abstract class Provider {
        private $options;
 
        public function __construct($options) {
-               $this->options=$options;
+               $this->options = $options;
        }
 
+       /**
+        * @return string Regex with the mimetypes that are supported by this provider
+        */
        abstract public function getMimeType();
 
        /**
         * Check if a preview can be generated for $path
         *
-        * @param string $path
+        * @param \OC\Files\FileInfo $file
         * @return bool
         */
-       public function isAvailable($path) {
+       public function isAvailable($file) {
                return true;
        }
 
@@ -32,5 +35,4 @@ abstract class Provider {
         *              OC_Image object of the preview
         */
        abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
-
 }
index 0b5dbc9716fc87ee2293ffcb8520ce1cf22890b5..6ddf893966937f941c0501fc6190da775b30b835 100644 (file)
@@ -9,12 +9,6 @@ namespace OC\Preview;
 
 use Imagick;
 
-if (extension_loaded('imagick')) {
-
-       $checkImagick = new Imagick();
-
-       if(count($checkImagick->queryFormats('SVG')) === 1) {
-
                class SVG extends Provider {
 
                        public function getMimeType() {
@@ -50,9 +44,4 @@ if (extension_loaded('imagick')) {
                                //check if image object is valid
                                return $image->valid() ? $image : false;
                        }
-
                }
-
-               \OC\Preview::registerProvider('OC\Preview\SVG');
-       }
-}
index 7f01b980c0e56fb19f3f35ae459cbe150ad1ed4a..ff612e2509a1323f546f068d6526ac869d490f34 100644 (file)
@@ -8,28 +8,22 @@
 namespace OC\Preview;
 
 class TXT extends Provider {
-
+       /**
+        * {@inheritDoc}
+        */
        public function getMimeType() {
                return '/text\/plain/';
        }
 
        /**
-        * Check if a preview can be generated for $path
-        *
-        * @param \OC\Files\FileInfo $file
-        * @return bool
+        * {@inheritDoc}
         */
        public function isAvailable($file) {
                return $file->getSize() > 5;
        }
 
        /**
-        * @param string $path
-        * @param int $maxX
-        * @param int $maxY
-        * @param boolean $scalingup
-        * @param \OC\Files\View $fileview
-        * @return bool|\OC_Image
+        * {@inheritDoc}
         */
        public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
 
@@ -80,14 +74,9 @@ class TXT extends Provider {
        }
 }
 
-\OC\Preview::registerProvider('OC\Preview\TXT');
-
 class MarkDown extends TXT {
-
        public function getMimeType() {
                return '/text\/(x-)?markdown/';
        }
 
 }
-
-\OC\Preview::registerProvider('OC\Preview\MarkDown');