Keep byline author and channel id a matched pair

Follow-up to the initial fix: when the first byline run has no browse
id, the previous change substituted ucid from a later run while the
displayed author name still came from run zero, so the card could show
one channel's name linked to another channel. Take author text and
browse id together from the first run that carries a link instead.

Single-creator bylines are unaffected: the fallback still only runs
when ucid is empty.

Fixes #5722
This commit is contained in:
csjad 2026-09-19 12:16:18 +08:00
parent 864af0274a
commit e1cfb5c73e

View File

@ -31,10 +31,15 @@ module Invidious::Videos::Parser
# Multi-creator ("collab") videos split the byline into several runs and
# the channel link isn't always attached to the first one, which left
# ucid empty and the related-video card without an author hyperlink (#5722).
# Scan every byline run for a browse id instead of only the first one.
# Fall back to the first run that carries a browse id, keeping author and
# ucid a matched pair so the displayed name always matches the linked channel.
if ucid.try(&.empty?) && (byline_runs = (related["shortBylineText"]? || related["longBylineText"]?)
.try &.dig?("runs").try &.as_a)
ucid = byline_runs.map { |run| HelperExtractors.get_browse_id(run) }.find { |id| !id.empty? }
matched = byline_runs.find { |run| !HelperExtractors.get_browse_id(run).empty? }
if matched
author = matched.dig?("text")
ucid = HelperExtractors.get_browse_id(matched)
end
end
short_view_count = related.try do |r|