* Ensure channel detail lookup doesn't download the video - oops * Ran the needful migrations for replacing channels with sources * got media source test back working * channel tasks test * Media indexing worker test * media tests * Got all tests working except controller tests * got all tests working * Renamed Channel struct to Source * renamed ChannelTasks * More renaming; renamed channel details module * Removed Channel yt-dlp module, instead throwing things in the VideoCollection module * Renamed what looks like the last of the outstanding data
75 lines
1.8 KiB
Elixir
75 lines
1.8 KiB
Elixir
defmodule Pinchflat.Media do
|
|
@moduledoc """
|
|
The Media context.
|
|
"""
|
|
|
|
import Ecto.Query, warn: false
|
|
|
|
alias Pinchflat.Repo
|
|
alias Pinchflat.Tasks
|
|
alias Pinchflat.Media.MediaItem
|
|
alias Pinchflat.MediaSource.Source
|
|
|
|
@doc """
|
|
Returns the list of media_items. Returns [%MediaItem{}, ...].
|
|
"""
|
|
def list_media_items do
|
|
Repo.all(MediaItem)
|
|
end
|
|
|
|
@doc """
|
|
Returns a list of pending media_items for a given source, where
|
|
pending means the `media_filepath` is `nil`.
|
|
|
|
Returns [%MediaItem{}, ...].
|
|
"""
|
|
def list_pending_media_items_for(%Source{} = source) do
|
|
from(
|
|
m in MediaItem,
|
|
where: m.source_id == ^source.id and is_nil(m.media_filepath)
|
|
)
|
|
|> Repo.all()
|
|
end
|
|
|
|
@doc """
|
|
Gets a single media_item.
|
|
|
|
Returns %MediaItem{}. Raises `Ecto.NoResultsError` if the Media item does not exist.
|
|
"""
|
|
def get_media_item!(id), do: Repo.get!(MediaItem, id)
|
|
|
|
@doc """
|
|
Creates a media_item. Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}.
|
|
"""
|
|
def create_media_item(attrs) do
|
|
%MediaItem{}
|
|
|> MediaItem.changeset(attrs)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
@doc """
|
|
Updates a media_item. Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}.
|
|
"""
|
|
def update_media_item(%MediaItem{} = media_item, attrs) do
|
|
media_item
|
|
|> MediaItem.changeset(attrs)
|
|
|> Repo.update()
|
|
end
|
|
|
|
@doc """
|
|
Deletes a media_item and its associated tasks.
|
|
|
|
Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}.
|
|
"""
|
|
def delete_media_item(%MediaItem{} = media_item) do
|
|
Tasks.delete_tasks_for(media_item)
|
|
Repo.delete(media_item)
|
|
end
|
|
|
|
@doc """
|
|
Returns an `%Ecto.Changeset{}` for tracking media_item changes.
|
|
"""
|
|
def change_media_item(%MediaItem{} = media_item, attrs \\ %{}) do
|
|
MediaItem.changeset(media_item, attrs)
|
|
end
|
|
end
|