summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious/trending.cr19
-rw-r--r--src/invidious/yt_backend/extractors_utils.cr13
2 files changed, 24 insertions, 8 deletions
diff --git a/src/invidious/trending.cr b/src/invidious/trending.cr
index 74bab1bd..2d9f8a83 100644
--- a/src/invidious/trending.cr
+++ b/src/invidious/trending.cr
@@ -20,6 +20,21 @@ def fetch_trending(trending_type, region, locale)
items, _ = extract_items(initial_data)
- # Return items, but ignore categories (e.g featured content)
- return items.reject!(Category), plid
+ extracted = [] of SearchItem
+
+ items.each do |itm|
+ if itm.is_a?(Category)
+ # Ignore the smaller categories, as they generally contain a sponsored
+ # channel, which brings a lot of noise on the trending page.
+ # See: https://github.com/iv-org/invidious/issues/2989
+ next if itm.contents.size < 24
+
+ extracted.concat extract_category(itm)
+ else
+ extracted << itm
+ end
+ end
+
+ # Deduplicate items before returning results
+ return extracted.select(SearchVideo).uniq!(&.id), plid
end
diff --git a/src/invidious/yt_backend/extractors_utils.cr b/src/invidious/yt_backend/extractors_utils.cr
index b247dca8..11d95958 100644
--- a/src/invidious/yt_backend/extractors_utils.cr
+++ b/src/invidious/yt_backend/extractors_utils.cr
@@ -68,16 +68,17 @@ rescue ex
return false
end
-# This function extracts the SearchItems from a Category.
+# This function extracts SearchVideo items from a Category.
# Categories are commonly returned in search results and trending pages.
def extract_category(category : Category) : Array(SearchVideo)
- items = [] of SearchItem
+ return category.contents.select(SearchVideo)
+end
- category.contents.each do |item|
- target << cate_i if item.is_a?(SearchItem)
+# :ditto:
+def extract_category(category : Category, &)
+ category.contents.select(SearchVideo).each do |item|
+ yield item
end
-
- return items
end
def extract_selected_tab(tabs)