summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/reader/processor/processor.go14
-rw-r--r--internal/storage/entry.go17
2 files changed, 16 insertions, 15 deletions
diff --git a/internal/reader/processor/processor.go b/internal/reader/processor/processor.go
index ab4448ef..eb2e2f9d 100644
--- a/internal/reader/processor/processor.go
+++ b/internal/reader/processor/processor.go
@@ -251,6 +251,11 @@ func getUrlFromEntry(feed *model.Feed, entry *model.Entry) string {
}
func updateEntryReadingTime(store *storage.Storage, feed *model.Feed, entry *model.Entry, entryIsNew bool, user *model.User) {
+ if !user.ShowReadingTime {
+ slog.Debug("Skip reading time estimation for this user", slog.Int64("user_id", user.ID))
+ return
+ }
+
if shouldFetchYouTubeWatchTime(entry) {
if entryIsNew {
watchTime, err := fetchYouTubeWatchTime(entry.URL)
@@ -266,7 +271,7 @@ func updateEntryReadingTime(store *storage.Storage, feed *model.Feed, entry *mod
}
entry.ReadingTime = watchTime
} else {
- entry.ReadingTime = store.GetReadTime(entry, feed)
+ entry.ReadingTime = store.GetReadTime(feed.ID, entry.Hash)
}
}
@@ -285,14 +290,13 @@ func updateEntryReadingTime(store *storage.Storage, feed *model.Feed, entry *mod
}
entry.ReadingTime = watchTime
} else {
- entry.ReadingTime = store.GetReadTime(entry, feed)
+ entry.ReadingTime = store.GetReadTime(feed.ID, entry.Hash)
}
}
+
// Handle YT error case and non-YT entries.
if entry.ReadingTime == 0 {
- if user.ShowReadingTime {
- entry.ReadingTime = readingtime.EstimateReadingTime(entry.Content, user.DefaultReadingSpeed, user.CJKReadingSpeed)
- }
+ entry.ReadingTime = readingtime.EstimateReadingTime(entry.Content, user.DefaultReadingSpeed, user.CJKReadingSpeed)
}
}
diff --git a/internal/storage/entry.go b/internal/storage/entry.go
index 867338f7..f22a424b 100644
--- a/internal/storage/entry.go
+++ b/internal/storage/entry.go
@@ -231,24 +231,21 @@ func (s *Storage) IsNewEntry(feedID int64, entryHash string) bool {
return !result
}
-// GetReadTime fetches the read time of an entry based on its hash, and the feed id and user id from the feed.
-// It's intended to be used on entries objects created by parsing a feed as they don't contain much information.
-// The feed param helps to scope the search to a specific user and feed in order to avoid hash clashes.
-func (s *Storage) GetReadTime(entry *model.Entry, feed *model.Feed) int {
+func (s *Storage) GetReadTime(feedID int64, entryHash string) int {
var result int
+
+ // Note: This query uses entries_feed_id_hash_key index
s.db.QueryRow(
`SELECT
reading_time
FROM
entries
WHERE
- user_id=$1 AND
- feed_id=$2 AND
- hash=$3
+ feed_id=$1 AND
+ hash=$2
`,
- feed.UserID,
- feed.ID,
- entry.Hash,
+ feedID,
+ entryHash,
).Scan(&result)
return result
}