quintodrome/core/agents
Bastiaan van der Plaat 93040b3f85
feat(agents): Add Deezer API artist image provider agent (#4180)
* feat(agents): Add Deezer API artist image provider agent

* fix(agents): Use proper naming convention of consts

* fix(agents): Check if json test data can be read

* fix(agents): Use underscores for unused function arguments

* fix(agents): Move int literal to deezerArtistSearchLimit const

* feat: add Deezer configuration option to disable it.

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
Co-authored-by: Deluan Quintão <deluan@navidrome.org>
2025-06-28 17:50:06 -04:00
..
deezer feat(agents): Add Deezer API artist image provider agent (#4180) 2025-06-28 17:50:06 -04:00
lastfm feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
listenbrainz feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
spotify fix(server): remove misleading "Agent not available" warning. 2025-03-05 14:11:44 -08:00
agents.go feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
agents_plugin_test.go feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
agents_suite_test.go Rename log.LevelCritical to log.LevelFatal 2022-12-21 14:53:36 -05:00
agents_test.go feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
interfaces.go feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
local_agent.go Get album info (when available) from Last.fm, add getAlbumInfo endpoint (#2061) 2023-01-17 20:22:54 -05:00
README.md Add local agent, only for images 2023-01-13 22:18:34 -05:00
session_keys.go Listenbrainz scrobbling (#1424) 2021-10-30 12:17:42 -04:00
session_keys_test.go Upgrade Ginkgo to V2 2022-07-26 16:53:17 -04:00

This folder abstracts metadata lookup into "agents". Each agent can be implemented to get as much info as the external source provides, by using a granular set of interfaces (see interfaces).

A new agent must comply with these simple implementation rules:

  1. Implement the AgentName() method. It just returns the name of the agent for logging purposes.
  2. Implement one or more of the *Retriever() interfaces. That's where the agent's logic resides.
  3. Register itself (in its init() function).

For an agent to be used it needs to be listed in the Agents config option (default is "lastfm,spotify"). The order dictates the priority of the agents

For a simple Agent example, look at the local_agent agent source code.