Updated NFO generator to determine S/E from filepath
This commit is contained in:
parent
4822127e3f
commit
03cb68abe1
2 changed files with 36 additions and 9 deletions
|
|
@ -124,6 +124,21 @@ defmodule Pinchflat.Metadata.MetadataFileHelpers do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Attempts to determine the season and episode number from a media filepath.
|
||||||
|
|
||||||
|
Returns {:ok, {binary(), binary()}} | {:error, :indeterminable}
|
||||||
|
"""
|
||||||
|
def season_and_episode_from_media_filepath(media_filepath) do
|
||||||
|
# matches s + 1 or more digits + e + 1 or more digits (case-insensitive)
|
||||||
|
season_episode_regex = ~r/s(\d+)e(\d+)/i
|
||||||
|
|
||||||
|
case Regex.scan(season_episode_regex, media_filepath) do
|
||||||
|
[[_, season, episode] | _] -> {:ok, {season, episode}}
|
||||||
|
_ -> {:error, :indeterminable}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp generate_filepath_for(database_record, filename) do
|
defp generate_filepath_for(database_record, filename) do
|
||||||
Path.join([
|
Path.join([
|
||||||
metadata_directory_for(database_record),
|
metadata_directory_for(database_record),
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ defmodule Pinchflat.Metadata.NfoBuilder do
|
||||||
|
|
||||||
import Pinchflat.Utils.XmlUtils, only: [safe: 1]
|
import Pinchflat.Utils.XmlUtils, only: [safe: 1]
|
||||||
|
|
||||||
alias Pinchflat.Metadata.MetadataFileHelpers
|
|
||||||
alias Pinchflat.Utils.FilesystemUtils
|
alias Pinchflat.Utils.FilesystemUtils
|
||||||
|
alias Pinchflat.Metadata.MetadataFileHelpers
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Builds an NFO file for a media item (read: single "episode") and
|
Builds an NFO file for a media item (read: single "episode") and
|
||||||
|
|
@ -15,12 +15,12 @@ defmodule Pinchflat.Metadata.NfoBuilder do
|
||||||
|
|
||||||
Returns the filepath of the NFO file.
|
Returns the filepath of the NFO file.
|
||||||
"""
|
"""
|
||||||
def build_and_store_for_media_item(filepath, metadata) do
|
def build_and_store_for_media_item(nfo_filepath, metadata) do
|
||||||
nfo = build_for_media_item(metadata)
|
nfo = build_for_media_item(nfo_filepath, metadata)
|
||||||
|
|
||||||
FilesystemUtils.write_p!(filepath, nfo)
|
FilesystemUtils.write_p!(nfo_filepath, nfo)
|
||||||
|
|
||||||
filepath
|
nfo_filepath
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
@ -37,10 +37,15 @@ defmodule Pinchflat.Metadata.NfoBuilder do
|
||||||
filepath
|
filepath
|
||||||
end
|
end
|
||||||
|
|
||||||
defp build_for_media_item(metadata) do
|
defp build_for_media_item(nfo_filepath, metadata) do
|
||||||
upload_date = MetadataFileHelpers.parse_upload_date(metadata["upload_date"])
|
upload_date = MetadataFileHelpers.parse_upload_date(metadata["upload_date"])
|
||||||
|
# NOTE: the filepath here isn't the path of the media item, it's the path that
|
||||||
|
# the NFO should be saved to. This works because the NFO's path is the same as
|
||||||
|
# the media's path, just with a different extension. If this ever changes I'll
|
||||||
|
# need to pass in the media item's path as well.
|
||||||
|
{season, episode} = determine_season_and_episode_number(nfo_filepath, upload_date)
|
||||||
|
|
||||||
# Cribbed from a combination of the Kodi wiki, ytdl-nfo, and ytdl-sub.
|
# Cribbed from a combination of the Kodi wiki, ytdl-nfo, and ytdl-sub.
|
||||||
# WHO NEEDS A FANCY XML PARSER ANYWAY?!
|
|
||||||
"""
|
"""
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
<episodedetails>
|
<episodedetails>
|
||||||
|
|
@ -49,8 +54,8 @@ defmodule Pinchflat.Metadata.NfoBuilder do
|
||||||
<uniqueid type="youtube" default="true">#{safe(metadata["id"])}</uniqueid>
|
<uniqueid type="youtube" default="true">#{safe(metadata["id"])}</uniqueid>
|
||||||
<plot>#{safe(metadata["description"])}</plot>
|
<plot>#{safe(metadata["description"])}</plot>
|
||||||
<aired>#{safe(upload_date)}</aired>
|
<aired>#{safe(upload_date)}</aired>
|
||||||
<season>#{safe(upload_date.year)}</season>
|
<season>#{safe(season)}</season>
|
||||||
<episode>#{Calendar.strftime(upload_date, "%m%d")}</episode>
|
<episode>#{episode}</episode>
|
||||||
<genre>YouTube</genre>
|
<genre>YouTube</genre>
|
||||||
</episodedetails>
|
</episodedetails>
|
||||||
"""
|
"""
|
||||||
|
|
@ -67,4 +72,11 @@ defmodule Pinchflat.Metadata.NfoBuilder do
|
||||||
</tvshow>
|
</tvshow>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp determine_season_and_episode_number(filepath, upload_date) do
|
||||||
|
case MetadataFileHelpers.season_and_episode_from_media_filepath(filepath) do
|
||||||
|
{:ok, {season, episode}} -> {season, episode}
|
||||||
|
{:error, _} -> {upload_date.year, Calendar.strftime(upload_date, "%m%d")}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue