Skip to content

Commit

Permalink
Fix too many file download notifications when watching a video
Browse files Browse the repository at this point in the history
Signed-off-by: szaimen <[email protected]>
  • Loading branch information
szaimen committed Mar 7, 2022
1 parent a9117d4 commit ccd0887
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 14 deletions.
13 changes: 10 additions & 3 deletions apps/files_sharing/lib/Activity/Providers/Base.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -51,6 +52,9 @@ abstract class Base implements IProvider {
/** @var IUserManager */
protected $userManager;

/** @var IEventMerger */
protected $eventMerger;

/** @var IContactsManager */
protected $contactsManager;

Expand All @@ -65,13 +69,15 @@ public function __construct(IFactory $languageFactory,
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;
}

/**
Expand All @@ -97,7 +103,7 @@ public function parse($language, IEvent $event, IEvent $previousEvent = null) {
}
}

return $this->parseLongVersion($event);
return $this->parseLongVersion($event, $previousEvent);
}

/**
Expand All @@ -110,11 +116,12 @@ abstract protected function parseShortVersion(IEvent $event);

/**
* @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
Expand Down
25 changes: 22 additions & 3 deletions apps/files_sharing/lib/Activity/Providers/Downloads.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,19 +63,28 @@ public function parseShortVersion(IEvent $event) {

/**
* @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();
}
Expand All @@ -85,7 +94,6 @@ public function parseLongVersion(IEvent $event) {
} else {
$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
}
$this->setSubjects($event, $subject, $parsedParameters);

return $event;
}
Expand All @@ -102,6 +110,17 @@ protected function getParsedParameters(IEvent $event) {
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),
];
Expand Down
7 changes: 5 additions & 2 deletions apps/files_sharing/lib/Activity/Providers/Groups.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -55,8 +56,9 @@ public function __construct(IFactory $languageFactory,
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;
}

Expand Down Expand Up @@ -95,11 +97,12 @@ public function parseShortVersion(IEvent $event) {

/**
* @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) {
Expand Down
3 changes: 2 additions & 1 deletion apps/files_sharing/lib/Activity/Providers/PublicLinks.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,12 @@ public function parseShortVersion(IEvent $event) {

/**
* @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) {
Expand Down
10 changes: 6 additions & 4 deletions apps/files_sharing/lib/Activity/Providers/RemoteShares.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -42,10 +43,10 @@ public function __construct(IFactory $languageFactory,
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);
}

/**
Expand Down Expand Up @@ -77,11 +78,12 @@ public function parseShortVersion(IEvent $event) {

/**
* @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) {
Expand Down
3 changes: 2 additions & 1 deletion apps/files_sharing/lib/Activity/Providers/Users.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,12 @@ public function parseShortVersion(IEvent $event) {

/**
* @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) {
Expand Down
6 changes: 6 additions & 0 deletions apps/files_sharing/lib/Controller/ShareController.php
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,10 @@ protected function singleFileDownloaded(Share\IShare $share, \OCP\Files\Node $no
$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];

Expand All @@ -742,8 +746,10 @@ protected function singleFileDownloaded(Share\IShare $share, \OCP\Files\Node $no
} 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;
}
}

Expand Down

0 comments on commit ccd0887

Please sign in to comment.