diff --git a/config/config.exs b/config/config.exs index 3444203f..6d6efbc6 100644 --- a/config/config.exs +++ b/config/config.exs @@ -52,11 +52,15 @@ config :music_library, LastFm, refresh_interval: System.convert_time_unit(300, :second, :millisecond), api_key: "change me", shared_secret: "change me", - user_agent: user_agent + user_agent: user_agent, + api_cooldown: 500 -config :music_library, MusicBrainz, user_agent: user_agent +config :music_library, MusicBrainz, user_agent: user_agent, api_cooldown: 500 -config :music_library, Discogs, personal_access_token: "change me", user_agent: user_agent +config :music_library, Discogs, + personal_access_token: "change me", + user_agent: user_agent, + api_cooldown: 1000 config :music_library, Wikipedia, user_agent: user_agent diff --git a/config/test.exs b/config/test.exs index 6cd3a2c2..b3dc448b 100644 --- a/config/test.exs +++ b/config/test.exs @@ -43,19 +43,22 @@ config :music_library, LastFm, req_options: [ plug: {Req.Test, LastFm.API}, max_retries: 0 - ] + ], + api_cooldown: 0 config :music_library, MusicBrainz, req_options: [ plug: {Req.Test, MusicBrainz.API}, max_retries: 0 - ] + ], + api_cooldown: 0 config :music_library, Discogs, req_options: [ plug: {Req.Test, Discogs.API}, max_retries: 0 - ] + ], + api_cooldown: 0 config :music_library, Wikipedia, req_options: [ diff --git a/lib/discogs.ex b/lib/discogs.ex index 4dc1c874..38a10a25 100644 --- a/lib/discogs.ex +++ b/lib/discogs.ex @@ -13,5 +13,7 @@ defmodule Discogs do API.get_artist_image(url, discogs_config) end + def api_cooldown, do: discogs_config().api_cooldown + defp discogs_config, do: Discogs.Config.resolve(:music_library) end diff --git a/lib/discogs/config.ex b/lib/discogs/config.ex index e05dfefd..aea0cee8 100644 --- a/lib/discogs/config.ex +++ b/lib/discogs/config.ex @@ -2,13 +2,15 @@ defmodule Discogs.Config do @type t :: %__MODULE__{ personal_access_token: String.t(), user_agent: String.t(), - req_options: Keyword.t() + req_options: Keyword.t(), + api_cooldown: non_neg_integer() } @enforce_keys [:personal_access_token] defstruct personal_access_token: "", user_agent: "change me", - req_options: [] + req_options: [], + api_cooldown: 1000 @schema NimbleOptions.new!( personal_access_token: [ @@ -24,6 +26,11 @@ defmodule Discogs.Config do type: :keyword_list, required: false, default: [] + ], + api_cooldown: [ + type: :integer, + required: false, + default: 1000 ] ) diff --git a/lib/last_fm.ex b/lib/last_fm.ex index a76780f2..2e32d224 100644 --- a/lib/last_fm.ex +++ b/lib/last_fm.ex @@ -93,5 +93,7 @@ defmodule LastFm do "https://www.last.fm/api/auth/?api_key=" <> last_fm_config.api_key end + def api_cooldown, do: last_fm_config().api_cooldown + defp last_fm_config, do: LastFm.Config.resolve(:music_library) end diff --git a/lib/last_fm/config.ex b/lib/last_fm/config.ex index a7822477..870ce38b 100644 --- a/lib/last_fm/config.ex +++ b/lib/last_fm/config.ex @@ -6,7 +6,8 @@ defmodule LastFm.Config do auto_refresh: boolean(), refresh_interval: pos_integer(), user_agent: String.t(), - req_options: Keyword.t() + req_options: Keyword.t(), + api_cooldown: non_neg_integer() } @enforce_keys [:api_key, :user] @@ -16,7 +17,8 @@ defmodule LastFm.Config do auto_refresh: true, refresh_interval: 60_000, user_agent: "change me", - req_options: [] + req_options: [], + api_cooldown: 500 @schema NimbleOptions.new!( api_key: [ @@ -50,6 +52,11 @@ defmodule LastFm.Config do type: :keyword_list, required: false, default: [] + ], + api_cooldown: [ + type: :integer, + required: false, + default: 500 ] ) diff --git a/lib/music_brainz.ex b/lib/music_brainz.ex index ee6c8eec..ae91a2b5 100644 --- a/lib/music_brainz.ex +++ b/lib/music_brainz.ex @@ -36,5 +36,7 @@ defmodule MusicBrainz do API.get_artist(musicbrainz_id, music_brainz_config()) end + def api_cooldown, do: music_brainz_config().api_cooldown + defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library) end diff --git a/lib/music_brainz/config.ex b/lib/music_brainz/config.ex index 64924e8e..f6c2e840 100644 --- a/lib/music_brainz/config.ex +++ b/lib/music_brainz/config.ex @@ -1,12 +1,14 @@ defmodule MusicBrainz.Config do @type t :: %__MODULE__{ user_agent: String.t(), - req_options: Keyword.t() + req_options: Keyword.t(), + api_cooldown: non_neg_integer() } @enforce_keys [:user_agent] defstruct user_agent: "change me", - req_options: [] + req_options: [], + api_cooldown: 500 @schema NimbleOptions.new!( user_agent: [ @@ -18,6 +20,11 @@ defmodule MusicBrainz.Config do type: :keyword_list, required: false, default: [] + ], + api_cooldown: [ + type: :integer, + required: false, + default: 500 ] ) diff --git a/lib/music_library/worker/artist_refresh_discogs_data.ex b/lib/music_library/worker/artist_refresh_discogs_data.ex index 28c21eb0..85ee2f8b 100644 --- a/lib/music_library/worker/artist_refresh_discogs_data.ex +++ b/lib/music_library/worker/artist_refresh_discogs_data.ex @@ -5,7 +5,7 @@ defmodule MusicLibrary.Worker.ArtistRefreshDiscogsData do def perform(%Oban.Job{args: %{"id" => artist_info_id}}) do result = MusicLibrary.Artists.refresh_discogs_data(artist_info_id) - Process.sleep(1_000) + Process.sleep(Discogs.api_cooldown()) result end diff --git a/lib/music_library/worker/artist_refresh_music_brainz_data.ex b/lib/music_library/worker/artist_refresh_music_brainz_data.ex index 2fcc550c..35d61576 100644 --- a/lib/music_library/worker/artist_refresh_music_brainz_data.ex +++ b/lib/music_library/worker/artist_refresh_music_brainz_data.ex @@ -5,7 +5,7 @@ defmodule MusicLibrary.Worker.ArtistRefreshMusicBrainzData do def perform(%Oban.Job{args: %{"id" => artist_info_id}}) do result = MusicLibrary.Artists.refresh_musicbrainz_data(artist_info_id) - Process.sleep(500) + Process.sleep(MusicBrainz.api_cooldown()) result end diff --git a/lib/music_library/worker/fetch_artist_last_fm_data.ex b/lib/music_library/worker/fetch_artist_last_fm_data.ex index 6fc4a319..53f0754f 100644 --- a/lib/music_library/worker/fetch_artist_last_fm_data.ex +++ b/lib/music_library/worker/fetch_artist_last_fm_data.ex @@ -9,7 +9,7 @@ defmodule MusicLibrary.Worker.FetchArtistLastFmData do error -> error end - Process.sleep(500) + Process.sleep(LastFm.api_cooldown()) result end diff --git a/lib/music_library/worker/record_refresh_music_brainz_data.ex b/lib/music_library/worker/record_refresh_music_brainz_data.ex index 90afd1ec..4b38853a 100644 --- a/lib/music_library/worker/record_refresh_music_brainz_data.ex +++ b/lib/music_library/worker/record_refresh_music_brainz_data.ex @@ -10,7 +10,7 @@ defmodule MusicLibrary.Worker.RecordRefreshMusicBrainzData do MusicLibrary.Records.notify_update(updated_record) end - Process.sleep(500) + Process.sleep(MusicBrainz.api_cooldown()) result end