diff --git a/.gitignore b/.gitignore index 8ea6abea..d0abaa0f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /build /node_modules /vendor/ - +.idea/ diff --git a/lib/Dashboard/RecommendationWidget.php b/lib/Dashboard/RecommendationWidget.php index 614b52f1..44ec9bc0 100644 --- a/lib/Dashboard/RecommendationWidget.php +++ b/lib/Dashboard/RecommendationWidget.php @@ -1,4 +1,7 @@ * @@ -24,21 +27,41 @@ namespace OCA\Recommendations\Dashboard; use OCA\Recommendations\AppInfo\Application; +use OCA\Recommendations\Service\IRecommendation; +use OCA\Recommendations\Service\RecommendationService; +use OCP\Dashboard\IAPIWidget; +use OCP\Dashboard\IIconWidget; use OCP\Dashboard\IWidget; +use OCP\Dashboard\Model\WidgetItem; +use OCP\Files\IMimeTypeDetector; use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\IUserManager; use OCP\IUserSession; use OCP\Util; -class RecommendationWidget implements IWidget { +class RecommendationWidget implements IWidget, IIconWidget, IAPIWidget { private IUserSession $userSession; private IL10N $l10n; + private IURLGenerator $urlGenerator; + private IMimeTypeDetector $mimeTypeDetector; + private RecommendationService $recommendationService; + private IUserManager $userManager; public function __construct( IUserSession $userSession, - IL10N $l10n + IL10N $l10n, + IURLGenerator $urlGenerator, + IMimeTypeDetector $mimeTypeDetector, + RecommendationService $recommendationService, + IUserManager $userManager ) { $this->userSession = $userSession; $this->l10n = $l10n; + $this->urlGenerator = $urlGenerator; + $this->mimeTypeDetector = $mimeTypeDetector; + $this->recommendationService = $recommendationService; + $this->userManager = $userManager; } public function getId(): string { @@ -57,6 +80,10 @@ public function getIconClass(): string { return 'icon-files-dark'; } + public function getIconUrl(): string { + return $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('files', 'app.svg')); + } + public function getUrl(): ?string { return null; } @@ -68,4 +95,39 @@ public function load(): void { } Util::addScript(Application::APP_ID, 'files_recommendation-dashboard'); } + + public function getItems(string $userId, ?string $since = null, int $limit = 7): array { + $user = $this->userManager->get($userId); + if (!$user) { + return []; + } + $recommendations = $this->recommendationService->getRecommendations($user, $limit); + + return array_map(function (IRecommendation $recommendation) { + $url = $this->urlGenerator->linkToRouteAbsolute( + 'files.viewcontroller.showFile', ['fileid' => $recommendation->getNode()->getId()] + ); + + if ($recommendation->hasPreview()) { + $icon = $this->urlGenerator->linkToRouteAbsolute('core.Preview.getPreviewByFileId', [ + 'x' => 256, + 'y' => 256, + 'fileId' => $recommendation->getNode()->getId(), + 'c' => $recommendation->getNode()->getEtag(), + ]); + } else { + $icon = $this->urlGenerator->getAbsoluteURL( + $this->mimeTypeDetector->mimeTypeIcon($recommendation->getNode()->getMimetype()) + ); + } + + return new WidgetItem( + $recommendation->getNode()->getName(), + '', + $url, + $icon, + (string)$recommendation->getTimestamp() + ); + }, $recommendations); + } }