]> source.dussan.org Git - nextcloud-server.git/commitdiff
Use rich objects instead of name, link and icon
authorJoas Schilling <coding@schilljs.com>
Thu, 14 Mar 2019 11:30:34 +0000 (12:30 +0100)
committerJulius Härtl <jus@bitgrid.net>
Tue, 19 Mar 2019 12:06:55 +0000 (13:06 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
apps/files/lib/Collaboration/Resources/ResourceProvider.php
core/Controller/CollaborationResourcesController.php
lib/private/Collaboration/Resources/Manager.php
lib/private/Collaboration/Resources/Resource.php
lib/public/Collaboration/Resources/IProvider.php
lib/public/Collaboration/Resources/IResource.php

index 27b155b7641b361e6cd66e3c9d76dab724e787b7..f29c99abc9635437cee235faaab1c4a318cd9d03 100644 (file)
@@ -25,26 +25,32 @@ namespace OCA\Files\Collaboration\Resources;
 
 use OCP\Collaboration\Resources\IProvider;
 use OCP\Collaboration\Resources\IResource;
+use OCP\Collaboration\Resources\ResourceException;
 use OCP\Files\IRootFolder;
 use OCP\Files\Node;
+use OCP\IPreview;
 use OCP\IURLGenerator;
 use OCP\IUser;
 
 class ResourceProvider implements IProvider {
 
-       const RESOURCE_TYPE = 'files';
+       public const RESOURCE_TYPE = 'file';
 
        /** @var IRootFolder */
        protected $rootFolder;
-
+       /** @var IPreview */
+       private $preview;
        /** @var IURLGenerator */
        private $urlGenerator;
 
        /** @var array */
        protected $nodes = [];
 
-       public function __construct(IRootFolder $rootFolder, IURLGenerator $urlGenerator) {
+       public function __construct(IRootFolder $rootFolder,
+                                                               IPreview $preview,
+                                                               IURLGenerator $urlGenerator) {
                $this->rootFolder = $rootFolder;
+               $this->preview = $preview;
                $this->urlGenerator = $urlGenerator;
        }
 
@@ -61,21 +67,34 @@ class ResourceProvider implements IProvider {
        }
 
        /**
-        * Get the display name of a resource
-        *
         * @param IResource $resource
-        * @return string
+        * @return array
         * @since 16.0.0
         */
-       public function getName(IResource $resource): string {
+       public function getResourceRichObject(IResource $resource): array {
                if (isset($this->nodes[(int) $resource->getId()])) {
-                       return $this->nodes[(int) $resource->getId()]->getPath();
+                       $node = $this->nodes[(int) $resource->getId()]->getPath();
+               } else {
+                       $node = $this->getNode($resource);
                }
-               $node = $this->getNode($resource);
-               if ($node) {
-                       return $node->getName();
+
+               if ($node instanceof Node) {
+                       $link = $this->urlGenerator->linkToRouteAbsolute(
+                               'files.viewcontroller.showFile',
+                               ['fileid' => $resource->getId()]
+                       );
+                       return [
+                               'type' => 'file',
+                               'id' => $resource->getId(),
+                               'name' => $node->getName(),
+                               'path' => $node->getInternalPath(),
+                               'link' => $link,
+                               'mimetype' => $node->getMimetype(),
+                               'preview-available' => $this->preview->isAvailable($node),
+                       ];
                }
-               return '';
+
+               throw new ResourceException('File not found');
        }
 
        /**
@@ -102,25 +121,6 @@ class ResourceProvider implements IProvider {
                return false;
        }
 
-       /**
-        * Get the icon class of a resource
-        *
-        * @param IResource $resource
-        * @return string
-        * @since 16.0.0
-        */
-       public function getIconLink(IResource $resource): string {
-               $node = $this->getNode($resource);
-               if ($node && $node->getMimetype() === 'httpd/unix-directory') {
-                       return $this->urlGenerator->getAbsoluteURL(
-                               $this->urlGenerator->imagePath('core', 'places/files')
-                       );
-               }
-               return $this->urlGenerator->getAbsoluteURL(
-                       $this->urlGenerator->imagePath('core', 'filetypes/file')
-               );
-       }
-
        /**
         * Get the resource type of the provider
         *
@@ -130,15 +130,4 @@ class ResourceProvider implements IProvider {
        public function getType(): string {
                return self::RESOURCE_TYPE;
        }
-
-       /**
-        * Get the link to a resource
-        *
-        * @param IResource $resource
-        * @return string
-        * @since 16.0.0
-        */
-       public function getLink(IResource $resource): string {
-               return $this->urlGenerator->linkToRoute('files.viewcontroller.showFile', ['fileid' => $resource->getId()]);
-       }
 }
index 3699746f735dee0f0d5ad2536a36fa76c1eb91d9..0697444555ca0b0fe79146560d8834c1515b0495 100644 (file)
@@ -241,12 +241,6 @@ class CollaborationResourcesController extends OCSController {
                        return null;
                }
 
-               return [
-                       'type' => $resource->getType(),
-                       'id' => $resource->getId(),
-                       'name' => $resource->getName(),
-                       'iconLink' => $resource->getIconLink(),
-                       'link' => $resource->getLink(),
-               ];
+               return $resource->getRichObject();
        }
 }
index d1b84f9628367b34e213d9d4dcedafcfb2e1ad9a..bfe95a74514fad3978e55c95572f46cad26d4420 100644 (file)
@@ -285,41 +285,23 @@ class Manager implements IManager {
        }
 
        /**
-        * Get the display name of a resource
+        * Get the rich object data of a resource
         *
         * @param IResource $resource
-        * @return string
+        * @return array
         * @since 16.0.0
         */
-       public function getName(IResource $resource): string {
-               foreach ($this->getProviders() as $provider) {
-                       if ($provider->getType() === $resource->getType()) {
-                               try {
-                                       return $provider->getName($resource);
-                               } catch (ResourceException $e) {
-                               }
-                       }
-               }
-
-               return '';
-       }
-
-       /**
-        *
-        * @param IResource $resource
-        * @return string
-        */
-       public function getIconLink(IResource $resource): string {
+       public function getResourceRichObject(IResource $resource): array {
                foreach ($this->getProviders() as $provider) {
                        if ($provider->getType() === $resource->getType()) {
                                try {
-                                       return $provider->getIconLink($resource);
+                                       return $provider->getResourceRichObject($resource);
                                } catch (ResourceException $e) {
                                }
                        }
                }
 
-               return '';
+               return [];
        }
 
        /**
@@ -541,24 +523,4 @@ class Manager implements IManager {
        public function getType(): string {
                return '';
        }
-
-       /**
-        * Get the link to a resource
-        *
-        * @param IResource $resource
-        * @return string
-        * @since 16.0.0
-        */
-       public function getLink(IResource $resource): string {
-               foreach ($this->getProviders() as $provider) {
-                       if ($provider->getType() === $resource->getType()) {
-                               try {
-                                       return $provider->getLink($resource);
-                               } catch (ResourceException $e) {
-                               }
-                       }
-               }
-
-               return '';
-       }
 }
index 0a3c003b27cff3b2ff037b501b09eeaf5c8b131f..038f1d6162d746430d05bf993812eb9e24684eec 100644 (file)
@@ -49,14 +49,8 @@ class Resource implements IResource {
        /** @var bool|null */
        protected $access;
 
-       /** @var string|null */
-       protected $name;
-
-       /** @var string|null */
-       protected $iconClass;
-
-       /** @var string|null */
-       protected $link;
+       /** @var array|null */
+       protected $data;
 
        public function __construct(
                IManager $manager,
@@ -91,35 +85,15 @@ class Resource implements IResource {
        }
 
        /**
-        * @return string
+        * @return array
         * @since 16.0.0
         */
-       public function getName(): string {
-               if ($this->name === null) {
-                       $this->name = $this->manager->getName($this);
-               }
-
-               return $this->name;
-       }
-
-       /**
-        * @return string
-        * @since 16.0.0
-        */
-       public function getIconLink(): string {
-               if ($this->iconClass === null) {
-                       $this->iconClass = $this->manager->getIconLink($this);
-               }
-
-               return $this->iconClass;
-       }
-
-       public function getLink(): string {
-               if ($this->link === null) {
-                       $this->link = $this->manager->getLink($this);
+       public function getRichObject(): array {
+               if ($this->data === null) {
+                       $this->data = $this->manager->getResourceRichObject($this);
                }
 
-               return $this->link;
+               return $this->data;
        }
 
        /**
index 16ab16c0d1b8ecf8bebbffb25406442435640932..c091ecaa8d53188d39ab46f6b4af033e5f4efdf2 100644 (file)
@@ -38,31 +38,13 @@ interface IProvider {
        public function getType(): string;
 
        /**
-        * Get the display name of a resource
+        * Get the rich object data of a resource
         *
         * @param IResource $resource
-        * @return string
-        * @since 16.0.0
-        */
-       public function getName(IResource $resource): string;
-
-       /**
-        * Get the icon class of a resource
-        *
-        * @param IResource $resource
-        * @return string
-        * @since 16.0.0
-        */
-       public function getIconLink(IResource $resource): string;
-
-       /**
-        * Get the link to a resource
-        *
-        * @param IResource $resource
-        * @return string
+        * @return array
         * @since 16.0.0
         */
-       public function getLink(IResource $resource): string;
+       public function getResourceRichObject(IResource $resource): array;
 
        /**
         * Can a user/guest access the collection
index 0a3e36a33ce0bc19fac813e8321c7dd198b03884..32567a3be0aeff8bf53c5f0564058033c60b14dc 100644 (file)
@@ -42,23 +42,10 @@ interface IResource {
        public function getId(): string;
 
        /**
-        * @return string
-        * @since 16.0.0
-        */
-       public function getName(): string;
-
-       /**
-        * Absolute link to an icon to represent the resource
-        * @return string
-        * @since 16.0.0
-        */
-       public function getIconLink(): string;
-
-       /**
-        * @return string
+        * @return array
         * @since 16.0.0
         */
-       public function getLink(): string;
+       public function getRichObject(): array;
 
        /**
         * Can a user/guest access the resource