Remove excessively defensive coding
This commit is contained in:
@@ -19,18 +19,28 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
|
||||
"""
|
||||
def list_scrobble_rules(opts \\ []) do
|
||||
query = from(r in ScrobbleRule, order_by: [desc: r.inserted_at])
|
||||
query =
|
||||
from r in ScrobbleRule,
|
||||
order_by: [desc: r.inserted_at]
|
||||
|
||||
query =
|
||||
case Keyword.get(opts, :type) do
|
||||
nil -> query
|
||||
type -> from(r in query, where: r.type == ^type)
|
||||
nil ->
|
||||
query
|
||||
|
||||
type ->
|
||||
from r in query,
|
||||
where: r.type == ^type
|
||||
end
|
||||
|
||||
query =
|
||||
case Keyword.get(opts, :enabled) do
|
||||
nil -> query
|
||||
enabled -> from(r in query, where: r.enabled == ^enabled)
|
||||
nil ->
|
||||
query
|
||||
|
||||
enabled ->
|
||||
from r in query,
|
||||
where: r.enabled == ^enabled
|
||||
end
|
||||
|
||||
Repo.all(query)
|
||||
@@ -164,10 +174,6 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
end
|
||||
end
|
||||
|
||||
def apply_album_rule(%ScrobbleRule{type: type}) do
|
||||
{:error, "Invalid rule type: #{type}. Expected 'album'"}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Applies an artist rule to all matching scrobbled tracks.
|
||||
|
||||
@@ -202,10 +208,6 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
end
|
||||
end
|
||||
|
||||
def apply_artist_rule(%ScrobbleRule{type: type}) do
|
||||
{:error, "Invalid rule type: #{type}. Expected 'artist'"}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Applies a single rule based on its type.
|
||||
|
||||
@@ -226,10 +228,6 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
apply_artist_rule(rule)
|
||||
end
|
||||
|
||||
def apply_rule(%ScrobbleRule{type: type}) do
|
||||
{:error, "Invalid rule type: #{type}"}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Applies all enabled rules.
|
||||
|
||||
@@ -242,17 +240,12 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
def apply_all_rules do
|
||||
rules = list_enabled_rules()
|
||||
|
||||
results =
|
||||
Enum.map(rules, fn rule ->
|
||||
case apply_rule(rule) do
|
||||
{:ok, count} -> {:ok, {rule.type, rule.match_value, count}}
|
||||
{:error, reason} -> {:error, {rule.type, rule.match_value, reason}}
|
||||
end
|
||||
end)
|
||||
|
||||
{:ok, results}
|
||||
rescue
|
||||
e -> {:error, "Failed to apply rules: #{Exception.message(e)}"}
|
||||
Enum.map(rules, fn rule ->
|
||||
case apply_rule(rule) do
|
||||
{:ok, count} -> {:ok, {rule.type, rule.match_value, count}}
|
||||
{:error, reason} -> {:error, {rule.type, rule.match_value, reason}}
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -274,10 +267,6 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
Repo.one(query) || 0
|
||||
end
|
||||
|
||||
def count_album_matches(%ScrobbleRule{type: type}) do
|
||||
{:error, "Invalid rule type: #{type}. Expected 'album'"}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Counts how many tracks would be affected by an artist rule.
|
||||
|
||||
@@ -297,10 +286,6 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
Repo.one(query) || 0
|
||||
end
|
||||
|
||||
def count_artist_matches(%ScrobbleRule{type: type}) do
|
||||
{:error, "Invalid rule type: #{type}. Expected 'artist'"}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Counts how many tracks would be affected by a rule.
|
||||
|
||||
@@ -317,8 +302,4 @@ defmodule MusicLibrary.ScrobbleRules do
|
||||
def count_rule_matches(%ScrobbleRule{type: "artist"} = rule) do
|
||||
count_artist_matches(rule)
|
||||
end
|
||||
|
||||
def count_rule_matches(%ScrobbleRule{type: type}) do
|
||||
{:error, "Invalid rule type: #{type}"}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,14 +16,8 @@ defmodule MusicLibrary.ScrobbleRules.Worker do
|
||||
def perform(%Oban.Job{args: _}) do
|
||||
Logger.info("Starting scrobble rules application")
|
||||
|
||||
case ScrobbleRules.apply_all_rules() do
|
||||
{:ok, results} ->
|
||||
log_results(results)
|
||||
|
||||
{:error, reason} ->
|
||||
Logger.error("Failed to apply scrobble rules: #{inspect(reason)}")
|
||||
{:error, reason}
|
||||
end
|
||||
results = ScrobbleRules.apply_all_rules()
|
||||
log_results(results)
|
||||
end
|
||||
|
||||
defp log_results(results) do
|
||||
|
||||
@@ -77,25 +77,20 @@ defmodule MusicLibraryWeb.ScrobbleRulesLive.Index do
|
||||
|
||||
@impl true
|
||||
def handle_event("apply_all_rules", _params, socket) do
|
||||
case ScrobbleRules.apply_all_rules() do
|
||||
{:ok, results} ->
|
||||
total_updated =
|
||||
results
|
||||
|> Enum.filter(fn {status, _} -> status == :ok end)
|
||||
|> Enum.map(fn {:ok, {_, _, count}} -> count end)
|
||||
|> Enum.sum()
|
||||
results = ScrobbleRules.apply_all_rules()
|
||||
|
||||
message =
|
||||
gettext("All rules applied successfully. Updated %{count} tracks total.",
|
||||
count: total_updated
|
||||
)
|
||||
total_updated =
|
||||
results
|
||||
|> Enum.filter(fn {status, _} -> status == :ok end)
|
||||
|> Enum.map(fn {:ok, {_, _, count}} -> count end)
|
||||
|> Enum.sum()
|
||||
|
||||
{:noreply, put_flash(socket, :info, message)}
|
||||
message =
|
||||
gettext("All rules applied successfully. Updated %{count} tracks total.",
|
||||
count: total_updated
|
||||
)
|
||||
|
||||
{:error, reason} ->
|
||||
message = gettext("Error applying rules: %{reason}", reason: reason)
|
||||
{:noreply, put_flash(socket, :error, message)}
|
||||
end
|
||||
{:noreply, put_flash(socket, :info, message)}
|
||||
end
|
||||
|
||||
defp rule_type_badge(type) do
|
||||
|
||||
Reference in New Issue
Block a user