fix(channels): fetch videos from redirected channel id, refresh premiere timestamps

Addresses review feedback: follow ChannelRedirect through to the videos tab request while keeping the DB row under the originally requested ID, and update premiere_timestamp on conflict now that InnerTube provides it.
This commit is contained in:
NDilanka 2026-08-22 10:06:45 +05:30
parent 43936283db
commit 8261a28478

View File

@ -161,10 +161,14 @@ def fetch_channel(ucid, pull_all_videos : Bool)
begin begin
about_channel = get_about_info(ucid) about_channel = get_about_info(ucid)
videos_ucid = ucid
rescue ex : ChannelRedirect rescue ex : ChannelRedirect
# Old-style UCIDs can be redirected to a new one by YouTube. The RSS # Old-style UCIDs can be redirected to a new one by YouTube. The RSS
# endpoint used to follow those redirects transparently. # endpoint used to follow those redirects transparently. Videos are
# fetched from the channel they actually live on, while the DB row
# keeps the originally requested ID to not break subscriptions.
about_channel = get_about_info(ex.channel_id) about_channel = get_about_info(ex.channel_id)
videos_ucid = ex.channel_id
end end
LOGGER.trace("fetch_channel: #{ucid} : author = #{about_channel.author}, auto_generated = #{about_channel.auto_generated}") LOGGER.trace("fetch_channel: #{ucid} : author = #{about_channel.author}, auto_generated = #{about_channel.auto_generated}")
@ -178,7 +182,7 @@ def fetch_channel(ucid, pull_all_videos : Bool)
}) })
LOGGER.trace("fetch_channel: #{ucid} : Downloading channel videos page") LOGGER.trace("fetch_channel: #{ucid} : Downloading channel videos page")
videos, continuation = IV::Channel::Tabs.get_videos(channel) videos, continuation = IV::Channel::Tabs.get_videos(about_channel.author, videos_ucid)
LOGGER.trace("fetch_channel: #{ucid} : Extracting videos from the channel videos tab") LOGGER.trace("fetch_channel: #{ucid} : Extracting videos from the channel videos tab")
videos.select(SearchVideo).each do |video| videos.select(SearchVideo).each do |video|
@ -197,7 +201,7 @@ def fetch_channel(ucid, pull_all_videos : Bool)
LOGGER.trace("fetch_channel: #{ucid} : video #{video.id} : Updating or inserting video") LOGGER.trace("fetch_channel: #{ucid} : video #{video.id} : Updating or inserting video")
was_insert = Invidious::Database::ChannelVideos.insert(channel_video) was_insert = Invidious::Database::ChannelVideos.insert(channel_video, with_premiere_timestamp: true)
if was_insert if was_insert
LOGGER.trace("fetch_channel: #{ucid} : video #{video.id} : Inserted, updating subscriptions") LOGGER.trace("fetch_channel: #{ucid} : video #{video.id} : Inserted, updating subscriptions")