Stopped sources from fetching metadata on every update

This commit is contained in:
Kieran Eglin 2024-04-18 10:13:13 -07:00
parent 526bc0c2e3
commit 0d969c865e
No known key found for this signature in database
GPG key ID: 193984967FCF432D
3 changed files with 30 additions and 9 deletions

View file

@ -38,9 +38,9 @@ defmodule Pinchflat.Metadata.SourceMetadataStorageWorker do
- The NFO file for the source (if specified) - The NFO file for the source (if specified)
- Downloads and stores source images (if specified) - Downloads and stores source images (if specified)
The worker is kicked off after a source is inserted/updated - this can The worker is kicked off after a source is inserted or it's original_url
take an unknown amount of time so don't rely on this data being here is updated - this can take an unknown amount of time so don't rely on this
before, say, the first indexing or downloading task is complete. data being here before, say, the first indexing or downloading task is complete.
Returns :ok Returns :ok
""" """

View file

@ -237,7 +237,7 @@ defmodule Pinchflat.Sources do
if run_post_commit_tasks do if run_post_commit_tasks do
maybe_handle_media_tasks(changeset, source) maybe_handle_media_tasks(changeset, source)
maybe_run_indexing_task(changeset, source) maybe_run_indexing_task(changeset, source)
run_metadata_storage_task(source) maybe_run_metadata_storage_task(changeset, source)
end end
{:ok, source} {:ok, source}
@ -276,9 +276,20 @@ defmodule Pinchflat.Sources do
end end
end end
# This runs every time to pick up any changes to the metadata defp maybe_run_metadata_storage_task(changeset, source) do
defp run_metadata_storage_task(source) do case {changeset.data, changeset.changes} do
SourceMetadataStorageWorker.kickoff_with_task(source) # If the changeset is new (not persisted), fetch metadata no matter what
{%{__meta__: %{state: :built}}, _} ->
SourceMetadataStorageWorker.kickoff_with_task(source)
# If the record has been persisted, only fetch metadata if the
# original_url has changed
{_, %{original_url: _}} ->
SourceMetadataStorageWorker.kickoff_with_task(source)
_ ->
:ok
end
end end
defp maybe_update_slow_indexing_task(changeset, source) do defp maybe_update_slow_indexing_task(changeset, source) do

View file

@ -514,14 +514,24 @@ defmodule Pinchflat.SourcesTest do
assert source.index_frequency_minutes == 0 assert source.index_frequency_minutes == 0
end end
test "updating will kickoff a metadata storage worker" do test "updating will kickoff a metadata storage worker if the original_url changes" do
expect(YtDlpRunnerMock, :run, &playlist_mock/3)
source = source_fixture() source = source_fixture()
update_attrs = %{name: "some updated name"} update_attrs = %{original_url: "https://www.youtube.com/channel/cba321"}
assert {:ok, %Source{} = source} = Sources.update_source(source, update_attrs) assert {:ok, %Source{} = source} = Sources.update_source(source, update_attrs)
assert_enqueued(worker: SourceMetadataStorageWorker, args: %{"id" => source.id}) assert_enqueued(worker: SourceMetadataStorageWorker, args: %{"id" => source.id})
end end
test "updating will not kickoff a metadata storage worker other attrs change" do
source = source_fixture()
update_attrs = %{name: "some new name"}
assert {:ok, %Source{}} = Sources.update_source(source, update_attrs)
refute_enqueued(worker: SourceMetadataStorageWorker)
end
end end
describe "update_source/3 when testing options" do describe "update_source/3 when testing options" do