From d24b703315e6c4a41d83f3f1b0c91ba4bdc25750 Mon Sep 17 00:00:00 2001 From: Andrea Decorte Date: Sun, 7 Sep 2025 22:27:08 +0200 Subject: [PATCH] Extract user reading time logic in a single place Extract user reading time computation in a single place under Entry to avoid duplication. This will also fix reading time computation for short entries. RuleTagger logic is slightly changed as we will round when filtering, which will be consistent with frontend display. --- src/Wallabag/CoreBundle/Entity/Entry.php | 8 ++++++++ src/Wallabag/CoreBundle/Helper/EntriesExport.php | 4 ++-- src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php | 2 +- .../Resources/views/Entry/_reading_time.html.twig | 4 ++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php index 5a00c0dbe..225e55fcf 100644 --- a/src/Wallabag/CoreBundle/Entity/Entry.php +++ b/src/Wallabag/CoreBundle/Entity/Entry.php @@ -658,6 +658,14 @@ class Entry $this->readingTime = $readingTime; } + /** + * @return float + */ + public function getUserReadingTime() + { + return round($this->readingTime / $this->getUser()->getConfig()->getReadingSpeed() * 200); + } + /** * @return string */ diff --git a/src/Wallabag/CoreBundle/Helper/EntriesExport.php b/src/Wallabag/CoreBundle/Helper/EntriesExport.php index 350a396f8..0273f21e6 100644 --- a/src/Wallabag/CoreBundle/Helper/EntriesExport.php +++ b/src/Wallabag/CoreBundle/Helper/EntriesExport.php @@ -210,7 +210,7 @@ class EntriesExport $publishedDate = $entry->getPublishedAt()->format('Y-m-d'); } - $readingTime = round($entry->getReadingTime() / $user->getConfig()->getReadingSpeed() * 200); + $readingTime = $entry->getUserReadingTime(); $titlepage = $content_start . '

' . $entry->getTitle() . '

' . @@ -331,7 +331,7 @@ class EntriesExport $authors = implode(',', $publishedBy); } - $readingTime = $entry->getReadingTime() / $user->getConfig()->getReadingSpeed() * 200; + $readingTime = $entry->getUserReadingTime(); $pdf->addPage(); $html = '

' . $entry->getTitle() . '

' . diff --git a/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php b/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php index 4014c68e7..cbdf60bd7 100644 --- a/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php +++ b/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php @@ -133,7 +133,7 @@ class RuleBasedTagger private function fixEntry(Entry $entry) { $clonedEntry = clone $entry; - $clonedEntry->setReadingTime($entry->getReadingTime() / $entry->getUser()->getConfig()->getReadingSpeed() * 200); + $clonedEntry->setReadingTime($entry->getUserReadingTime()); return $clonedEntry; } diff --git a/src/Wallabag/CoreBundle/Resources/views/Entry/_reading_time.html.twig b/src/Wallabag/CoreBundle/Resources/views/Entry/_reading_time.html.twig index 404f69377..daf6b08f0 100644 --- a/src/Wallabag/CoreBundle/Resources/views/Entry/_reading_time.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/Entry/_reading_time.html.twig @@ -1,7 +1,7 @@ -{% set reading_time = entry.readingTime / app.user.config.readingSpeed * 200 %} +{% set reading_time = entry.userReadingTime %} timer {% if reading_time > 0 %} - {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': reading_time|round}) }} + {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': reading_time}) }} {% else %} {{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }} {% endif %}