PodcastRSS.DurationParser (Podcast RSS v0.3.0)

View Source

Parser for episode duration input formats.

Supports various input formats and converts them to total seconds:

  • Integer: 1234 (seconds)
  • String seconds: "1234" (seconds)
  • MM:SS format: "12:34"
  • HH:MM:SS format: "01:23:45"
  • HH:MM:SS.ms format: "01:23:45.678" (rounds up fractional seconds)

Summary

Functions

Parse duration input and convert to total seconds.

Convert seconds to HH:MM:SS format for display purposes.

Functions

parse(duration, opts \\ [])

@spec parse(
  String.t() | integer() | float(),
  keyword()
) :: number() | nil

Parse duration input and convert to total seconds.

Returns seconds as integer or float (depending on precision) or nil for invalid input.

Options

  • :precision - Number of decimal places to preserve (default: 0 for integer output)

Examples

iex> PodcastRSS.DurationParser.parse(1234)
1234

iex> PodcastRSS.DurationParser.parse("1234")
1234

iex> PodcastRSS.DurationParser.parse("12:34")
754

iex> PodcastRSS.DurationParser.parse("01:23:45")
5025

iex> PodcastRSS.DurationParser.parse("01:23:45.678")
5026

iex> PodcastRSS.DurationParser.parse("01:23:45.678", precision: 3)
5025.678

iex> PodcastRSS.DurationParser.parse("123.456", precision: 2)
123.46

iex> PodcastRSS.DurationParser.parse("invalid")
nil

to_hhmmss(total_seconds)

@spec to_hhmmss(integer()) :: String.t()

Convert seconds to HH:MM:SS format for display purposes.

Note: iTunes duration in XML is rendered as seconds, not HH:MM:SS. This function is useful for display formatting.

Examples

iex> PodcastRSS.DurationParser.to_hhmmss(1234)
"00:20:34"

iex> PodcastRSS.DurationParser.to_hhmmss(5025)
"01:23:45"