Updates metadata parser to include subtitles
This commit is contained in:
parent
2c20e3a87a
commit
c0b9c40839
3 changed files with 4893 additions and 835 deletions
|
|
@ -16,12 +16,30 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MetadataParser do
|
|||
Returns map()
|
||||
"""
|
||||
def parse_for_media_item(metadata) do
|
||||
%{
|
||||
title: metadata["title"],
|
||||
video_filepath: metadata["filepath"],
|
||||
metadata_attrs = %{
|
||||
metadata: %{
|
||||
client_response: metadata
|
||||
}
|
||||
}
|
||||
|
||||
metadata_attrs
|
||||
|> Map.merge(parse_media_metadata(metadata))
|
||||
|> Map.merge(parse_subtitle_metadata(metadata))
|
||||
end
|
||||
|
||||
defp parse_media_metadata(metadata) do
|
||||
%{
|
||||
title: metadata["title"],
|
||||
video_filepath: metadata["filepath"]
|
||||
}
|
||||
end
|
||||
|
||||
defp parse_subtitle_metadata(metadata) do
|
||||
subtitle_map = metadata["requested_subtitles"] || %{}
|
||||
|
||||
%{
|
||||
# IDEA: if needed, consider filtering out subtitles that don't exist on-disk
|
||||
subtitles: Enum.map(subtitle_map, fn {lang, attrs} -> [lang, attrs["filepath"]] end)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MediaParserTest do
|
|||
}}
|
||||
end
|
||||
|
||||
describe "parse_for_media_item/1" do
|
||||
describe "parse_for_media_item/1 when testing media metadata" do
|
||||
test "it extracts the video filepath", %{metadata: metadata} do
|
||||
result = Parser.parse_for_media_item(metadata)
|
||||
|
||||
|
|
@ -42,4 +42,31 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MediaParserTest do
|
|||
assert result.metadata.client_response == metadata
|
||||
end
|
||||
end
|
||||
|
||||
describe "parse_for_media_item/1 when testing subtitle metadata" do
|
||||
test "extracts the subtitle filepaths", %{metadata: metadata} do
|
||||
result = Parser.parse_for_media_item(metadata)
|
||||
|
||||
assert [["de", german_filepath], ["en", english_filepath]] = result.subtitles
|
||||
|
||||
assert String.ends_with?(english_filepath, ".en.srt")
|
||||
assert String.ends_with?(german_filepath, ".de.srt")
|
||||
end
|
||||
|
||||
test "doesn't freak out if the video has no subtitles", %{metadata: metadata} do
|
||||
metadata = Map.put(metadata, "requested_subtitles", %{})
|
||||
|
||||
result = Parser.parse_for_media_item(metadata)
|
||||
|
||||
assert result.subtitles == []
|
||||
end
|
||||
|
||||
test "doesn't freak out if the requested_subtitles key is missing", %{metadata: metadata} do
|
||||
metadata = Map.delete(metadata, "requested_subtitles")
|
||||
|
||||
result = Parser.parse_for_media_item(metadata)
|
||||
|
||||
assert result.subtitles == []
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue