Stopped sources from fetching metadata on every update
This commit is contained in:
parent
526bc0c2e3
commit
0d969c865e
3 changed files with 30 additions and 9 deletions
|
|
@ -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
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue