diff --git a/assets/rating-icons/imdb.png b/assets/rating-icons/imdb.png deleted file mode 100644 index 716db22..0000000 Binary files a/assets/rating-icons/imdb.png and /dev/null differ diff --git a/src/assets/dolbyvision.png b/src/assets/dolbyvision.png deleted file mode 100644 index b72abea..0000000 Binary files a/src/assets/dolbyvision.png and /dev/null differ diff --git a/src/assets/qualitybadge/VISION.svg b/src/assets/qualitybadge/VISION.svg deleted file mode 100644 index f5783ac..0000000 --- a/src/assets/qualitybadge/VISION.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/assets/tmdb_logo.png b/src/assets/tmdb_logo.png new file mode 100644 index 0000000..47b79fd Binary files /dev/null and b/src/assets/tmdb_logo.png differ diff --git a/src/components/metadata/MetadataDetails.tsx b/src/components/metadata/MetadataDetails.tsx index 666a9b1..a51e53c 100644 --- a/src/components/metadata/MetadataDetails.tsx +++ b/src/components/metadata/MetadataDetails.tsx @@ -233,21 +233,10 @@ const MetadataDetails: React.FC = ({ )} {metadata.imdbRating && !isMDBEnabled && ( - {metadata.imdbRating} diff --git a/src/components/metadata/QualityBadge.tsx b/src/components/metadata/QualityBadge.tsx index b0b445a..88fd27a 100644 --- a/src/components/metadata/QualityBadge.tsx +++ b/src/components/metadata/QualityBadge.tsx @@ -1,6 +1,5 @@ import React from 'react'; import HDSvg from '../../assets/qualitybadge/HD.svg'; -import VISIONSvg from '../../assets/qualitybadge/VISION.svg'; import ADSvg from '../../assets/qualitybadge/AD.svg'; interface QualityBadgeProps { @@ -17,8 +16,6 @@ const QualityBadge: React.FC = ({ type }) => { switch (type) { case 'HD': return ; - case 'VISION': - return ; case 'AD': return ; default: diff --git a/src/components/metadata/RatingsSection.tsx b/src/components/metadata/RatingsSection.tsx index 1ff2c6b..d22d573 100644 --- a/src/components/metadata/RatingsSection.tsx +++ b/src/components/metadata/RatingsSection.tsx @@ -1,5 +1,6 @@ import React, { useEffect, useState, useRef, useCallback, useMemo } from 'react'; import { View, Text, StyleSheet, ActivityIndicator, Image, Animated, Dimensions } from 'react-native'; +import { MaterialIcons as MaterialIconsWrapper } from '@expo/vector-icons'; import { useTheme } from '../../contexts/ThemeContext'; import { useMDBListRatings } from '../../hooks/useMDBListRatings'; import { mmkvStorage } from '../../services/mmkvStorage'; @@ -158,42 +159,49 @@ export const RatingsSection: React.FC = ({ imdbId, type }) // Define the order and icons/colors for the ratings const ratingConfig = { imdb: { - icon: require('../../../assets/rating-icons/imdb.png'), - isImage: true, + name: 'IMDb', + icon: null, // No icon for IMDb + isImage: false, color: '#F5C518', transform: (value: number) => value.toFixed(1) }, tmdb: { + name: 'TMDB', icon: TMDBIcon, isImage: false, color: '#01B4E4', transform: (value: number) => value.toFixed(0) }, trakt: { + name: 'Trakt', icon: TraktIcon, isImage: false, color: '#ED1C24', transform: (value: number) => value.toFixed(0) }, letterboxd: { + name: 'Letterboxd', icon: LetterboxdIcon, isImage: false, color: '#00E054', transform: (value: number) => value.toFixed(1) }, tomatoes: { + name: 'Rotten Tomatoes', icon: RottenTomatoesIcon, isImage: false, color: '#FA320A', transform: (value: number) => Math.round(value).toString() + '%' }, audience: { + name: 'Audience Score', icon: AudienceScoreIcon, isImage: true, color: '#FA320A', transform: (value: number) => Math.round(value).toString() + '%' }, metacritic: { + name: 'Metacritic', icon: MetacriticIcon, isImage: true, color: '#FFCC33', @@ -240,13 +248,23 @@ export const RatingsSection: React.FC = ({ imdbId, type }) style={[styles.compactRatingIcon, { width: iconSize, height: iconSize, marginRight: iconTextGap }]} resizeMode="contain" /> - ) : ( + ) : config.icon ? ( {React.createElement(config.icon as any, { width: iconSize, height: iconSize, })} + ) : ( + // Text fallback + + {config.name} + )} {displayValue} diff --git a/src/components/metadata/SeriesContent.tsx b/src/components/metadata/SeriesContent.tsx index 3ef7042..56b15c0 100644 --- a/src/components/metadata/SeriesContent.tsx +++ b/src/components/metadata/SeriesContent.tsx @@ -40,8 +40,7 @@ interface SeriesContentProps { // Add placeholder constant at the top const DEFAULT_PLACEHOLDER = 'https://via.placeholder.com/300x450/1a1a1a/666666?text=No+Image'; const EPISODE_PLACEHOLDER = 'https://via.placeholder.com/500x280/1a1a1a/666666?text=No+Preview'; -const TMDB_LOGO = 'https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Tmdb.new.logo.svg/512px-Tmdb.new.logo.svg.png?20200406190906'; -const IMDb_LOGO = 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/IMDB_Logo_2016.svg/575px-IMDB_Logo_2016.svg.png'; + const SeriesContentComponent: React.FC = ({ episodes, @@ -1167,17 +1166,7 @@ const SeriesContentComponent: React.FC = ({ {isImdbRating ? ( <> - + = ({ ) : ( <> - {effectiveVote.toFixed(1)} @@ -1433,17 +1412,7 @@ const SeriesContentComponent: React.FC = ({ {isImdbRating ? ( <> - + = ({ ) : ( <> - {effectiveVote.toFixed(1)} @@ -2001,16 +1970,8 @@ const styles = StyleSheet.create({ alignItems: 'center', // chip background removed }, - tmdbLogo: { - width: 20, - height: 14, - }, - imdbLogo: { - width: 35, - height: 18, - }, ratingText: { - color: '#01b4e4', + // color set dynamically or removed from here if unused fontSize: 13, fontWeight: '700', marginLeft: 4, @@ -2196,10 +2157,7 @@ const styles = StyleSheet.create({ // chip background removed gap: 2, }, - imdbLogoHorizontal: { - width: 35, - height: 18, - }, + ratingTextHorizontal: { color: '#FFD700', fontSize: 11, diff --git a/src/components/player/cards/EpisodeCard.tsx b/src/components/player/cards/EpisodeCard.tsx index 33834d6..9ec49c2 100644 --- a/src/components/player/cards/EpisodeCard.tsx +++ b/src/components/player/cards/EpisodeCard.tsx @@ -4,7 +4,7 @@ import FastImage from '@d11/react-native-fast-image'; import { MaterialIcons } from '@expo/vector-icons'; import { Episode } from '../../../types/metadata'; -const TMDB_LOGO = 'https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Tmdb.new.logo.svg/512px-Tmdb.new.logo.svg.png?20200406190906'; + const EPISODE_PLACEHOLDER = 'https://via.placeholder.com/500x280/1a1a1a/666666?text=No+Preview'; interface EpisodeCardProps { @@ -28,7 +28,7 @@ export const EpisodeCard: React.FC = ({ }) => { const { width } = Dimensions.get('window'); const isTablet = width >= 768; - + // Get episode image let episodeImage = EPISODE_PLACEHOLDER; if (episode.still_path) { @@ -42,11 +42,11 @@ export const EpisodeCard: React.FC = ({ } else if (metadata?.poster) { episodeImage = metadata.poster; } - + const episodeNumber = typeof episode.episode_number === 'number' ? episode.episode_number.toString() : ''; const seasonNumber = typeof episode.season_number === 'number' ? episode.season_number.toString() : ''; const episodeString = seasonNumber && episodeNumber ? `S${seasonNumber.padStart(2, '0')}E${episodeNumber.padStart(2, '0')}` : ''; - + // Get episode progress const episodeId = episode.stremioId || `${metadata?.id}:${episode.season_number}:${episode.episode_number}`; const tmdbOverride = tmdbEpisodeOverrides?.[`${metadata?.id}:${episode.season_number}:${episode.episode_number}`]; @@ -60,7 +60,7 @@ export const EpisodeCard: React.FC = ({ const progress = episodeProgress?.[episodeId]; const progressPercent = progress ? (progress.currentTime / progress.duration) * 100 : 0; const showProgress = progress && progressPercent < 85; - + const formatRuntime = (runtime: number) => { if (!runtime) return null; const hours = Math.floor(runtime / 60); @@ -70,7 +70,7 @@ export const EpisodeCard: React.FC = ({ } return `${minutes}m`; }; - + const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString('en-US', { @@ -106,11 +106,11 @@ export const EpisodeCard: React.FC = ({ {showProgress && ( - )} @@ -135,12 +135,7 @@ export const EpisodeCard: React.FC = ({ {effectiveVote > 0 && ( - - + {effectiveVote.toFixed(1)} @@ -234,10 +229,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', }, - tmdbLogo: { - width: 20, - height: 14, - }, + ratingText: { fontSize: 13, fontWeight: '700', diff --git a/src/screens/TMDBSettingsScreen.tsx b/src/screens/TMDBSettingsScreen.tsx index 09546cf..b96a92c 100644 --- a/src/screens/TMDBSettingsScreen.tsx +++ b/src/screens/TMDBSettingsScreen.tsx @@ -1037,6 +1037,23 @@ const TMDBSettingsScreen = () => { + {/* TMDB Attribution */} + + + + + This product uses the TMDB API but is not + + + endorsed or certified by TMDB. + + + + {/* Language Picker Modal */}