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()
|
Returns map()
|
||||||
"""
|
"""
|
||||||
def parse_for_media_item(metadata) do
|
def parse_for_media_item(metadata) do
|
||||||
%{
|
metadata_attrs = %{
|
||||||
title: metadata["title"],
|
|
||||||
video_filepath: metadata["filepath"],
|
|
||||||
metadata: %{
|
metadata: %{
|
||||||
client_response: 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
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MediaParserTest do
|
||||||
}}
|
}}
|
||||||
end
|
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
|
test "it extracts the video filepath", %{metadata: metadata} do
|
||||||
result = Parser.parse_for_media_item(metadata)
|
result = Parser.parse_for_media_item(metadata)
|
||||||
|
|
||||||
|
|
@ -42,4 +42,31 @@ defmodule Pinchflat.MediaClient.Backends.YtDlp.MediaParserTest do
|
||||||
assert result.metadata.client_response == metadata
|
assert result.metadata.client_response == metadata
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue