From 9752768d586a4435ef385c0bb083115c05308ffc Mon Sep 17 00:00:00 2001 From: Maarten den Braber Date: Fri, 31 Jul 2026 11:12:35 +0200 Subject: [PATCH] Potential fix for pull request finding Hardening via `.try &.as_h?` makes sense - not sure if YT would ever return null Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/invidious/jsonify/api_v1/video_json.cr | 27 ++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/invidious/jsonify/api_v1/video_json.cr b/src/invidious/jsonify/api_v1/video_json.cr index b7658165..60e684b1 100644 --- a/src/invidious/jsonify/api_v1/video_json.cr +++ b/src/invidious/jsonify/api_v1/video_json.cr @@ -154,18 +154,21 @@ module Invidious::JSONify::APIv1 # one audio track. The same data already drives the DASH manifest # (see `Invidious::Routes::API::Manifest`), but was never exposed on # the API, leaving clients to scrape `xtags` out of the stream URL. - if audio_track = fmt["audioTrack"]? - json.field "audioTrack" do - json.object do - # Language tag with a track discriminator, e.g. "en-US.4". - json.field "id", audio_track["id"] if audio_track["id"]? - # Human-readable label, e.g. "English (original)". - json.field "displayName", audio_track["displayName"] if audio_track["displayName"]? - # True for the video's original (undubbed) audio. - json.field "audioIsDefault", audio_track["audioIsDefault"] if audio_track["audioIsDefault"]? - end - end - end +if audio_track = fmt["audioTrack"]?.try &.as_h? + json.field "audioTrack" do + json.object do + if id = audio_track["id"]? + json.field "id", id + end + if display_name = audio_track["displayName"]? + json.field "displayName", display_name + end + if audio_is_default = audio_track["audioIsDefault"]? + json.field "audioIsDefault", audio_is_default + end + end + end +end # Extra misc stuff json.field "colorInfo", fmt["colorInfo"] if fmt.has_key?("colorInfo")