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 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
const BREAKPOINTS = {
phone: 0,
@ -233,6 +235,17 @@ const MetadataDetails: React.FC<MetadataDetailsProps> = ({
)}
{metadata.imdbRating && !isMDBEnabled && (
<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={[
styles.ratingText,
{

View file

@ -22,6 +22,8 @@ const BREAKPOINTS = {
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 = {
imdb: {
name: 'IMDb',
@ -160,8 +162,8 @@ export const RatingsSection: React.FC<RatingsSectionProps> = ({ imdbId, type })
const ratingConfig = {
imdb: {
name: 'IMDb',
icon: null, // No icon for IMDb
isImage: false,
icon: { uri: IMDb_LOGO },
isImage: true,
color: '#F5C518',
transform: (value: number) => value.toFixed(1)
},
@ -245,7 +247,7 @@ export const RatingsSection: React.FC<RatingsSectionProps> = ({ imdbId, type })
{config.isImage ? (
<Image
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"
/>
) : config.icon ? (

View file

@ -41,6 +41,7 @@ interface SeriesContentProps {
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<SeriesContentProps> = ({
episodes,
@ -1166,7 +1167,18 @@ const SeriesContentComponent: React.FC<SeriesContentProps> = ({
<View style={styles.ratingContainer}>
{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={[
styles.ratingText,
{
@ -1422,7 +1434,18 @@ const SeriesContentComponent: React.FC<SeriesContentProps> = ({
<View style={styles.ratingContainerHorizontal}>
{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={[
styles.ratingTextHorizontal,
{

View file

@ -598,6 +598,20 @@ const KSPlayerCore: React.FC = () => {
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 (
<View style={{ flex: 1, backgroundColor: '#000000' }}>
<StatusBar hidden={true} />
@ -637,16 +651,7 @@ const KSPlayerCore: React.FC = () => {
onAudioTracks={(d) => tracks.setKsAudioTracks(d.audioTracks || [])}
onTextTracks={(d) => tracks.setKsTextTracks(d.textTracks || [])}
onLoad={onLoad}
onProgress={(d) => {
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);
}
}}
onProgress={handleProgress}
onEnd={async () => {
setCurrentTime(duration);
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
if (!isMountedRef.current) return;
if (metadata?.banner) {
finalBanner = metadata.banner;
bannerSourceType = 'default';
} else if (details?.backdrop_path) {
if (details?.backdrop_path) {
finalBanner = tmdbService.getImageUrl(details.backdrop_path);
bannerSourceType = 'tmdb';
if (finalBanner) {
FastImage.preload([{ uri: finalBanner }]);
}
} else if (metadata?.banner) {
finalBanner = metadata.banner;
bannerSourceType = 'default';
} else {
finalBanner = bannerImage || null;
bannerSourceType = 'default';