soulsync/core/search
BoulderBadgeDad b2de64e87d Search: extend pasted-link resolution to Discogs (#813)
#775 already resolves pasted Spotify / Apple / MusicBrainz / Deezer links to an
exact artist/album/track on the Search page. Added Discogs to that set (the one
source in the request not already covered; Amazon left out per request).

- by_id resolver: discogs in SUPPORTED_SOURCES + _KNOWN_HOSTS; parse
  /artist/<id>-slug, /release/<id>-slug, /master/<id>-slug (master→album), and
  strip the slug to the leading numeric id. Discogs has no standalone track
  URLs (tracks live inside a release), so artist + album resolve.
- Fetch dispatch: discogs albums use get_album(include_tracks=False) like
  itunes/musicbrainz; artists use get_artist; both already return the common
  normalized card shape. Updated the not-a-link hint to mention Discogs.

Frontend needs no change — it adopts whatever source the resolver returns and
Discogs is already a search source. Tests: parse release/master/artist
(slug-stripped, scheme-less) + resolve release→get_album(numeric id) and
artist→get_artist. 43 by_id tests pass.
2026-06-08 14:37:48 -07:00
..
__init__.py Lift /api/search and /api/enhanced-search/* into core/search/ 2026-04-27 15:07:11 -07:00
basic.py Basic search: visual overhaul + per-source picker in hybrid mode 2026-05-28 10:22:07 -07:00
by_id.py Search: extend pasted-link resolution to Discogs (#813) 2026-06-08 14:37:48 -07:00
cache.py Search cache: preserve falsy provider returns to match original behavior 2026-04-27 15:19:52 -07:00
library_check.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
orchestrator.py #798: Spotify Free metadata mode — backend (opt-in, shared spotify tables) 2026-06-05 13:32:37 -07:00
sources.py feat(import): show MusicBrainz variants 2026-05-24 21:29:22 +03:00
stream.py Cin-6: Rename soulseek_client global → download_orchestrator 2026-05-04 23:23:32 -07:00