diff --git a/backend/channel/serializers.py b/backend/channel/serializers.py index 568e4eed..7b2a9ec8 100644 --- a/backend/channel/serializers.py +++ b/backend/channel/serializers.py @@ -90,6 +90,7 @@ class ChannelNavSerializer(serializers.Serializer): """serialize channel navigation""" has_pending = serializers.BooleanField() + has_ignored = serializers.BooleanField() has_playlists = serializers.BooleanField() has_videos = serializers.BooleanField() has_streams = serializers.BooleanField() diff --git a/backend/channel/src/nav.py b/backend/channel/src/nav.py index 6ff3e047..44b15f8b 100644 --- a/backend/channel/src/nav.py +++ b/backend/channel/src/nav.py @@ -13,6 +13,7 @@ class ChannelNav: """build nav items""" nav = { "has_pending": self._get_has_pending(), + "has_ignored": self._get_has_ignored(), "has_playlists": self._get_has_playlists(), } nav.update(self._get_vid_types()) @@ -63,6 +64,24 @@ class ChannelNav: return bool(response["hits"]["hits"]) + def _get_has_ignored(self): + """Check if there are ignored videos in the download queue""" + data = { + "size": 1, + "query": { + "bool": { + "must": [ + {"term": {"status": {"value": "ignore"}}}, + {"term": {"channel_id": {"value": self.channel_id}}}, + ] + } + }, + "_source": False, + } + response, _ = ElasticWrap("ta_download/_search").get(data=data) + + return bool(response["hits"]["hits"]) + def _get_has_playlists(self): """check if channel has playlists""" path = "ta_playlist/_search" diff --git a/frontend/src/api/loader/loadChannelNav.ts b/frontend/src/api/loader/loadChannelNav.ts index 26c97c10..361e0d38 100644 --- a/frontend/src/api/loader/loadChannelNav.ts +++ b/frontend/src/api/loader/loadChannelNav.ts @@ -5,6 +5,7 @@ export type ChannelNavResponseType = { has_shorts: boolean; has_playlists: boolean; has_pending: boolean; + has_ignored: boolean; }; const loadChannelNav = async (youtubeChannelId: string) => { diff --git a/frontend/src/configuration/routes/RouteList.ts b/frontend/src/configuration/routes/RouteList.ts index 41f36558..df1513a5 100644 --- a/frontend/src/configuration/routes/RouteList.ts +++ b/frontend/src/configuration/routes/RouteList.ts @@ -10,7 +10,8 @@ const Routes = { Playlists: '/playlist/', Playlist: (id: string) => `/playlist/${id}`, Downloads: '/downloads/', - DownloadsByChannelId: (channelId: string) => `/downloads/?channel=${channelId}`, + DownloadsByChannelId: (channelId: string) => `/downloads/?channel=${channelId}&ignored=false`, + IgnoredByChannelId: (channelId: string) => `/downloads/?channel=${channelId}&ignored=true`, Search: '/search/', SettingsDashboard: '/settings/', SettingsUser: '/settings/user/', diff --git a/frontend/src/pages/ChannelBase.tsx b/frontend/src/pages/ChannelBase.tsx index 05bf21af..aba6e579 100644 --- a/frontend/src/pages/ChannelBase.tsx +++ b/frontend/src/pages/ChannelBase.tsx @@ -27,7 +27,7 @@ const ChannelBase = () => { const { data: channelNavData } = channelNav ?? {}; const channel = channelResponseData; - const { has_streams, has_shorts, has_playlists, has_pending } = channelNavData || {}; + const { has_streams, has_shorts, has_playlists, has_pending, has_ignored } = channelNavData || {}; useEffect(() => { (async () => { @@ -84,6 +84,11 @@ const ChannelBase = () => {