ML-168: broadcast index_changed event after background import
Import workers now broadcast :records_index_changed on "records:index_changed" after successful import via Records.broadcast_index_changed/0. CollectionLive.Index and WishlistLive.Index subscribe to the topic in mount/3 and reload their record streams on receipt, with a live_action guard to skip reloads when the grid is hidden behind a modal (:import, :barcode_scan). IndexActions.handle_index_changed/1 refreshes total_entries before reloading to keep the pagination bar accurate.
This commit is contained in:
@@ -126,4 +126,21 @@ defmodule MusicLibrary.Records do
|
||||
{:update, record}
|
||||
)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Broadcasts that the records index has changed (new record imported, deleted, etc.).
|
||||
Index LiveViews subscribe to this topic to auto-refresh.
|
||||
"""
|
||||
@spec broadcast_index_changed() :: :ok
|
||||
def broadcast_index_changed do
|
||||
Phoenix.PubSub.broadcast(MusicLibrary.PubSub, "records:index_changed", :records_index_changed)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Subscribes the calling process to records index change notifications.
|
||||
"""
|
||||
@spec subscribe_to_index() :: :ok | {:error, term()}
|
||||
def subscribe_to_index do
|
||||
Phoenix.PubSub.subscribe(MusicLibrary.PubSub, "records:index_changed")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,6 +7,7 @@ defmodule MusicLibrary.Worker.ImportFromMusicbrainzRelease do
|
||||
|
||||
use Oban.Worker, queue: :music_brainz, max_attempts: 3
|
||||
|
||||
alias MusicLibrary.Records
|
||||
alias MusicLibrary.Records.Record
|
||||
alias MusicLibrary.Worker.ErrorHandler
|
||||
|
||||
@@ -19,8 +20,12 @@ defmodule MusicLibrary.Worker.ImportFromMusicbrainzRelease do
|
||||
]
|
||||
|
||||
case MusicLibrary.Records.import_from_musicbrainz_release(release_id, opts) do
|
||||
{:ok, _record} -> :ok
|
||||
other -> ErrorHandler.to_oban_result(other)
|
||||
{:ok, _record} ->
|
||||
Records.broadcast_index_changed()
|
||||
:ok
|
||||
|
||||
other ->
|
||||
ErrorHandler.to_oban_result(other)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,8 +23,12 @@ defmodule MusicLibrary.Worker.ImportFromMusicbrainzReleaseGroup do
|
||||
]
|
||||
|
||||
case Records.import_from_musicbrainz_release_group(release_group_id, opts) do
|
||||
{:ok, _record} -> :ok
|
||||
other -> ErrorHandler.to_oban_result(other)
|
||||
{:ok, _record} ->
|
||||
Records.broadcast_index_changed()
|
||||
:ok
|
||||
|
||||
other ->
|
||||
ErrorHandler.to_oban_result(other)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user