47 lines
1.5 KiB
Elixir
47 lines
1.5 KiB
Elixir
defmodule Pinchflat.MediaClient.SourceDetails do
|
|
@moduledoc """
|
|
This is the integration layer for actually working with sources.
|
|
|
|
Technically hardcodes the yt-dlp backend for now, but should leave
|
|
it open-ish for future expansion (just in case).
|
|
"""
|
|
|
|
alias Pinchflat.Sources.Source
|
|
alias Pinchflat.MediaClient.Backends.YtDlp.MediaCollection, as: YtDlpSource
|
|
|
|
@doc """
|
|
Gets a source's ID and name from its URL using the given backend.
|
|
|
|
Returns {:ok, map()} | {:error, any, ...}.
|
|
"""
|
|
def get_source_details(source_url, backend \\ :yt_dlp) do
|
|
source_module(backend).get_source_details(source_url)
|
|
end
|
|
|
|
@doc """
|
|
Returns a list of basic media data maps for the given source URL OR
|
|
source record using the given backend.
|
|
|
|
Options:
|
|
- :file_listener_handler - a function that will be called with the path to the
|
|
file that will be written to by yt-dlp. This is useful for
|
|
setting up a file watcher to read the file as it gets written to.
|
|
|
|
Returns {:ok, [map()]} | {:error, any, ...}.
|
|
"""
|
|
def get_media_attributes(sourceable, opts \\ [], backend \\ :yt_dlp)
|
|
|
|
def get_media_attributes(%Source{} = source, opts, backend) do
|
|
get_media_attributes(source.collection_id, opts, backend)
|
|
end
|
|
|
|
def get_media_attributes(source_url, opts, backend) when is_binary(source_url) do
|
|
source_module(backend).get_media_attributes(source_url, opts)
|
|
end
|
|
|
|
defp source_module(backend) do
|
|
case backend do
|
|
:yt_dlp -> YtDlpSource
|
|
end
|
|
end
|
|
end
|