From 439ebff297027770b22588774508f60dae49794e Mon Sep 17 00:00:00 2001 From: Pascal Repond Date: Wed, 21 Jan 2026 21:29:08 +0100 Subject: [PATCH] feat: importing from an existing media opens the correct tab and pre-fills the search --- src/core/views.py | 23 +++++- src/templates/base/media_edit.html | 2 +- src/templates/base/media_import.html | 25 ++++--- src/tests/core/test_views.py | 105 +++++++++++++++++++++++++++ 4 files changed, 142 insertions(+), 13 deletions(-) diff --git a/src/core/views.py b/src/core/views.py index 45b8525..dd013d4 100644 --- a/src/core/views.py +++ b/src/core/views.py @@ -341,10 +341,27 @@ def _fetch_musicbrainz_data(mbid: str) -> dict | None: @login_required def media_import(request): - """Display TMDB search page for importing media.""" - # Optional: if editing existing media, pass media_id to template + """Display search page for importing media metadata.""" media_id = request.GET.get("media_id") - context = {"media_id": media_id} + media_type = request.GET.get("media_type", "") + title = request.GET.get("title", "") + + # Map media_type to the appropriate import source + source_mapping = { + "FILM": "tmdb", + "TV": "tmdb", + "GAME": "igdb", + "BOOK": "openlibrary", + "COMIC": "openlibrary", + "MUSIC": "musicbrainz", + } + default_source = source_mapping.get(media_type, "tmdb") + + context = { + "media_id": media_id, + "default_source": default_source, + "default_query": title, + } return render(request, "base/media_import.html", context) diff --git a/src/templates/base/media_edit.html b/src/templates/base/media_edit.html index 71e9286..1f436e5 100644 --- a/src/templates/base/media_edit.html +++ b/src/templates/base/media_edit.html @@ -35,7 +35,7 @@

- {% lucide "download" class="w-4 h-4" %} diff --git a/src/templates/base/media_import.html b/src/templates/base/media_import.html index 57af752..88c2059 100644 --- a/src/templates/base/media_import.html +++ b/src/templates/base/media_import.html @@ -17,7 +17,7 @@

{% translate "Import metadata" %}

class="tab" aria-label="{% translate 'Movies & TV' %}" id="tab-tmdb" - checked + {% if default_source == "tmdb" or not default_source %}checked{% endif %} autocomplete="off" hx-on:click="document.getElementById('source-tmdb').classList.remove('hidden'); document.getElementById('source-igdb').classList.add('hidden'); document.getElementById('source-openlibrary').classList.add('hidden'); document.getElementById('source-musicbrainz').classList.add('hidden'); document.getElementById('import-results').innerHTML='';"> {% translate "Import metadata" %} class="tab" aria-label="{% translate 'Video games' %}" id="tab-igdb" + {% if default_source == "igdb" %}checked{% endif %} autocomplete="off" hx-on:click="document.getElementById('source-igdb').classList.remove('hidden'); document.getElementById('source-tmdb').classList.add('hidden'); document.getElementById('source-openlibrary').classList.add('hidden'); document.getElementById('source-musicbrainz').classList.add('hidden'); document.getElementById('import-results').innerHTML='';"> {% translate "Import metadata" %} class="tab" aria-label="{% translate 'Books' %}" id="tab-openlibrary" + {% if default_source == "openlibrary" %}checked{% endif %} autocomplete="off" hx-on:click="document.getElementById('source-openlibrary').classList.remove('hidden'); document.getElementById('source-tmdb').classList.add('hidden'); document.getElementById('source-igdb').classList.add('hidden'); document.getElementById('source-musicbrainz').classList.add('hidden'); document.getElementById('import-results').innerHTML='';"> {% translate "Import metadata" %} class="tab" aria-label="{% translate 'Music' %}" id="tab-musicbrainz" + {% if default_source == "musicbrainz" %}checked{% endif %} autocomplete="off" hx-on:click="document.getElementById('source-musicbrainz').classList.remove('hidden'); document.getElementById('source-tmdb').classList.add('hidden'); document.getElementById('source-igdb').classList.add('hidden'); document.getElementById('source-openlibrary').classList.add('hidden'); document.getElementById('import-results').innerHTML='';">
{# TMDB Search (Movies & TV) #} -
+
{% lucide "film" class="w-5 h-5" %} @@ -56,9 +59,10 @@

{% translate "Import metadata" %}

name="q" class="input join-item w-full" placeholder="{% translate 'Search...' %}" + value="{{ default_query }}" autocomplete="off" hx-get="{% url 'tmdb_search_htmx' %}{% if media_id %}?media_id={{ media_id }}{% endif %}" - hx-trigger="keyup changed delay:400ms, search" + hx-trigger="keyup changed delay:400ms, search{% if default_query and default_source == 'tmdb' %}, load{% endif %}" hx-target="#import-results" hx-include="#tmdb-lang" hx-indicator="#search-spinner" /> @@ -84,7 +88,7 @@

{% translate "Import metadata" %}

{# IGDB Search (Video games) #} -