minor bug fixes

This commit is contained in:
tapframe 2026-01-18 10:25:42 +05:30
parent 696d37dd08
commit 301560b21a
5 changed files with 62 additions and 19 deletions

View file

@ -23,6 +23,8 @@ import { isMDBListEnabled } from '../../screens/MDBListSettingsScreen';
import { getAgeRatingColor } from '../../utils/ageRatingColors'; import { getAgeRatingColor } from '../../utils/ageRatingColors';
import AgeRatingBadge from '../common/AgeRatingBadge'; import AgeRatingBadge from '../common/AgeRatingBadge';
const IMDb_LOGO = 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/IMDB_Logo_2016.svg/575px-IMDB_Logo_2016.svg.png';
// Enhanced responsive breakpoints for Metadata Details // Enhanced responsive breakpoints for Metadata Details
const BREAKPOINTS = { const BREAKPOINTS = {
phone: 0, phone: 0,
@ -233,6 +235,17 @@ const MetadataDetails: React.FC<MetadataDetailsProps> = ({
)} )}
{metadata.imdbRating && !isMDBEnabled && ( {metadata.imdbRating && !isMDBEnabled && (
<View style={styles.ratingContainer}> <View style={styles.ratingContainer}>
<FastImage
source={{ uri: IMDb_LOGO }}
style={[
styles.imdbLogo,
{
width: isTV ? 35 : isLargeTablet ? 32 : isTablet ? 30 : 30,
height: isTV ? 18 : isLargeTablet ? 16 : isTablet ? 15 : 15
}
]}
resizeMode={FastImage.resizeMode.contain}
/>
<Text style={[ <Text style={[
styles.ratingText, styles.ratingText,
{ {

View file

@ -22,6 +22,8 @@ const BREAKPOINTS = {
tv: 1440, tv: 1440,
}; };
const IMDb_LOGO = 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/IMDB_Logo_2016.svg/575px-IMDB_Logo_2016.svg.png';
export const RATING_PROVIDERS = { export const RATING_PROVIDERS = {
imdb: { imdb: {
name: 'IMDb', name: 'IMDb',
@ -160,8 +162,8 @@ export const RatingsSection: React.FC<RatingsSectionProps> = ({ imdbId, type })
const ratingConfig = { const ratingConfig = {
imdb: { imdb: {
name: 'IMDb', name: 'IMDb',
icon: null, // No icon for IMDb icon: { uri: IMDb_LOGO },
isImage: false, isImage: true,
color: '#F5C518', color: '#F5C518',
transform: (value: number) => value.toFixed(1) transform: (value: number) => value.toFixed(1)
}, },
@ -245,7 +247,7 @@ export const RatingsSection: React.FC<RatingsSectionProps> = ({ imdbId, type })
{config.isImage ? ( {config.isImage ? (
<Image <Image
source={config.icon as any} source={config.icon as any}
style={[styles.compactRatingIcon, { width: iconSize, height: iconSize, marginRight: iconTextGap }]} style={[styles.compactRatingIcon, { width: source === 'imdb' ? iconSize * 2 : iconSize, height: iconSize, marginRight: iconTextGap }]}
resizeMode="contain" resizeMode="contain"
/> />
) : config.icon ? ( ) : config.icon ? (

View file

@ -41,6 +41,7 @@ interface SeriesContentProps {
const DEFAULT_PLACEHOLDER = 'https://via.placeholder.com/300x450/1a1a1a/666666?text=No+Image'; 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 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 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<SeriesContentProps> = ({ const SeriesContentComponent: React.FC<SeriesContentProps> = ({
episodes, episodes,
@ -1166,7 +1167,18 @@ const SeriesContentComponent: React.FC<SeriesContentProps> = ({
<View style={styles.ratingContainer}> <View style={styles.ratingContainer}>
{isImdbRating ? ( {isImdbRating ? (
<> <>
<FastImage
source={{ uri: IMDb_LOGO }}
style={[
styles.tmdbLogo, // Reuse same style for dimensions
{
width: isTV ? 28 : isLargeTablet ? 26 : isTablet ? 24 : 24,
height: isTV ? 16 : isLargeTablet ? 15 : isTablet ? 14 : 14,
marginRight: 4
}
]}
resizeMode={FastImage.resizeMode.contain}
/>
<Text style={[ <Text style={[
styles.ratingText, styles.ratingText,
{ {
@ -1422,7 +1434,18 @@ const SeriesContentComponent: React.FC<SeriesContentProps> = ({
<View style={styles.ratingContainerHorizontal}> <View style={styles.ratingContainerHorizontal}>
{isImdbRating ? ( {isImdbRating ? (
<> <>
<FastImage
source={{ uri: IMDb_LOGO }}
style={[
styles.tmdbLogo, // Reuse same style
{
width: isTV ? 28 : isLargeTablet ? 26 : isTablet ? 24 : 24,
height: isTV ? 16 : isLargeTablet ? 15 : isTablet ? 14 : 14,
marginRight: 4
}
]}
resizeMode={FastImage.resizeMode.contain}
/>
<Text style={[ <Text style={[
styles.ratingTextHorizontal, styles.ratingTextHorizontal,
{ {

View file

@ -598,6 +598,20 @@ const KSPlayerCore: React.FC = () => {
controls.seekToTime(value); controls.seekToTime(value);
}; };
const handleProgress = useCallback((d: any) => {
if (!isSliderDragging) {
setCurrentTime(d.currentTime);
}
// Only update buffered if it changed by more than 0.5s to reduce re-renders
const newBuffered = d.buffered || 0;
setBuffered(prevBuffered => {
if (Math.abs(newBuffered - prevBuffered) > 0.5) {
return newBuffered;
}
return prevBuffered;
});
}, [isSliderDragging, setCurrentTime, setBuffered]);
return ( return (
<View style={{ flex: 1, backgroundColor: '#000000' }}> <View style={{ flex: 1, backgroundColor: '#000000' }}>
<StatusBar hidden={true} /> <StatusBar hidden={true} />
@ -637,16 +651,7 @@ const KSPlayerCore: React.FC = () => {
onAudioTracks={(d) => tracks.setKsAudioTracks(d.audioTracks || [])} onAudioTracks={(d) => tracks.setKsAudioTracks(d.audioTracks || [])}
onTextTracks={(d) => tracks.setKsTextTracks(d.textTracks || [])} onTextTracks={(d) => tracks.setKsTextTracks(d.textTracks || [])}
onLoad={onLoad} onLoad={onLoad}
onProgress={(d) => { onProgress={handleProgress}
if (!isSliderDragging) {
setCurrentTime(d.currentTime);
}
// Only update buffered if it changed by more than 0.5s to reduce re-renders
const newBuffered = d.buffered || 0;
if (Math.abs(newBuffered - buffered) > 0.5) {
setBuffered(newBuffered);
}
}}
onEnd={async () => { onEnd={async () => {
setCurrentTime(duration); setCurrentTime(duration);
await traktAutosync.handlePlaybackEnd(duration, duration, 'ended'); await traktAutosync.handlePlaybackEnd(duration, duration, 'ended');

View file

@ -177,15 +177,15 @@ export const useMetadataAssets = (
// Only update if request wasn't aborted and component is still mounted // Only update if request wasn't aborted and component is still mounted
if (!isMountedRef.current) return; if (!isMountedRef.current) return;
if (metadata?.banner) { if (details?.backdrop_path) {
finalBanner = metadata.banner;
bannerSourceType = 'default';
} else if (details?.backdrop_path) {
finalBanner = tmdbService.getImageUrl(details.backdrop_path); finalBanner = tmdbService.getImageUrl(details.backdrop_path);
bannerSourceType = 'tmdb'; bannerSourceType = 'tmdb';
if (finalBanner) { if (finalBanner) {
FastImage.preload([{ uri: finalBanner }]); FastImage.preload([{ uri: finalBanner }]);
} }
} else if (metadata?.banner) {
finalBanner = metadata.banner;
bannerSourceType = 'default';
} else { } else {
finalBanner = bannerImage || null; finalBanner = bannerImage || null;
bannerSourceType = 'default'; bannerSourceType = 'default';