summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/preview.php64
-rw-r--r--lib/private/preview/provider.php2
-rw-r--r--lib/private/previewmanager.php55
-rw-r--r--lib/public/ipreview.php14
4 files changed, 74 insertions, 61 deletions
diff --git a/lib/private/preview.php b/lib/private/preview.php
index 6af1586293f..f55cf280b3e 100644
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -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');
@@ -915,60 +923,6 @@ class Preview {
}
/**
- * 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
*/
diff --git a/lib/private/preview/provider.php b/lib/private/preview/provider.php
index ead67eaeef7..34c61307238 100644
--- a/lib/private/preview/provider.php
+++ b/lib/private/preview/provider.php
@@ -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) {
diff --git a/lib/private/previewmanager.php b/lib/private/previewmanager.php
index 85bf609743d..29c205e7309 100644
--- a/lib/private/previewmanager.php
+++ b/lib/private/previewmanager.php
@@ -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;
}
}
diff --git a/lib/public/ipreview.php b/lib/public/ipreview.php
index cc756ef80d3..9ebe2e2d1cf 100644
--- a/lib/public/ipreview.php
+++ b/lib/public/ipreview.php
@@ -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