diff --git a/materialious/src/lib/api/index.ts b/materialious/src/lib/api/index.ts index 5fbb11fa..e366976c 100644 --- a/materialious/src/lib/api/index.ts +++ b/materialious/src/lib/api/index.ts @@ -160,12 +160,10 @@ export async function searchChannelContent( channelId: string, search: string, fetchOptions?: RequestInit -): Promise { +): Promise { // Not Implemented in YTjs if (isYTBackend()) { - return { - videos: [] - }; + return []; } return searchChannelContentInvidious(channelId, search, fetchOptions); diff --git a/materialious/src/lib/api/invidious/channel.ts b/materialious/src/lib/api/invidious/channel.ts index 88fbb5e6..cd40f118 100644 --- a/materialious/src/lib/api/invidious/channel.ts +++ b/materialious/src/lib/api/invidious/channel.ts @@ -1,5 +1,5 @@ import { associateAvatar } from '$lib/thumbnail'; -import type { ChannelContent, ChannelOptions, ChannelPage } from '../model'; +import type { ChannelContent, ChannelOptions, ChannelPage, Video } from '../model'; import { buildPath, fetchErrorHandle } from './request'; export async function getChannelInvidious( @@ -38,7 +38,7 @@ export async function searchChannelContentInvidious( channelId: string, search: string, fetchOptions?: RequestInit -): Promise { +): Promise { const path = buildPath(`channels/${channelId}/search`); path.searchParams.set('q', search); diff --git a/materialious/src/routes/(app)/channel/[slug]/+page.svelte b/materialious/src/routes/(app)/channel/[slug]/+page.svelte index cc8947e9..06cbe350 100644 --- a/materialious/src/routes/(app)/channel/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/channel/[slug]/+page.svelte @@ -26,12 +26,26 @@ let displayContent: ChannelContent | undefined = $state(undefined); + let channelSearchDebounce: ReturnType; + onMount(() => { displayContent = $channelCacheStore[page.params.slug].displayContent.videos; }); async function searchChannel() { - displayContent = await searchChannelContent(page.params.slug, channelSearch); + if (channelSearchDebounce) clearTimeout(channelSearchDebounce); + + if (channelSearch.trim() === '') { + displayContent = $channelCacheStore[page.params.slug].displayContent.videos; + return; + } + + channelSearchDebounce = setTimeout(async () => { + displayContent = { + videos: await searchChannelContent(page.params.slug, channelSearch) + }; + console.log(displayContent); + }, 200); } async function loadMore(event: InfiniteEvent) { @@ -160,7 +174,7 @@
-
+
{#if !isYTBackend()} -
+
{#if showSearch} -
+
search {/if} - {:else} diff --git a/materialious/src/routes/(app)/playlist/[slug]/+page.svelte b/materialious/src/routes/(app)/playlist/[slug]/+page.svelte index e2040707..f5d50643 100644 --- a/materialious/src/routes/(app)/playlist/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/playlist/[slug]/+page.svelte @@ -22,7 +22,7 @@ while (true) { const historyPage = await getWatchHistory({ page, videoIds }); - if (historyPage.length === 0) break; + if (historyPage.length === 0 || page > 999) break; lastHistory = historyPage;