From a3c531c31e4915a230b2d4f2374b2aeee1fb1724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 13 Mar 2025 16:37:16 +0100 Subject: [PATCH] fix: Avoid triggering several activities for Range request on the same file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoids flooding activities when someone browse a video in the web player. Signed-off-by: Côme Chilliet --- .../lib/Listener/BeforeNodeReadListener.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php b/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php index 087b76554f5..a4f87467ce0 100644 --- a/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php +++ b/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php @@ -22,7 +22,7 @@ use OCP\Files\Storage\ISharedStorage; use OCP\ICache; use OCP\ICacheFactory; use OCP\IRequest; -use OCP\IUserSession; +use OCP\ISession; use OCP\Share\IShare; /** @@ -32,7 +32,7 @@ class BeforeNodeReadListener implements IEventListener { private ICache $cache; public function __construct( - private IUserSession $userSession, + private ISession $session, private IRootFolder $rootFolder, private \OCP\Activity\IManager $activityManager, private IRequest $request, @@ -113,6 +113,14 @@ class BeforeNodeReadListener implements IEventListener { return; } + /* Avoid publishing several activities for one video playing */ + $cacheKey = $node->getId() . $node->getPath(); + if (($this->request->getHeader('range') !== '') && ($this->cache->get($cacheKey) == $this->session->getId())) { + /* This is a range request and an activity for the same file was published in the same session */ + return; + } + $this->cache->set($cacheKey, $this->session->getId(), 3600); + $this->singleFileDownloaded($share, $node); }