From 2377371d8cbb6358e80f85ac47b2b699d405c73d Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Fri, 2 Feb 2024 10:10:07 -0800 Subject: [PATCH] Renamed Channel struct to Source --- .iex.exs | 2 +- lib/pinchflat/media.ex | 4 +-- lib/pinchflat/media/media_item.ex | 4 +-- lib/pinchflat/media_source.ex | 32 ++++++++--------- .../media_source/{channel.ex => source.ex} | 2 +- lib/pinchflat/profiles/media_profile.ex | 4 +-- lib/pinchflat/tasks.ex | 10 +++--- lib/pinchflat/tasks/channel_tasks.ex | 4 +-- lib/pinchflat/tasks/task.ex | 4 +-- .../media_sources/source_controller.ex | 8 ++--- test/pinchflat/media_source_test.exs | 34 +++++++++---------- .../support/fixtures/media_source_fixtures.ex | 6 ++-- 12 files changed, 57 insertions(+), 57 deletions(-) rename lib/pinchflat/media_source/{channel.ex => source.ex} (96%) diff --git a/.iex.exs b/.iex.exs index bc26864..29c42a6 100644 --- a/.iex.exs +++ b/.iex.exs @@ -3,7 +3,7 @@ alias Pinchflat.Repo alias Pinchflat.Tasks.Task alias Pinchflat.Media.MediaItem alias Pinchflat.Media.MediaMetadata -alias Pinchflat.MediaSource.Channel +alias Pinchflat.MediaSource.Source alias Pinchflat.Profiles.MediaProfile alias Pinchflat.Tasks diff --git a/lib/pinchflat/media.ex b/lib/pinchflat/media.ex index 3eea822..be05cf4 100644 --- a/lib/pinchflat/media.ex +++ b/lib/pinchflat/media.ex @@ -8,7 +8,7 @@ defmodule Pinchflat.Media do alias Pinchflat.Repo alias Pinchflat.Tasks alias Pinchflat.Media.MediaItem - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source @doc """ Returns the list of media_items. Returns [%MediaItem{}, ...]. @@ -23,7 +23,7 @@ defmodule Pinchflat.Media do Returns [%MediaItem{}, ...]. """ - def list_pending_media_items_for(%Channel{} = source) do + 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) diff --git a/lib/pinchflat/media/media_item.ex b/lib/pinchflat/media/media_item.ex index 903a000..430c3e5 100644 --- a/lib/pinchflat/media/media_item.ex +++ b/lib/pinchflat/media/media_item.ex @@ -7,7 +7,7 @@ defmodule Pinchflat.Media.MediaItem do import Ecto.Changeset alias Pinchflat.Tasks.Task - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source alias Pinchflat.Media.MediaMetadata @required_fields ~w(media_id source_id)a @@ -22,7 +22,7 @@ defmodule Pinchflat.Media.MediaItem do # Will very likely revisit because I can't leave well-enough alone. field :subtitle_filepaths, {:array, {:array, :string}}, default: [] - belongs_to :source, Channel + belongs_to :source, Source has_one :metadata, MediaMetadata, on_replace: :update diff --git a/lib/pinchflat/media_source.ex b/lib/pinchflat/media_source.ex index 0832c56..e218723 100644 --- a/lib/pinchflat/media_source.ex +++ b/lib/pinchflat/media_source.ex @@ -9,32 +9,32 @@ defmodule Pinchflat.MediaSource do alias Pinchflat.Tasks alias Pinchflat.Media alias Pinchflat.Tasks.ChannelTasks - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source alias Pinchflat.MediaClient.ChannelDetails @doc """ - Returns the list of channels. Returns [%Channel{}, ...] + Returns the list of channels. Returns [%Source{}, ...] """ def list_sources do - Repo.all(Channel) + Repo.all(Source) end @doc """ Gets a single channel. - Returns %Channel{}. Raises `Ecto.NoResultsError` if the Channel does not exist. + Returns %Source{}. Raises `Ecto.NoResultsError` if the Channel does not exist. """ - def get_source!(id), do: Repo.get!(Channel, id) + def get_source!(id), do: Repo.get!(Source, id) @doc """ Creates a channel. May attempt to pull additional channel details from the original_url (if provided). Will attempt to start indexing the channel's media if successfully inserted. - Returns {:ok, %Channel{}} | {:error, %Ecto.Changeset{}} + Returns {:ok, %Source{}} | {:error, %Ecto.Changeset{}} """ def create_source(attrs) do - %Channel{} + %Source{} |> change_source_from_url(attrs) |> commit_and_start_indexing() end @@ -45,7 +45,7 @@ defmodule Pinchflat.MediaSource do Returns [%MediaItem{}, ...] | [%Ecto.Changeset{}, ...] """ - def index_media_items(%Channel{} = source) do + def index_media_items(%Source{} = source) do {:ok, media_ids} = ChannelDetails.get_video_ids(source.original_url) media_ids @@ -67,9 +67,9 @@ defmodule Pinchflat.MediaSource do Existing indexing tasks will be cancelled if the indexing frequency has been changed (logic in `ChannelTasks.kickoff_indexing_task`) - Returns {:ok, %Channel{}} | {:error, %Ecto.Changeset{}} + Returns {:ok, %Source{}} | {:error, %Ecto.Changeset{}} """ - def update_source(%Channel{} = channel, attrs) do + def update_source(%Source{} = channel, attrs) do channel |> change_source_from_url(attrs) |> commit_and_start_indexing() @@ -78,9 +78,9 @@ defmodule Pinchflat.MediaSource do @doc """ Deletes a channel and it's associated tasks (of any state). - Returns {:ok, %Channel{}} | {:error, %Ecto.Changeset{}} + Returns {:ok, %Source{}} | {:error, %Ecto.Changeset{}} """ - def delete_source(%Channel{} = channel) do + def delete_source(%Source{} = channel) do Tasks.delete_tasks_for(channel) Repo.delete(channel) end @@ -88,8 +88,8 @@ defmodule Pinchflat.MediaSource do @doc """ Returns an `%Ecto.Changeset{}` for tracking channel changes. """ - def change_source(%Channel{} = channel, attrs \\ %{}) do - Channel.changeset(channel, attrs) + def change_source(%Source{} = channel, attrs \\ %{}) do + Source.changeset(channel, attrs) end @doc """ @@ -101,7 +101,7 @@ defmodule Pinchflat.MediaSource do This means that it'll go for it even if a changeset is otherwise invalid. This is pretty easy to change, but for MVP I'm not concerned. """ - def change_source_from_url(%Channel{} = channel, attrs) do + def change_source_from_url(%Source{} = channel, attrs) do case change_source(channel, attrs) do %Ecto.Changeset{changes: %{original_url: _}} = changeset -> add_source_details_to_changeset(channel, changeset) @@ -136,7 +136,7 @@ defmodule Pinchflat.MediaSource do defp commit_and_start_indexing(changeset) do case Repo.insert_or_update(changeset) do - {:ok, %Channel{} = channel} -> + {:ok, %Source{} = channel} -> maybe_run_indexing_task(changeset, channel) {:ok, channel} diff --git a/lib/pinchflat/media_source/channel.ex b/lib/pinchflat/media_source/source.ex similarity index 96% rename from lib/pinchflat/media_source/channel.ex rename to lib/pinchflat/media_source/source.ex index 8dd9cb3..1609fc0 100644 --- a/lib/pinchflat/media_source/channel.ex +++ b/lib/pinchflat/media_source/source.ex @@ -1,4 +1,4 @@ -defmodule Pinchflat.MediaSource.Channel do +defmodule Pinchflat.MediaSource.Source do @moduledoc """ The Channel schema. """ diff --git a/lib/pinchflat/profiles/media_profile.ex b/lib/pinchflat/profiles/media_profile.ex index 39bb6db..10964c9 100644 --- a/lib/pinchflat/profiles/media_profile.ex +++ b/lib/pinchflat/profiles/media_profile.ex @@ -6,7 +6,7 @@ defmodule Pinchflat.Profiles.MediaProfile do use Ecto.Schema import Ecto.Changeset - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source @allowed_fields ~w( name @@ -27,7 +27,7 @@ defmodule Pinchflat.Profiles.MediaProfile do field :embed_subs, :boolean, default: true field :sub_langs, :string, default: "en" - has_many :channels, Channel + has_many :sources, Source timestamps(type: :utc_datetime) end diff --git a/lib/pinchflat/tasks.ex b/lib/pinchflat/tasks.ex index f242df9..3bd5231 100644 --- a/lib/pinchflat/tasks.ex +++ b/lib/pinchflat/tasks.ex @@ -8,7 +8,7 @@ defmodule Pinchflat.Tasks do alias Pinchflat.Tasks.Task alias Pinchflat.Media.MediaItem - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source @doc """ Returns the list of tasks. Returns [%Task{}, ...] @@ -57,7 +57,7 @@ defmodule Pinchflat.Tasks do @doc """ Creates a task. - Accepts map() | %Oban.Job{}, %Channel{} | %Oban.Job{}, %MediaItem{}. + Accepts map() | %Oban.Job{}, %Source{} | %Oban.Job{}, %MediaItem{}. Returns {:ok, %Task{}} | {:error, %Ecto.Changeset{}}. """ def create_task(attrs) do @@ -71,7 +71,7 @@ defmodule Pinchflat.Tasks do def create_task(%Oban.Job{} = job, attached_record) do attached_record_attr = case attached_record do - %Channel{} = channel -> %{source_id: channel.id} + %Source{} = channel -> %{source_id: channel.id} %MediaItem{} = media_item -> %{media_item_id: media_item.id} end @@ -113,7 +113,7 @@ defmodule Pinchflat.Tasks do def delete_tasks_for(attached_record) do tasks = case attached_record do - %Channel{} = source -> list_tasks_for(:source_id, source.id) + %Source{} = source -> list_tasks_for(:source_id, source.id) %MediaItem{} = media_item -> list_tasks_for(:media_item_id, media_item.id) end @@ -130,7 +130,7 @@ defmodule Pinchflat.Tasks do def delete_pending_tasks_for(attached_record) do tasks = case attached_record do - %Channel{} = source -> list_pending_tasks_for(:source_id, source.id) + %Source{} = source -> list_pending_tasks_for(:source_id, source.id) %MediaItem{} = media_item -> list_pending_tasks_for(:media_item_id, media_item.id) end diff --git a/lib/pinchflat/tasks/channel_tasks.ex b/lib/pinchflat/tasks/channel_tasks.ex index 827f9a8..18b7304 100644 --- a/lib/pinchflat/tasks/channel_tasks.ex +++ b/lib/pinchflat/tasks/channel_tasks.ex @@ -4,7 +4,7 @@ defmodule Pinchflat.Tasks.ChannelTasks do """ alias Pinchflat.Tasks - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source alias Pinchflat.Workers.MediaIndexingWorker @doc """ @@ -12,7 +12,7 @@ defmodule Pinchflat.Tasks.ChannelTasks do Returns {:ok, :should_not_index} | {:ok, %Task{}}. """ - def kickoff_indexing_task(%Channel{} = source) do + def kickoff_indexing_task(%Source{} = source) do Tasks.delete_pending_tasks_for(source) if source.index_frequency_minutes <= 0 do diff --git a/lib/pinchflat/tasks/task.ex b/lib/pinchflat/tasks/task.ex index fdd0f19..34cf113 100644 --- a/lib/pinchflat/tasks/task.ex +++ b/lib/pinchflat/tasks/task.ex @@ -7,11 +7,11 @@ defmodule Pinchflat.Tasks.Task do import Ecto.Changeset alias Pinchflat.Media.MediaItem - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source schema "tasks" do belongs_to :job, Oban.Job - belongs_to :source, Channel + belongs_to :source, Source belongs_to :media_item, MediaItem timestamps(type: :utc_datetime) diff --git a/lib/pinchflat_web/controllers/media_sources/source_controller.ex b/lib/pinchflat_web/controllers/media_sources/source_controller.ex index ac220fa..b90cf1e 100644 --- a/lib/pinchflat_web/controllers/media_sources/source_controller.ex +++ b/lib/pinchflat_web/controllers/media_sources/source_controller.ex @@ -3,7 +3,7 @@ defmodule PinchflatWeb.MediaSources.SourceController do alias Pinchflat.Profiles alias Pinchflat.MediaSource - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source def index(conn, _params) do sources = MediaSource.list_sources() @@ -12,7 +12,7 @@ defmodule PinchflatWeb.MediaSources.SourceController do end def new(conn, _params) do - changeset = MediaSource.change_source(%Channel{}) + changeset = MediaSource.change_source(%Source{}) render(conn, :new, changeset: changeset, media_profiles: media_profiles()) end @@ -48,7 +48,7 @@ defmodule PinchflatWeb.MediaSources.SourceController do case MediaSource.update_source(source, source_params) do {:ok, source} -> conn - |> put_flash(:info, "Channel updated successfully.") + |> put_flash(:info, "Source updated successfully.") |> redirect(to: ~p"/media_sources/sources/#{source}") {:error, %Ecto.Changeset{} = changeset} -> @@ -65,7 +65,7 @@ defmodule PinchflatWeb.MediaSources.SourceController do {:ok, _source} = MediaSource.delete_source(source) conn - |> put_flash(:info, "Channel deleted successfully.") + |> put_flash(:info, "Source deleted successfully.") |> redirect(to: ~p"/media_sources/sources") end diff --git a/test/pinchflat/media_source_test.exs b/test/pinchflat/media_source_test.exs index 7ca7187..40e88b1 100644 --- a/test/pinchflat/media_source_test.exs +++ b/test/pinchflat/media_source_test.exs @@ -7,7 +7,7 @@ defmodule Pinchflat.MediaSourceTest do alias Pinchflat.MediaSource alias Pinchflat.Media.MediaItem - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source alias Pinchflat.Workers.MediaIndexingWorker @invalid_source_attrs %{name: nil, collection_id: nil} @@ -38,7 +38,7 @@ defmodule Pinchflat.MediaSourceTest do collection_type: "channel" } - assert {:ok, %Channel{} = source} = MediaSource.create_source(valid_attrs) + assert {:ok, %Source{} = source} = MediaSource.create_source(valid_attrs) assert source.name == "some name" assert String.starts_with?(source.collection_id, "some_source_id_") end @@ -62,7 +62,7 @@ defmodule Pinchflat.MediaSourceTest do collection_type: "channel" } - assert {:ok, %Channel{}} = MediaSource.create_source(valid_once_attrs) + assert {:ok, %Source{}} = MediaSource.create_source(valid_once_attrs) assert {:error, %Ecto.Changeset{}} = MediaSource.create_source(valid_once_attrs) end @@ -84,8 +84,8 @@ defmodule Pinchflat.MediaSourceTest do source_1_attrs = Map.merge(valid_attrs, %{media_profile_id: media_profile_fixture().id}) source_2_attrs = Map.merge(valid_attrs, %{media_profile_id: media_profile_fixture().id}) - assert {:ok, %Channel{}} = MediaSource.create_source(source_1_attrs) - assert {:ok, %Channel{}} = MediaSource.create_source(source_2_attrs) + assert {:ok, %Source{}} = MediaSource.create_source(source_1_attrs) + assert {:ok, %Source{}} = MediaSource.create_source(source_2_attrs) end test "creation will schedule the indexing task" do @@ -97,7 +97,7 @@ defmodule Pinchflat.MediaSourceTest do collection_type: "channel" } - assert {:ok, %Channel{} = source} = MediaSource.create_source(valid_attrs) + assert {:ok, %Source{} = source} = MediaSource.create_source(valid_attrs) assert_enqueued(worker: MediaIndexingWorker, args: %{"id" => source.id}) end @@ -161,7 +161,7 @@ defmodule Pinchflat.MediaSourceTest do source = source_fixture() update_attrs = %{name: "some updated name"} - assert {:ok, %Channel{} = source} = MediaSource.update_source(source, update_attrs) + assert {:ok, %Source{} = source} = MediaSource.update_source(source, update_attrs) assert source.name == "some updated name" end @@ -171,7 +171,7 @@ defmodule Pinchflat.MediaSourceTest do source = source_fixture() update_attrs = %{original_url: "https://www.youtube.com/channel/abc123"} - assert {:ok, %Channel{} = source} = MediaSource.update_source(source, update_attrs) + assert {:ok, %Source{} = source} = MediaSource.update_source(source, update_attrs) assert source.name == "some name" assert String.starts_with?(source.collection_id, "some_source_id_") end @@ -182,14 +182,14 @@ defmodule Pinchflat.MediaSourceTest do source = source_fixture() update_attrs = %{name: "some updated name"} - assert {:ok, %Channel{}} = MediaSource.update_source(source, update_attrs) + assert {:ok, %Source{}} = MediaSource.update_source(source, update_attrs) end test "updating the index frequency will re-schedule the indexing task" do source = source_fixture() update_attrs = %{index_frequency_minutes: 123} - assert {:ok, %Channel{} = source} = MediaSource.update_source(source, update_attrs) + assert {:ok, %Source{} = source} = MediaSource.update_source(source, update_attrs) assert source.index_frequency_minutes == 123 assert_enqueued(worker: MediaIndexingWorker, args: %{"id" => source.id}) end @@ -198,7 +198,7 @@ defmodule Pinchflat.MediaSourceTest do source = source_fixture() update_attrs = %{name: "some updated name"} - assert {:ok, %Channel{}} = MediaSource.update_source(source, update_attrs) + assert {:ok, %Source{}} = MediaSource.update_source(source, update_attrs) refute_enqueued(worker: MediaIndexingWorker, args: %{"id" => source.id}) end @@ -215,7 +215,7 @@ defmodule Pinchflat.MediaSourceTest do describe "delete_source/1" do test "it deletes the source" do source = source_fixture() - assert {:ok, %Channel{}} = MediaSource.delete_source(source) + assert {:ok, %Source{}} = MediaSource.delete_source(source) assert_raise Ecto.NoResultsError, fn -> MediaSource.get_source!(source.id) end end @@ -228,7 +228,7 @@ defmodule Pinchflat.MediaSourceTest do source = source_fixture() task = task_fixture(source_id: source.id) - assert {:ok, %Channel{}} = MediaSource.delete_source(source) + assert {:ok, %Source{}} = MediaSource.delete_source(source) assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end end end @@ -252,7 +252,7 @@ defmodule Pinchflat.MediaSourceTest do test "it does not fetch source details if the original_url isn't in the changeset" do expect(YtDlpRunnerMock, :run, 0, &runner_function_mock/3) - changeset = MediaSource.change_source_from_url(%Channel{}, %{name: "some updated name"}) + changeset = MediaSource.change_source_from_url(%Source{}, %{name: "some updated name"}) assert %Ecto.Changeset{} = changeset end @@ -261,7 +261,7 @@ defmodule Pinchflat.MediaSourceTest do expect(YtDlpRunnerMock, :run, &runner_function_mock/3) changeset = - MediaSource.change_source_from_url(%Channel{}, %{ + MediaSource.change_source_from_url(%Source{}, %{ original_url: "https://www.youtube.com/channel/abc123" }) @@ -275,7 +275,7 @@ defmodule Pinchflat.MediaSourceTest do media_profile_id = media_profile.id changeset = - MediaSource.change_source_from_url(%Channel{}, %{ + MediaSource.change_source_from_url(%Source{}, %{ original_url: "https://www.youtube.com/channel/abc123", media_profile_id: media_profile.id }) @@ -296,7 +296,7 @@ defmodule Pinchflat.MediaSourceTest do end) changeset = - MediaSource.change_source_from_url(%Channel{}, %{ + MediaSource.change_source_from_url(%Source{}, %{ original_url: "https://www.youtube.com/channel/abc123" }) diff --git a/test/support/fixtures/media_source_fixtures.ex b/test/support/fixtures/media_source_fixtures.ex index 408970d..2cebd7a 100644 --- a/test/support/fixtures/media_source_fixtures.ex +++ b/test/support/fixtures/media_source_fixtures.ex @@ -6,15 +6,15 @@ defmodule Pinchflat.MediaSourceFixtures do alias Pinchflat.Repo alias Pinchflat.ProfilesFixtures - alias Pinchflat.MediaSource.Channel + alias Pinchflat.MediaSource.Source @doc """ Generate a source. """ def source_fixture(attrs \\ %{}) do {:ok, channel} = - %Channel{} - |> Channel.changeset( + %Source{} + |> Source.changeset( Enum.into(attrs, %{ name: "Channel ##{:rand.uniform(1_000_000)}", collection_id: Base.encode16(:crypto.hash(:md5, "#{:rand.uniform(1_000_000)}")),