From ccd08877e803be1281b6c9325219e862c1995f9c Mon Sep 17 00:00:00 2001 From: szaimen Date: Thu, 29 Jul 2021 08:57:31 +0200 Subject: Fix too many file download notifications when watching a video Signed-off-by: szaimen --- apps/files_sharing/lib/Activity/Providers/Base.php | 13 ++++++++--- .../lib/Activity/Providers/Downloads.php | 25 +++++++++++++++++++--- .../lib/Activity/Providers/Groups.php | 7 ++++-- .../lib/Activity/Providers/PublicLinks.php | 3 ++- .../lib/Activity/Providers/RemoteShares.php | 10 +++++---- .../files_sharing/lib/Activity/Providers/Users.php | 3 ++- .../lib/Controller/ShareController.php | 6 ++++++ 7 files changed, 53 insertions(+), 14 deletions(-) (limited to 'apps/files_sharing/lib') diff --git a/apps/files_sharing/lib/Activity/Providers/Base.php b/apps/files_sharing/lib/Activity/Providers/Base.php index e61bdffadcd..cbd16c134cc 100644 --- a/apps/files_sharing/lib/Activity/Providers/Base.php +++ b/apps/files_sharing/lib/Activity/Providers/Base.php @@ -24,6 +24,7 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; +use OCP\Activity\IEventMerger; use OCP\Activity\IManager; use OCP\Activity\IProvider; use OCP\Contacts\IManager as IContactsManager; @@ -51,6 +52,9 @@ abstract class Base implements IProvider { /** @var IUserManager */ protected $userManager; + /** @var IEventMerger */ + protected $eventMerger; + /** @var IContactsManager */ protected $contactsManager; @@ -65,13 +69,15 @@ abstract class Base implements IProvider { IManager $activityManager, IUserManager $userManager, ICloudIdManager $cloudIdManager, - IContactsManager $contactsManager) { + IContactsManager $contactsManager, + IEventMerger $eventMerger) { $this->languageFactory = $languageFactory; $this->url = $url; $this->activityManager = $activityManager; $this->userManager = $userManager; $this->cloudIdManager = $cloudIdManager; $this->contactsManager = $contactsManager; + $this->eventMerger = $eventMerger; } /** @@ -97,7 +103,7 @@ abstract class Base implements IProvider { } } - return $this->parseLongVersion($event); + return $this->parseLongVersion($event, $previousEvent); } /** @@ -110,11 +116,12 @@ abstract class Base implements IProvider { /** * @param IEvent $event + * @param IEvent|null $previousEvent * @return IEvent * @throws \InvalidArgumentException * @since 11.0.0 */ - abstract protected function parseLongVersion(IEvent $event); + abstract protected function parseLongVersion(IEvent $event, IEvent $previousEvent = null); /** * @param IEvent $event diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php index a6bbe9a4118..8152e0b0885 100644 --- a/apps/files_sharing/lib/Activity/Providers/Downloads.php +++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php @@ -63,19 +63,28 @@ class Downloads extends Base { /** * @param IEvent $event + * @param IEvent|null $previousEvent * @return IEvent * @throws \InvalidArgumentException * @since 11.0.0 */ - public function parseLongVersion(IEvent $event) { + public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED || $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { - $subject = $this->l->t('{file} downloaded via public link'); + if (!isset($parsedParameters['remote-address-hash']['type'])) { + $subject = $this->l->t('{file} downloaded via public link'); + $this->setSubjects($event, $subject, $parsedParameters); + } else { + $subject = $this->l->t('{file} downloaded via public link'); + $this->setSubjects($event, $subject, $parsedParameters); + $event = $this->eventMerger->mergeEvents('file', $event, $previousEvent); + } } elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED || $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { $subject = $this->l->t('{email} downloaded {file}'); + $this->setSubjects($event, $subject, $parsedParameters); } else { throw new \InvalidArgumentException(); } @@ -85,7 +94,6 @@ class Downloads extends Base { } else { $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); } - $this->setSubjects($event, $subject, $parsedParameters); return $event; } @@ -102,6 +110,17 @@ class Downloads extends Base { switch ($subject) { case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED: case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED: + if (isset($parameters[1])) { + return [ + 'file' => $this->getFile($parameters[0], $event), + 'remote-address-hash' => [ + 'type' => 'highlight', + 'id' => $parameters[1], + 'name' => $parameters[1], + 'link' => '', + ], + ]; + } return [ 'file' => $this->getFile($parameters[0], $event), ]; diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php index 71b1dc65f56..b9cc2e6b579 100644 --- a/apps/files_sharing/lib/Activity/Providers/Groups.php +++ b/apps/files_sharing/lib/Activity/Providers/Groups.php @@ -25,6 +25,7 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; +use OCP\Activity\IEventMerger; use OCP\Activity\IManager; use OCP\Contacts\IManager as IContactsManager; use OCP\Federation\ICloudIdManager; @@ -55,8 +56,9 @@ class Groups extends Base { IUserManager $userManager, ICloudIdManager $cloudIdManager, IContactsManager $contactsManager, + IEventMerger $eventMerger, IGroupManager $groupManager) { - parent::__construct($languageFactory, $url, $activityManager, $userManager, $cloudIdManager, $contactsManager); + parent::__construct($languageFactory, $url, $activityManager, $userManager, $cloudIdManager, $contactsManager, $eventMerger); $this->groupManager = $groupManager; } @@ -95,11 +97,12 @@ class Groups extends Base { /** * @param IEvent $event + * @param IEvent|null $previousEvent * @return IEvent * @throws \InvalidArgumentException * @since 11.0.0 */ - public function parseLongVersion(IEvent $event) { + public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) { diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php index 5782166704f..c09b9baa951 100644 --- a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php +++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php @@ -70,11 +70,12 @@ class PublicLinks extends Base { /** * @param IEvent $event + * @param IEvent|null $previousEvent * @return IEvent * @throws \InvalidArgumentException * @since 11.0.0 */ - public function parseLongVersion(IEvent $event) { + public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) { diff --git a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php index 29f7c0a298e..f1cc90f5e65 100644 --- a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php +++ b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php @@ -25,6 +25,7 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; +use OCP\Activity\IEventMerger; use OCP\Activity\IManager; use OCP\Contacts\IManager as IContactsManager; use OCP\Federation\ICloudIdManager; @@ -42,10 +43,10 @@ class RemoteShares extends Base { IURLGenerator $url, IManager $activityManager, IUserManager $userManager, + ICloudIdManager $cloudIdManager, IContactsManager $contactsManager, - ICloudIdManager $cloudIdManager - ) { - parent::__construct($languageFactory, $url, $activityManager, $userManager, $cloudIdManager, $contactsManager); + IEventMerger $eventMerger) { + parent::__construct($languageFactory, $url, $activityManager, $userManager, $cloudIdManager, $contactsManager, $eventMerger); } /** @@ -77,11 +78,12 @@ class RemoteShares extends Base { /** * @param IEvent $event + * @param IEvent|null $previousEvent * @return IEvent * @throws \InvalidArgumentException * @since 11.0.0 */ - public function parseLongVersion(IEvent $event) { + public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_RECEIVED) { diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php index 8b90ac8ee9d..ce873eb5f77 100644 --- a/apps/files_sharing/lib/Activity/Providers/Users.php +++ b/apps/files_sharing/lib/Activity/Providers/Users.php @@ -86,11 +86,12 @@ class Users extends Base { /** * @param IEvent $event + * @param IEvent|null $previousEvent * @return IEvent * @throws \InvalidArgumentException * @since 11.0.0 */ - public function parseLongVersion(IEvent $event) { + public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) { diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index 614dae7ffba..411873c9c86 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -729,6 +729,10 @@ class ShareController extends AuthPublicShareController { $ownerFolder = $this->rootFolder->getUserFolder($share->getShareOwner()); $userPath = $userFolder->getRelativePath($userNode->getPath()); $ownerPath = $ownerFolder->getRelativePath($node->getPath()); + $remoteAddress = $this->request->getRemoteAddress(); + $dateTime = new \DateTime(); + $dateTime = $dateTime->format('Y-m-d H'); + $remoteAddressHash = md5($dateTime . '-' . $remoteAddress); $parameters = [$userPath]; @@ -742,8 +746,10 @@ class ShareController extends AuthPublicShareController { } else { if ($node instanceof \OCP\Files\File) { $subject = Downloads::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED; + $parameters[] = $remoteAddressHash; } else { $subject = Downloads::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED; + $parameters[] = $remoteAddressHash; } } -- cgit v1.2.3