summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsyeopite <syeopite@syeopite.dev>2024-06-13 09:05:47 -0700
committersyeopite <syeopite@syeopite.dev>2024-06-13 09:07:20 -0700
commitf466116cd715120a8acea2c388e306caaf62abb0 (patch)
tree8abd7b3dcc6b7c856a08bb514291fa0edf52eceb /src
parent5b519123a76879edca3d5fa5cff717b58482e7e5 (diff)
downloadinvidious-f466116cd715120a8acea2c388e306caaf62abb0.tar.gz
invidious-f466116cd715120a8acea2c388e306caaf62abb0.tar.bz2
invidious-f466116cd715120a8acea2c388e306caaf62abb0.zip
Extract label for transcript in YouTube response
Diffstat (limited to 'src')
-rw-r--r--src/invidious/videos/transcript.cr29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/invidious/videos/transcript.cr b/src/invidious/videos/transcript.cr
index 76fb8610..9cd064c5 100644
--- a/src/invidious/videos/transcript.cr
+++ b/src/invidious/videos/transcript.cr
@@ -8,11 +8,16 @@ module Invidious::Videos
alias TranscriptLine = HeadingLine | RegularLine
property lines : Array(TranscriptLine)
+
property language_code : String
property auto_generated : Bool
+ # User friendly label for the current transcript.
+ # Example: "English (auto-generated)"
+ property label : String
+
# Initializes a new Transcript struct with the contents and associated metadata describing it
- def initialize(@lines : Array(TranscriptLine), @language_code : String, @auto_generated : Bool)
+ def initialize(@lines : Array(TranscriptLine), @language_code : String, @auto_generated : Bool, @label : String)
end
# Generates a protobuf string to fetch the requested transcript from YouTube
@@ -45,14 +50,29 @@ module Invidious::Videos
# Constructs a Transcripts struct from the initial YouTube response
def self.from_raw(initial_data : Hash(String, JSON::Any), language_code : String, auto_generated : Bool)
- segment_list = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer",
- "content", "transcriptSearchPanelRenderer", "body", "transcriptSegmentListRenderer"
- )
+ transcript_panel = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer",
+ "content", "transcriptSearchPanelRenderer")
+
+ segment_list = transcript_panel.dig("body", "transcriptSegmentListRenderer")
if !segment_list["initialSegments"]?
raise NotFoundException.new("Requested transcript does not exist")
end
+ # Extract user-friendly label for the current transcript
+
+ footer_language_menu = transcript_panel.dig?(
+ "footer", "transcriptFooterRenderer", "languageMenu", "sortFilterSubMenuRenderer", "subMenuItems"
+ )
+
+ if footer_language_menu
+ label = footer_language_menu.as_a.select(&.["selected"].as_bool)[0]["title"].as_s
+ else
+ label = language_code
+ end
+
+ # Extract transcript lines
+
initial_segments = segment_list["initialSegments"].as_a
lines = [] of TranscriptLine
@@ -76,6 +96,7 @@ module Invidious::Videos
lines: lines,
language_code: language_code,
auto_generated: auto_generated,
+ label: label
)
end