lib/media.ex

defmodule Exyt.Media do
  alias Exyt.YTdlp
  alias Exyt.Settings

  def download_getting_filename(url, opts \\ %{}) do
    params(url, opts)
    |> YTdlp.call_returning_filepath()
  end

  def download(url, opts \\ %{}) do
    params(url, opts)
    |> YTdlp.call()
  end

  def get_duration(url) do
    ["--get-duration", url]
    |> YTdlp.call()
  end

  def list_formats(url) do
    ["--list-formats", url]
    |> YTdlp.call()
  end

  def get_title(url) do
    ["--get-title", url]
    |> YTdlp.call()
  end

  def get_description(url) do
    ["--get-description", url]
    |> YTdlp.call()
  end

  def get_filename(url) do
    ["--get-filename", url]
    |> YTdlp.call()
  end

  def get_format(url) do
    ["--get-format", url]
    |> YTdlp.call()
  end

  def get_id(url) do
    ["--get-id", url]
    |> YTdlp.call()
  end

  def get_thumbnail(url) do
    ["--get-thumbnail", url]
    |> YTdlp.call()
  end

  def get_url(url) do
    ["--get-url", url]
    |> YTdlp.call()
  end

  def ytdlp(params, url) do
    (params ++ [url])
    |> YTdlp.call()
  end

  defp params(url, opts) do
    quality = opts |> Map.get(:quality) || :best
    output_path = opts |> Map.get(:output_path) || "/tmp/exyt/"
    format = opts |> Map.get(:format) || "webm"

    ["-f #{Settings.quality(quality)} #{format}", "-P #{output_path}", url]
  end
end