pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add top 10 list

Pas 49e1423a dcbf21f3

+42 -11
+2 -1
src/assets/locales/en.json
··· 1442 1442 "genreMovies": "{{genre}} Movies", 1443 1443 "genreShows": "{{genre}} Shows", 1444 1444 "categoryMovies": "{{category}} Movies", 1445 - "categoryShows": "{{category}} Shows" 1445 + "categoryShows": "{{category}} Shows", 1446 + "top10": "Top 10" 1446 1447 }, 1447 1448 "change": "Change", 1448 1449 "more": "View more"
+1
src/backend/metadata/traktApi.ts
··· 303 303 // Popular content 304 304 export const getPopularTVShows = () => fetchFromTrakt("/populartv"); 305 305 export const getPopularMovies = () => fetchFromTrakt("/popularmovies"); 306 + export const getTop10Movies = () => fetchFromTrakt("/top10"); 306 307 307 308 // Discovery content used for the featured carousel 308 309 export const getDiscoverContent = () =>
+19 -10
src/pages/discover/components/MediaCarousel.tsx
··· 192 192 ]); 193 193 194 194 // Fetch media using our hook 195 - const { media, sectionTitle, actualContentType } = useDiscoverMedia({ 196 - contentType, 197 - mediaType, 198 - id: selectedProviderId || selectedGenreId || selectedRecommendationId, 199 - fallbackType: content.fallback, 200 - genreName: selectedGenreName, 201 - providerName: selectedProviderName, 202 - mediaTitle: selectedRecommendationTitle, 203 - isCarouselView: true, 204 - }); 195 + const { media, sectionTitle, actualContentType, error, isLoading } = 196 + useDiscoverMedia({ 197 + contentType, 198 + mediaType, 199 + id: selectedProviderId || selectedGenreId || selectedRecommendationId, 200 + fallbackType: content.fallback, 201 + genreName: selectedGenreName, 202 + providerName: selectedProviderName, 203 + mediaTitle: selectedRecommendationTitle, 204 + isCarouselView: true, 205 + }); 206 + 207 + // Hide section if there's an error or no content (after loading is complete) 208 + const shouldHide = !isLoading && (error || media.length === 0); 205 209 206 210 // Find active button 207 211 const activeButton = React.useMemo(() => { ··· 303 307 mediaType, 304 308 actualContentType, 305 309 ]); 310 + 311 + // Hide the entire section if there's an error or no content 312 + if (shouldHide) { 313 + return null; 314 + } 306 315 307 316 return ( 308 317 <div>
+13
src/pages/discover/discoverContent.tsx
··· 76 76 ); 77 77 } 78 78 79 + // Top 10 Movies 80 + carousels.push( 81 + <LazyMediaCarousel 82 + key="movie-top10" 83 + content={{ type: "top10" }} 84 + isTVShow={false} 85 + carouselRefs={carouselRefs} 86 + onShowDetails={handleShowDetails} 87 + moreContent 88 + priority={carousels.length < 2} 89 + />, 90 + ); 91 + 79 92 // Latest Releases 80 93 carousels.push( 81 94 <LazyMediaCarousel
+6
src/pages/discover/hooks/useDiscoverMedia.ts
··· 21 21 getParamountTVShows, 22 22 getPrimeMovies, 23 23 getPrimeTVShows, 24 + getTop10Movies, 24 25 } from "@/backend/metadata/traktApi"; 25 26 import { paginateResults } from "@/backend/metadata/traktFunctions"; 26 27 import { TMDBContentTypes } from "@/backend/metadata/types/tmdb"; ··· 479 480 } else { 480 481 throw new Error("nowPlaying is only available for movies"); 481 482 } 483 + break; 484 + 485 + case "top10": 486 + data = await fetchTraktMedia(getTop10Movies); 487 + setSectionTitle(t("discover.carousel.title.top10")); 482 488 break; 483 489 484 490 case "latest":
+1
src/pages/discover/types/discover.ts
··· 6 6 | "latest" 7 7 | "latest4k" 8 8 | "latesttv" 9 + | "top10" 9 10 | "genre" 10 11 | "provider" 11 12 | "editorPicks"