From f2ef46af2481b55cdbe42f83dedcce9c77b57dce Mon Sep 17 00:00:00 2001 From: privacyguy123 <50337995+privacyguy123@users.noreply.github.com> Date: Sat, 19 Sep 2026 20:20:27 +0100 Subject: [PATCH] fix: anchor lockup publication date labels --- spec/invidious/lockup_metadata_rows_spec.cr | 4 +++- src/invidious/yt_backend/extractors.cr | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/invidious/lockup_metadata_rows_spec.cr b/spec/invidious/lockup_metadata_rows_spec.cr index a9de11db0..8aa7efb56 100644 --- a/spec/invidious/lockup_metadata_rows_spec.cr +++ b/spec/invidious/lockup_metadata_rows_spec.cr @@ -30,6 +30,8 @@ Spectator.describe "lockup video metadata rows" do "normal first row" => %({"metadataRows":[{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"3 days ago"}}]}]}), "collaborators before video statistics" => %({"metadataRows":[{"metadataParts":[{"text":{"content":"Channel A and Channel B"}}]},{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"3 days ago"}}]}]}), "collaborator names containing statistic substrings" => %({"metadataRows":[{"metadataParts":[{"text":{"content":"Chicago Reviews"}},{"text":{"content":"Tech reviews"}}]},{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"3 days ago"}}]}]}), + "collaborator name ending in a relative date" => %({"metadataRows":[{"metadataParts":[{"text":{"content":"Channel 9 days ago"}}]},{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"3 days ago"}}]}]}), + "completed stream publication date" => %({"metadataRows":[{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"Streamed 3 days ago"}}]}]}), "views and publication date in separate rows" => %({"metadataRows":[{"metadataParts":[{"text":{"content":"1.5M views"}}]},{"metadataParts":[{"text":{"content":"3 days ago"}}]}]}), "missing and null metadata parts before statistics" => %({"metadataRows":[{},{"metadataParts":null},{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"3 days ago"}}]}]}), "icon labels before video statistics" => %({"metadataRows":[{"metadataParts":[{"icon":{},"text":{"content":"99 views"}},{"icon":{},"text":{"content":"9 days ago"}}]},{"metadataParts":[{"text":{"content":"1.5M views"}},{"text":{"content":"3 days ago"}}]}]}), @@ -49,7 +51,7 @@ Spectator.describe "lockup video metadata rows" do end end - sample({"{}", %({"metadataRows":[]}), %({"metadataRows":null}), %({"metadataRows":[{}, {"metadataParts":null}]})}) do |metadata| + sample({"{}", %({"metadataRows":[]}), %({"metadataRows":null}), %({"metadataRows":[{}, {"metadataParts":null}]}), %({"metadataRows":[{"metadataParts":[{"text":{"content":"Channel 9 days ago"}}]}]})}) do |metadata| it "keeps unknown statistics defaults" do before = Time.utc video = parse_item(lockup_video_with_metadata(metadata)).as(SearchVideo) diff --git a/src/invidious/yt_backend/extractors.cr b/src/invidious/yt_backend/extractors.cr index feb849acd..f11c00df0 100644 --- a/src/invidious/yt_backend/extractors.cr +++ b/src/invidious/yt_backend/extractors.cr @@ -667,7 +667,7 @@ private module Parsers view_count_text = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.matches?(/\A(?:\d+(?:[.,]\d+)*\s?[kKmMbB]?|No) views\z/) } .try &.dig("text", "content").as_s - published = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.matches?(/(?:\A|\s)\d+ ?[smhdwy]\w* ago\z/) } + published = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.matches?(/\A(?:Streamed )?\d+ ?[smhdwy]\w* ago\z/) } .try { |item| decode_date(item.dig("text", "content").as_s) } || Time.local view_count = short_text_to_number(view_count_text || "0")