fix bug which causes only recommended shows/movies to be displayed when trying to add media

This commit is contained in:
maxDorninger
2025-06-29 11:24:12 +02:00
parent d446747e3b
commit 1732bde281
3 changed files with 55 additions and 48 deletions

View File

@@ -5,6 +5,7 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.idea" /> <excludeFolder url="file://$MODULE_DIR$/.idea" />
<excludeFolder url="file://$MODULE_DIR$/.venv" />
</content> </content>
<orderEntry type="jdk" jdkName="uv (MediaManager) (2)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="uv (MediaManager) (2)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />

View File

@@ -18,16 +18,20 @@
let searchTerm: string = $state(''); let searchTerm: string = $state('');
let metadataProvider: string = $state('tmdb'); let metadataProvider: string = $state('tmdb');
let results: MetaDataProviderSearchResult[] | null = $state(null); let results: MetaDataProviderSearchResult[] | null = $state(null);
onMount(search);
async function search() { onMount(() => {
search("");
});
async function search(query: string) {
let url = new URL(apiUrl + '/movies/recommended'); let url = new URL(apiUrl + '/movies/recommended');
if (searchTerm.length > 0) { if (query.length > 0) {
let url = new URL(apiUrl + '/movies/search'); url = new URL(apiUrl + '/movies/search');
url.searchParams.append('query', searchTerm); url.searchParams.append('query', query);
url.searchParams.append('metadata_provider', metadataProvider); toast.info(`Searching for "${query}" using ${metadataProvider.toUpperCase()}...`);
toast.info(`Searching for "${searchTerm}" using ${metadataProvider.toUpperCase()}...`);
} }
url.searchParams.append('metadata_provider', metadataProvider);
try { try {
const response = await fetch(url, { const response = await fetch(url, {
@@ -39,13 +43,14 @@
throw new Error(`Search failed: ${response.status} ${errorText || response.statusText}`); throw new Error(`Search failed: ${response.status} ${errorText || response.statusText}`);
} }
results = await response.json(); results = await response.json();
if (searchTerm.length === 0) { console.log("Fetched results:", results);
if (query.length === 0) {
return; return;
} }
if (results && results.length > 0) { if (results && results.length > 0) {
toast.success(`Found ${results.length} result(s) for "${searchTerm}".`); toast.success(`Found ${results.length} result(s) for "${query}".`);
} else { } else {
toast.info(`No results found for "${searchTerm}".`); toast.info(`No results found for "${query}".`);
} }
} catch (error) { } catch (error) {
const errorMessage = const errorMessage =
@@ -120,24 +125,22 @@
</Collapsible.Root> </Collapsible.Root>
</section> </section>
<section> <section>
<Button onclick={search} type="submit">Search</Button> <Button onclick={() => search(searchTerm)} type="submit">Search</Button>
</section> </section>
</div> </div>
<Separator class="my-8" /> <Separator class="my-8" />
{#if results != null} {#if results && results.length === 0}
{#if results.length === 0} <h3 class="mx-auto">No Shows found.</h3>
<h3 class="mx-auto">No Shows found.</h3> {:else if results}
{:else} <div
<div class="grid w-full auto-rows-min gap-4 sm:grid-cols-1
class="grid w-full auto-rows-min gap-4 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5"
md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5" >
> {#each results as result}
{#each results as result} <AddMediaCard {result} isShow={false} />
<AddMediaCard {result} isShow={false} /> {/each}
{/each} </div>
</div>
{/if}
{/if} {/if}
</div> </div>

View File

@@ -18,15 +18,19 @@
let searchTerm: string = $state(''); let searchTerm: string = $state('');
let metadataProvider: string = $state('tmdb'); let metadataProvider: string = $state('tmdb');
let results: MetaDataProviderSearchResult[] | null = $state(null); let results: MetaDataProviderSearchResult[] | null = $state(null);
onMount(search);
async function search() { onMount(() => {
search("");
});
async function search(query: string) {
let url = new URL(apiUrl + '/tv/recommended'); let url = new URL(apiUrl + '/tv/recommended');
if (searchTerm.length > 0) { if (query.length > 0) {
let url = new URL(apiUrl + '/tv/search'); url = new URL(apiUrl + '/tv/search');
url.searchParams.append('query', searchTerm); url.searchParams.append('query', query);
url.searchParams.append('metadata_provider', metadataProvider); toast.info(`Searching for "${query}" using ${metadataProvider.toUpperCase()}...`);
toast.info(`Searching for "${searchTerm}" using ${metadataProvider.toUpperCase()}...`);
} }
url.searchParams.append('metadata_provider', metadataProvider);
try { try {
const response = await fetch(url, { const response = await fetch(url, {
@@ -38,13 +42,14 @@
throw new Error(`Search failed: ${response.status} ${errorText || response.statusText}`); throw new Error(`Search failed: ${response.status} ${errorText || response.statusText}`);
} }
results = await response.json(); results = await response.json();
if (searchTerm.length === 0) { console.log("Fetched results:", results);
if (query.length === 0) {
return; return;
} }
if (results && results.length > 0) { if (results && results.length > 0) {
toast.success(`Found ${results.length} result(s) for "${searchTerm}".`); toast.success(`Found ${results.length} result(s) for "${query}".`);
} else { } else {
toast.info(`No results found for "${searchTerm}".`); toast.info(`No results found for "${query}".`);
} }
} catch (error) { } catch (error) {
const errorMessage = const errorMessage =
@@ -119,24 +124,22 @@
</Collapsible.Root> </Collapsible.Root>
</section> </section>
<section> <section>
<Button onclick={search} type="submit">Search</Button> <Button onclick={() => search(searchTerm)} type="submit">Search</Button>
</section> </section>
</div> </div>
<Separator class="my-8" /> <Separator class="my-8" />
{#if results != null} {#if results && results.length === 0}
{#if results.length === 0} <h3 class="mx-auto">No Shows found.</h3>
<h3 class="mx-auto">No Shows found.</h3> {:else if results}
{:else} <div
<div class="grid w-full auto-rows-min gap-4 sm:grid-cols-1
class="grid w-full auto-rows-min gap-4 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5"
md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5" >
> {#each results as result}
{#each results as result} <AddMediaCard {result} isShow={true} />
<AddMediaCard {result} /> {/each}
{/each} </div>
</div>
{/if}
{/if} {/if}
</div> </div>