mirror of
https://github.com/nextcloud/server.git
synced 2026-04-15 22:11:17 -04:00
Use IAppManager instead of OC_App
Signed-off-by: Julius Haertl <jus@bitgrid.net>
This commit is contained in:
parent
d409fe1c52
commit
2ab4d1e0a3
5 changed files with 81 additions and 36 deletions
|
|
@ -25,6 +25,7 @@ namespace OCA\Theming;
|
|||
|
||||
use Imagick;
|
||||
use ImagickPixel;
|
||||
use OCP\App\AppPathNotFoundException;
|
||||
|
||||
class IconBuilder {
|
||||
/** @var ThemingDefaults */
|
||||
|
|
@ -85,8 +86,13 @@ class IconBuilder {
|
|||
* @return Imagick|false
|
||||
*/
|
||||
public function renderAppIcon($app) {
|
||||
$appIcon = $this->util->getAppIcon($app);
|
||||
$appIconContent = file_get_contents($appIcon);
|
||||
try {
|
||||
$appIcon = $this->util->getAppIcon($app);
|
||||
$appIconContent = file_get_contents($appIcon);
|
||||
} catch (AppPathNotFoundException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($appIconContent === false) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -158,7 +164,11 @@ class IconBuilder {
|
|||
}
|
||||
|
||||
public function colorSvg($app, $image) {
|
||||
$imageFile = $this->util->getAppImage($app, $image);
|
||||
try {
|
||||
$imageFile = $this->util->getAppImage($app, $image);
|
||||
} catch (AppPathNotFoundException $e) {
|
||||
return false;
|
||||
}
|
||||
$svg = file_get_contents($imageFile);
|
||||
if ($svg !== false) {
|
||||
$color = $this->util->elementColor($this->themingDefaults->getMailHeaderColor());
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
namespace OCA\Theming;
|
||||
|
||||
use OCP\App\AppPathNotFoundException;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\IConfig;
|
||||
use OCP\Files\IRootFolder;
|
||||
|
||||
|
|
@ -34,15 +36,20 @@ class Util {
|
|||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var IAppManager */
|
||||
private $appManager;
|
||||
|
||||
/**
|
||||
* Util constructor.
|
||||
*
|
||||
* @param IConfig $config
|
||||
* @param IRootFolder $rootFolder
|
||||
* @param IAppManager $appManager
|
||||
*/
|
||||
public function __construct(IConfig $config, IRootFolder $rootFolder) {
|
||||
public function __construct(IConfig $config, IRootFolder $rootFolder, IAppManager $appManager) {
|
||||
$this->config = $config;
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->appManager = $appManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -108,8 +115,8 @@ class Util {
|
|||
*/
|
||||
public function getAppIcon($app) {
|
||||
$app = str_replace(array('\0', '/', '\\', '..'), '', $app);
|
||||
$appPath = \OC_App::getAppPath($app);
|
||||
if ($appPath !== false) {
|
||||
try {
|
||||
$appPath = $this->appManager->getAppPath($app);
|
||||
$icon = $appPath . '/img/' . $app . '.svg';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
|
|
@ -118,7 +125,8 @@ class Util {
|
|||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
}
|
||||
} catch (AppPathNotFoundException $e) {}
|
||||
|
||||
if($this->config->getAppValue('theming', 'logoMime', '') !== '' && $this->rootFolder->nodeExists('/themedinstancelogo')) {
|
||||
return $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/') . '/themedinstancelogo';
|
||||
}
|
||||
|
|
@ -128,40 +136,45 @@ class Util {
|
|||
/**
|
||||
* @param $app string app name
|
||||
* @param $image string relative path to image in app folder
|
||||
* @return string absolute path to image
|
||||
* @return string|false absolute path to image
|
||||
*/
|
||||
public function getAppImage($app, $image) {
|
||||
$app = str_replace(array('\0', '/', '\\', '..'), '', $app);
|
||||
$image = str_replace(array('\0', '\\', '..'), '', $image);
|
||||
$appPath = \OC_App::getAppPath($app);
|
||||
if ($app === "core") {
|
||||
$icon = \OC::$SERVERROOT . '/core/img/' . $image;
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
}
|
||||
if ($appPath !== false) {
|
||||
$icon = $appPath . '/img/' . $image;
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.svg';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.png';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.gif';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.jpg';
|
||||
if ($app === "core") {
|
||||
$icon = \OC::$SERVERROOT . '/core/img/' . $image;
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$appPath = $this->appManager->getAppPath($app);
|
||||
} catch (AppPathNotFoundException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$icon = $appPath . '/img/' . $image;
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.svg';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.png';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.gif';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
$icon = $appPath . '/img/' . $image . '.jpg';
|
||||
if (file_exists($icon)) {
|
||||
return $icon;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ namespace OCA\Theming\Tests\Controller;
|
|||
|
||||
use OCA\Theming\Controller\ThemingController;
|
||||
use OCA\Theming\Util;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\Files\IRootFolder;
|
||||
|
|
@ -55,6 +56,8 @@ class ThemingControllerTest extends TestCase {
|
|||
private $rootFolder;
|
||||
/** @var ITempManager */
|
||||
private $tempManager;
|
||||
/** @var IAppManager */
|
||||
private $appManager;
|
||||
|
||||
public function setUp() {
|
||||
$this->request = $this->getMockBuilder('OCP\IRequest')->getMock();
|
||||
|
|
@ -66,7 +69,8 @@ class ThemingControllerTest extends TestCase {
|
|||
->getMock();
|
||||
$this->l10n = $this->getMockBuilder('OCP\IL10N')->getMock();
|
||||
$this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock();
|
||||
$this->util = new Util($this->config, $this->rootFolder);
|
||||
$this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock();
|
||||
$this->util = new Util($this->config, $this->rootFolder, $this->appManager);
|
||||
$this->timeFactory->expects($this->any())
|
||||
->method('getTime')
|
||||
->willReturn(123);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ namespace OCA\Theming\Tests;
|
|||
use OCA\Theming\IconBuilder;
|
||||
use OCA\Theming\ThemingDefaults;
|
||||
use OCA\Theming\Util;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Http\NotFoundResponse;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\IConfig;
|
||||
|
|
@ -42,6 +43,8 @@ class IconBuilderTest extends TestCase {
|
|||
protected $util;
|
||||
/** @var IconBuilder */
|
||||
protected $iconBuilder;
|
||||
/** @var IAppManager */
|
||||
protected $appManager;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
|
@ -50,7 +53,8 @@ class IconBuilderTest extends TestCase {
|
|||
$this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock();
|
||||
$this->themingDefaults = $this->getMockBuilder('OCA\Theming\ThemingDefaults')
|
||||
->disableOriginalConstructor()->getMock();
|
||||
$this->util = new Util($this->config, $this->rootFolder);
|
||||
$this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock();
|
||||
$this->util = new Util($this->config, $this->rootFolder, $this->appManager);
|
||||
$this->iconBuilder = new IconBuilder($this->themingDefaults, $this->util);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
namespace OCA\Theming\Tests;
|
||||
|
||||
use OCA\Theming\Util;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\IConfig;
|
||||
use OCP\Files\IRootFolder;
|
||||
use Test\TestCase;
|
||||
|
|
@ -35,12 +36,15 @@ class UtilTest extends TestCase {
|
|||
protected $config;
|
||||
/** @var IRootFolder */
|
||||
protected $rootFolder;
|
||||
/** @var IAppManager */
|
||||
protected $appManager;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
|
||||
$this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock();
|
||||
$this->util = new Util($this->config, $this->rootFolder);
|
||||
$this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock();
|
||||
$this->util = new Util($this->config, $this->rootFolder, $this->appManager);
|
||||
}
|
||||
|
||||
public function testInvertTextColorLight() {
|
||||
|
|
@ -108,6 +112,10 @@ class UtilTest extends TestCase {
|
|||
* @dataProvider dataGetAppIcon
|
||||
*/
|
||||
public function testGetAppIcon($app, $expected) {
|
||||
$this->appManager->expects($this->once())
|
||||
->method('getAppPath')
|
||||
->with($app)
|
||||
->willReturn(\OC_App::getAppPath($app));
|
||||
$icon = $this->util->getAppIcon($app);
|
||||
$this->assertEquals($expected, $icon);
|
||||
}
|
||||
|
|
@ -134,6 +142,12 @@ class UtilTest extends TestCase {
|
|||
* @dataProvider dataGetAppImage
|
||||
*/
|
||||
public function testGetAppImage($app, $image, $expected) {
|
||||
if($app !== 'core') {
|
||||
$this->appManager->expects($this->once())
|
||||
->method('getAppPath')
|
||||
->with($app)
|
||||
->willReturn(\OC_App::getAppPath($app));
|
||||
}
|
||||
$this->assertEquals($expected, $this->util->getAppImage($app, $image));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue