]> source.dussan.org Git - nextcloud-server.git/commitdiff
Split image provider in one sub-class per media type
authorOlivier Paroz <github@oparoz.com>
Thu, 2 Apr 2015 08:31:24 +0000 (10:31 +0200)
committerOlivier Paroz <github@oparoz.com>
Thu, 2 Apr 2015 08:31:24 +0000 (10:31 +0200)
config/config.sample.php
lib/private/preview/bmp.php [new file with mode: 0644]
lib/private/preview/gif.php [new file with mode: 0644]
lib/private/preview/image.php
lib/private/preview/jpeg.php [new file with mode: 0644]
lib/private/preview/png.php [new file with mode: 0644]
lib/private/preview/xbitmap.php [new file with mode: 0644]
lib/private/previewmanager.php

index 672203153c64be6a5efd895f8958b9b40b389e38..60932ab7d9b77df499c73dcbb86161e63a62c073 100644 (file)
@@ -661,7 +661,11 @@ $CONFIG = array(
  *
  * The following providers are enabled by default:
  *
- *  - OC\Preview\Image
+ *  - OC\Preview\PNG
+ *  - OC\Preview\JPEG
+ *  - OC\Preview\GIF
+ *  - OC\Preview\BMP
+ *  - OC\Preview\XBitmap
  *  - OC\Preview\MarkDown
  *  - OC\Preview\MP3
  *  - OC\Preview\TXT
@@ -697,7 +701,11 @@ $CONFIG = array(
  *  - OC\Preview\StarOffice
  */
 'enabledPreviewProviders' => array(
-       'OC\Preview\Image',
+       'OC\Preview\PNG',
+       'OC\Preview\JPEG',
+       'OC\Preview\GIF',
+       'OC\Preview\BMP',
+       'OC\Preview\XBitmap',
        'OC\Preview\MP3',
        'OC\Preview\TXT',
        'OC\Preview\MarkDown'
diff --git a/lib/private/preview/bmp.php b/lib/private/preview/bmp.php
new file mode 100644 (file)
index 0000000..0547f05
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @author Olivier Paroz <owncloud@interfasys.ch>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Preview;
+
+class BMP extends Image {
+       /**
+        * {@inheritDoc}
+        */
+       public function getMimeType() {
+               return '/image\/bmp/';
+       }
+}
diff --git a/lib/private/preview/gif.php b/lib/private/preview/gif.php
new file mode 100644 (file)
index 0000000..e2b7c7e
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @author Olivier Paroz <owncloud@interfasys.ch>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Preview;
+
+class GIF extends Image {
+       /**
+        * {@inheritDoc}
+        */
+       public function getMimeType() {
+               return '/image\/gif/';
+       }
+}
index 9770ca322e99ad6627488e163ac74a5bec3bdb46..2c69d29f4cbea18702cf5364941883ec930fed79 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * @author Georg Ehrke <georg@owncloud.com>
- * @author Georg Ehrke <georg@ownCloud.com>
+ * @author Olivier Paroz <owncloud@interfasys.ch>
  * @author Joas Schilling <nickvergessen@owncloud.com>
  * @author Morris Jobke <hey@morrisjobke.de>
  * @author Thomas Müller <thomas.mueller@tmit.eu>
  */
 namespace OC\Preview;
 
-class Image extends Provider {
-       /**
-        * {@inheritDoc}
-        */
-       public function getMimeType() {
-               return '/image\/(?!tiff$)(?!svg.*).*/';
-       }
+abstract class Image extends Provider {
 
        /**
         * {@inheritDoc}
diff --git a/lib/private/preview/jpeg.php b/lib/private/preview/jpeg.php
new file mode 100644 (file)
index 0000000..69edd95
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @author Olivier Paroz <owncloud@interfasys.ch>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Preview;
+
+class JPEG extends Image {
+       /**
+        * {@inheritDoc}
+        */
+       public function getMimeType() {
+               return '/image\/jpeg/';
+       }
+}
diff --git a/lib/private/preview/png.php b/lib/private/preview/png.php
new file mode 100644 (file)
index 0000000..f40c1db
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @author Olivier Paroz <owncloud@interfasys.ch>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Preview;
+
+class PNG extends Image {
+       /**
+        * {@inheritDoc}
+        */
+       public function getMimeType() {
+               return '/image\/png/';
+       }
+}
diff --git a/lib/private/preview/xbitmap.php b/lib/private/preview/xbitmap.php
new file mode 100644 (file)
index 0000000..db7b85f
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @author Olivier Paroz <owncloud@interfasys.ch>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Preview;
+
+class XBitmap extends Image {
+       /**
+        * {@inheritDoc}
+        */
+       public function getMimeType() {
+               return '/image\/x-xbitmap/';
+       }
+}
index c4d29261f244f9074799fe0b3f52d3f4e4a44743..78ae12cd2e5eaf2faa2b40d94e90384a595d2ed4 100644 (file)
@@ -188,7 +188,11 @@ class PreviewManager implements IPreview {
         * List of enabled default providers
         *
         * The following providers are enabled by default:
-        *  - OC\Preview\Image
+        *  - OC\Preview\PNG
+        *  - OC\Preview\JPEG
+        *  - OC\Preview\GIF
+        *  - OC\Preview\BMP
+        *  - OC\Preview\XBitmap
         *  - OC\Preview\MarkDown
         *  - OC\Preview\MP3
         *  - OC\Preview\TXT
@@ -215,12 +219,24 @@ class PreviewManager implements IPreview {
                        return $this->defaultProviders;
                }
 
-               $this->defaultProviders = $this->config->getSystemValue('enabledPreviewProviders', [
-                       'OC\Preview\Image',
+               $imageProviders = [
+                       'OC\Preview\PNG',
+                       'OC\Preview\JPEG',
+                       'OC\Preview\GIF',
+                       'OC\Preview\BMP',
+                       'OC\Preview\XBitmap'
+               ];
+
+               $this->defaultProviders = $this->config->getSystemValue('enabledPreviewProviders', array_merge([
                        'OC\Preview\MarkDown',
                        'OC\Preview\MP3',
                        'OC\Preview\TXT',
-               ]);
+               ], $imageProviders));
+
+               if (in_array('OC\Preview\Image', $this->defaultProviders)) {
+                       $this->defaultProviders = array_merge($this->defaultProviders, $imageProviders);
+               }
+               $this->defaultProviders = array_unique($this->defaultProviders);
                return $this->defaultProviders;
        }
 
@@ -249,7 +265,11 @@ class PreviewManager implements IPreview {
 
                $this->registerCoreProvider('OC\Preview\TXT', '/text\/plain/');
                $this->registerCoreProvider('OC\Preview\MarkDown', '/text\/(x-)?markdown/');
-               $this->registerCoreProvider('OC\Preview\Image', '/image\/(?!tiff$)(?!svg.*).*/');
+               $this->registerCoreProvider('OC\Preview\PNG', '/image\/png/');
+               $this->registerCoreProvider('OC\Preview\JPEG', '/image\/jpeg/');
+               $this->registerCoreProvider('OC\Preview\GIF', '/image\/gif/');
+               $this->registerCoreProvider('OC\Preview\BMP', '/image\/bmp/');
+               $this->registerCoreProvider('OC\Preview\XBitmap', '/image\/x-xbitmap/');
                $this->registerCoreProvider('OC\Preview\MP3', '/audio\/mpeg/');
 
                // SVG, Office and Bitmap require imagick