summaryrefslogtreecommitdiffstats
path: root/lib/private/PreviewManager.php
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2016-10-16 16:48:11 +0200
committerRoeland Jago Douma <roeland@famdouma.nl>2016-11-03 14:00:33 +0100
commit5466fbf761bfb810a43b11789b03b2ec54c9ab6e (patch)
tree273bee9e8a91c6559ba5ff4e1c6514d4ef3e5c22 /lib/private/PreviewManager.php
parent8468212386fa577a60df238c10243b8297e962fc (diff)
downloadnextcloud-server-5466fbf761bfb810a43b11789b03b2ec54c9ab6e.tar.gz
nextcloud-server-5466fbf761bfb810a43b11789b03b2ec54c9ab6e.zip
Move Ipreview to more of DI thingy
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'lib/private/PreviewManager.php')
-rw-r--r--lib/private/PreviewManager.php52
1 files changed, 50 insertions, 2 deletions
diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php
index 109feb45864..0cda55751bf 100644
--- a/lib/private/PreviewManager.php
+++ b/lib/private/PreviewManager.php
@@ -25,13 +25,29 @@
*/
namespace OC;
+use OC\Preview\Generator;
+use OCP\Files\File;
+use OCP\Files\IAppData;
+use OCP\Files\IRootFolder;
+use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\IConfig;
use OCP\IPreview;
use OCP\Preview\IProvider;
class PreviewManager implements IPreview {
- /** @var \OCP\IConfig */
+ /** @var IConfig */
protected $config;
+ /** @var IRootFolder */
+ protected $rootFolder;
+
+ /** @var IAppData */
+ protected $appData;
+
+ /** @var Generator */
+ private $generator;
+
/** @var bool */
protected $providerListDirty = false;
@@ -52,8 +68,12 @@ class PreviewManager implements IPreview {
*
* @param \OCP\IConfig $config
*/
- public function __construct(\OCP\IConfig $config) {
+ public function __construct(IConfig $config,
+ IRootFolder $rootFolder,
+ IAppData $appData) {
$this->config = $config;
+ $this->rootFolder = $rootFolder;
+ $this->appData = $appData;
}
/**
@@ -121,6 +141,34 @@ class PreviewManager implements IPreview {
}
/**
+ * Returns a preview of a file
+ *
+ * The cache is searched first and if nothing usable was found then a preview is
+ * generated by one of the providers
+ *
+ * @param File $file
+ * @param int $width
+ * @param int $height
+ * @param bool $crop
+ * @param string $mode
+ * @return ISimpleFile
+ * @throws NotFoundException
+ * @since 9.2.0
+ */
+ public function getPreview(File $file, $width = -1, $height = -1, $crop = false, $mode = IPreview::MODE_FILL) {
+ if ($this->generator === null) {
+ $this->generator = new Generator(
+ $this->rootFolder,
+ $this->config,
+ $this,
+ $this->appData
+ );
+ }
+
+ return $this->generator->getPreview($file, $width, $height, $crop, $mode);
+ }
+
+ /**
* returns true if the passed mime type is supported
*
* @param string $mimeType
: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
<?php

declare(strict_types=1);

/**
 * @copyright Copyright (c) 2018, Michael Weimann (<mail@michael-weimann.eu>)
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * 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
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

namespace Test;

use OC\MemoryInfo;
use PHPUnit\Framework\MockObject\MockObject;

/**
 * This class provides tests for the MemoryInfo class.
 */
class MemoryInfoTest extends TestCase {
	/**
	 * The "memory_limit" value before tests.
	 *
	 * @var string
	 */
	private $iniSettingBeforeTest;

	/**
	 * @beforeClass
	 */
	public function backupMemoryInfoIniSetting() {
		$this->iniSettingBeforeTest = ini_get('memory_limit');
	}

	/**
	 * @afterClass
	 */
	public function restoreMemoryInfoIniSetting() {
		ini_set('memory_limit', $this->iniSettingBeforeTest);
	}

	/**
	 * Provides test data.
	 *
	 * @return array
	 */
	public function getMemoryLimitTestData(): array {
		return [
			'unlimited' => ['-1', -1,],
			'0' => ['0', 0,],
			'134217728 bytes' => ['134217728', 134217728,],
			'128M' => ['128M', 134217728,],
			'131072K' => ['131072K', 134217728,],
			'2G' => ['2G', 2147483648,],
		];
	}

	/**
	 * Tests that getMemoryLimit works as expected.
	 *
	 * @param string $iniValue The "memory_limit" ini data.
	 * @param int $expected The expected detected memory limit.
	 * @dataProvider getMemoryLimitTestData
	 */
	public function testMemoryLimit($iniValue, int $expected) {
		ini_set('memory_limit', $iniValue);
		$memoryInfo = new MemoryInfo();
		self::assertEquals($expected, $memoryInfo->getMemoryLimit());
	}

	/**
	 * Provides sufficient memory limit test data.
	 *
	 * @return array
	 */
	public function getSufficientMemoryTestData(): array {
		return [
			'unlimited' => [-1, true,],
			'512M' => [512 * 1024 * 1024, true,],
			'1G' => [1024 * 1024 * 1024, true,],
			'256M' => [256 * 1024 * 1024, false,],
		];
	}

	/**
	 * Tests that isMemoryLimitSufficient returns the correct values.
	 *
	 * @param int $memoryLimit The memory limit
	 * @param bool $expected If the memory limit is sufficient.
	 * @dataProvider getSufficientMemoryTestData
	 * @return void
	 */
	public function testIsMemoryLimitSufficient(int $memoryLimit, bool $expected) {
		/* @var MemoryInfo|MockObject $memoryInfo */
		$memoryInfo = $this->getMockBuilder(MemoryInfo::class)
			->setMethods(['getMemoryLimit',])
			->getMock();

		$memoryInfo
			->method('getMemoryLimit')
			->willReturn($memoryLimit);

		$isMemoryLimitSufficient = $memoryInfo->isMemoryLimitSufficient();
		self::assertEquals($expected, $isMemoryLimitSufficient);
	}
}