mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-04-20 16:22:04 +00:00
Update progress thresholds across components to 85% for improved user experience
This update modifies various components, including ContinueWatchingSection, HeroSection, SeriesContent, and player components, to adjust the progress completion threshold from 95% to 85%. This change ensures that users can continue watching content that is closer to completion, enhancing engagement and usability. Additionally, related logic in the useWatchProgress hook and HomeScreen is updated to reflect this new threshold, providing a consistent experience across the application.
This commit is contained in:
parent
e14783343c
commit
ddf8d007b7
7 changed files with 19 additions and 19 deletions
|
|
@ -100,10 +100,10 @@ const ContinueWatchingSection = React.forwardRef<ContinueWatchingRef>((props, re
|
||||||
const episodeId = episodeIdParts.length > 0 ? episodeIdParts.join(':') : undefined;
|
const episodeId = episodeIdParts.length > 0 ? episodeIdParts.join(':') : undefined;
|
||||||
const progress = allProgress[key];
|
const progress = allProgress[key];
|
||||||
|
|
||||||
// Skip items that are more than 95% complete (effectively finished)
|
// Skip items that are more than 85% complete (effectively finished)
|
||||||
const progressPercent = (progress.currentTime / progress.duration) * 100;
|
const progressPercent = (progress.currentTime / progress.duration) * 100;
|
||||||
|
|
||||||
if (progressPercent >= 95) {
|
if (progressPercent >= 85) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -332,7 +332,7 @@ const WatchProgressDisplay = React.memo(({
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enhanced display text with Trakt integration
|
// Enhanced display text with Trakt integration
|
||||||
let displayText = progressPercent >= 95 ? 'Watched' : `${Math.round(progressPercent)}% watched`;
|
let displayText = progressPercent >= 85 ? 'Watched' : `${Math.round(progressPercent)}% watched`;
|
||||||
let syncStatus = '';
|
let syncStatus = '';
|
||||||
|
|
||||||
// Show Trakt sync status if user is authenticated
|
// Show Trakt sync status if user is authenticated
|
||||||
|
|
@ -373,7 +373,7 @@ const WatchProgressDisplay = React.memo(({
|
||||||
progressBoxScale.value = withTiming(1, { duration: 400 });
|
progressBoxScale.value = withTiming(1, { duration: 400 });
|
||||||
progressBoxTranslateY.value = withTiming(0, { duration: 400 });
|
progressBoxTranslateY.value = withTiming(0, { duration: 400 });
|
||||||
|
|
||||||
if (progressData.isWatched || (progressData.progressPercent && progressData.progressPercent >= 95)) {
|
if (progressData.isWatched || (progressData.progressPercent && progressData.progressPercent >= 85)) {
|
||||||
// Celebration animation sequence
|
// Celebration animation sequence
|
||||||
celebrationScale.value = withRepeat(
|
celebrationScale.value = withRepeat(
|
||||||
withTiming(1.05, { duration: 200 }),
|
withTiming(1.05, { duration: 200 }),
|
||||||
|
|
@ -426,7 +426,7 @@ const WatchProgressDisplay = React.memo(({
|
||||||
|
|
||||||
if (!progressData) return null;
|
if (!progressData) return null;
|
||||||
|
|
||||||
const isCompleted = progressData.isWatched || progressData.progressPercent >= 95;
|
const isCompleted = progressData.isWatched || progressData.progressPercent >= 85;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Animated.View style={[styles.watchProgressContainer, animatedStyle]}>
|
<Animated.View style={[styles.watchProgressContainer, animatedStyle]}>
|
||||||
|
|
@ -704,7 +704,7 @@ const HeroSection: React.FC<HeroSectionProps> = ({
|
||||||
// Memoized play button text
|
// Memoized play button text
|
||||||
const playButtonText = useMemo(() => getPlayButtonText(), [getPlayButtonText]);
|
const playButtonText = useMemo(() => getPlayButtonText(), [getPlayButtonText]);
|
||||||
|
|
||||||
// Calculate if content is watched (>=95% progress) - check both local and Trakt progress
|
// Calculate if content is watched (>=85% progress) - check both local and Trakt progress
|
||||||
const isWatched = useMemo(() => {
|
const isWatched = useMemo(() => {
|
||||||
if (!watchProgress) return false;
|
if (!watchProgress) return false;
|
||||||
|
|
||||||
|
|
@ -718,7 +718,7 @@ const HeroSection: React.FC<HeroSectionProps> = ({
|
||||||
// Fall back to local progress
|
// Fall back to local progress
|
||||||
if (watchProgress.duration === 0) return false;
|
if (watchProgress.duration === 0) return false;
|
||||||
const progressPercent = (watchProgress.currentTime / watchProgress.duration) * 100;
|
const progressPercent = (watchProgress.currentTime / watchProgress.duration) * 100;
|
||||||
const localWatched = progressPercent >= 95;
|
const localWatched = progressPercent >= 85;
|
||||||
logger.log(`[HeroSection] Local progress: ${progressPercent.toFixed(1)}%, Watched: ${localWatched}`);
|
logger.log(`[HeroSection] Local progress: ${progressPercent.toFixed(1)}%, Watched: ${localWatched}`);
|
||||||
return localWatched;
|
return localWatched;
|
||||||
}, [watchProgress, isTraktAuthenticated]);
|
}, [watchProgress, isTraktAuthenticated]);
|
||||||
|
|
|
||||||
|
|
@ -285,8 +285,8 @@ export const SeriesContent: React.FC<SeriesContentProps> = ({
|
||||||
const progress = episodeProgress[episodeId];
|
const progress = episodeProgress[episodeId];
|
||||||
const progressPercent = progress ? (progress.currentTime / progress.duration) * 100 : 0;
|
const progressPercent = progress ? (progress.currentTime / progress.duration) * 100 : 0;
|
||||||
|
|
||||||
// Don't show progress bar if episode is complete (>= 95%)
|
// Don't show progress bar if episode is complete (>= 85%)
|
||||||
const showProgress = progress && progressPercent < 95;
|
const showProgress = progress && progressPercent < 85;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
|
|
@ -318,7 +318,7 @@ export const SeriesContent: React.FC<SeriesContentProps> = ({
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
{progressPercent >= 95 && (
|
{progressPercent >= 85 && (
|
||||||
<View style={[styles.completedBadge, { backgroundColor: currentTheme.colors.primary }]}>
|
<View style={[styles.completedBadge, { backgroundColor: currentTheme.colors.primary }]}>
|
||||||
<MaterialIcons name="check" size={12} color={currentTheme.colors.white} />
|
<MaterialIcons name="check" size={12} color={currentTheme.colors.white} />
|
||||||
</View>
|
</View>
|
||||||
|
|
@ -395,8 +395,8 @@ export const SeriesContent: React.FC<SeriesContentProps> = ({
|
||||||
const progress = episodeProgress[episodeId];
|
const progress = episodeProgress[episodeId];
|
||||||
const progressPercent = progress ? (progress.currentTime / progress.duration) * 100 : 0;
|
const progressPercent = progress ? (progress.currentTime / progress.duration) * 100 : 0;
|
||||||
|
|
||||||
// Don't show progress bar if episode is complete (>= 95%)
|
// Don't show progress bar if episode is complete (>= 85%)
|
||||||
const showProgress = progress && progressPercent < 95;
|
const showProgress = progress && progressPercent < 85;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
|
|
@ -517,7 +517,7 @@ export const SeriesContent: React.FC<SeriesContentProps> = ({
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Completed Badge */}
|
{/* Completed Badge */}
|
||||||
{progressPercent >= 95 && (
|
{progressPercent >= 85 && (
|
||||||
<View style={[styles.completedBadgeHorizontal, {
|
<View style={[styles.completedBadgeHorizontal, {
|
||||||
backgroundColor: currentTheme.colors.primary,
|
backgroundColor: currentTheme.colors.primary,
|
||||||
}]}>
|
}]}>
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,7 @@ const AndroidVideoPlayer: React.FC = () => {
|
||||||
const progressPercent = (savedProgress.currentTime / savedProgress.duration) * 100;
|
const progressPercent = (savedProgress.currentTime / savedProgress.duration) * 100;
|
||||||
logger.log(`[AndroidVideoPlayer] Progress: ${progressPercent.toFixed(1)}% (${savedProgress.currentTime}/${savedProgress.duration})`);
|
logger.log(`[AndroidVideoPlayer] Progress: ${progressPercent.toFixed(1)}% (${savedProgress.currentTime}/${savedProgress.duration})`);
|
||||||
|
|
||||||
if (progressPercent < 95) {
|
if (progressPercent < 85) {
|
||||||
setResumePosition(savedProgress.currentTime);
|
setResumePosition(savedProgress.currentTime);
|
||||||
logger.log(`[AndroidVideoPlayer] Set resume position to: ${savedProgress.currentTime}`);
|
logger.log(`[AndroidVideoPlayer] Set resume position to: ${savedProgress.currentTime}`);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -263,7 +263,7 @@ const VideoPlayer: React.FC = () => {
|
||||||
const progressPercent = (savedProgress.currentTime / savedProgress.duration) * 100;
|
const progressPercent = (savedProgress.currentTime / savedProgress.duration) * 100;
|
||||||
logger.log(`[VideoPlayer] Progress: ${progressPercent.toFixed(1)}% (${savedProgress.currentTime}/${savedProgress.duration})`);
|
logger.log(`[VideoPlayer] Progress: ${progressPercent.toFixed(1)}% (${savedProgress.currentTime}/${savedProgress.duration})`);
|
||||||
|
|
||||||
if (progressPercent < 95) {
|
if (progressPercent < 85) {
|
||||||
setResumePosition(savedProgress.currentTime);
|
setResumePosition(savedProgress.currentTime);
|
||||||
logger.log(`[VideoPlayer] Set resume position to: ${savedProgress.currentTime}`);
|
logger.log(`[VideoPlayer] Set resume position to: ${savedProgress.currentTime}`);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,9 +156,9 @@ export const useWatchProgress = (
|
||||||
return 'Play';
|
return 'Play';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Consider episode complete if progress is >= 95%
|
// Consider episode complete if progress is >= 85%
|
||||||
const progressPercent = (watchProgress.currentTime / watchProgress.duration) * 100;
|
const progressPercent = (watchProgress.currentTime / watchProgress.duration) * 100;
|
||||||
if (progressPercent >= 95) {
|
if (progressPercent >= 85) {
|
||||||
return 'Play';
|
return 'Play';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -666,11 +666,11 @@ const HomeScreen = () => {
|
||||||
console.log('[HomeScreen] All watch progress in storage:', Object.keys(allProgress).length, 'items');
|
console.log('[HomeScreen] All watch progress in storage:', Object.keys(allProgress).length, 'items');
|
||||||
console.log('[HomeScreen] Watch progress items:', allProgress);
|
console.log('[HomeScreen] Watch progress items:', allProgress);
|
||||||
|
|
||||||
// Check if any items are being filtered out due to >95% progress
|
// Check if any items are being filtered out due to >85% progress
|
||||||
let filteredCount = 0;
|
let filteredCount = 0;
|
||||||
for (const [key, progress] of Object.entries(allProgress)) {
|
for (const [key, progress] of Object.entries(allProgress)) {
|
||||||
const progressPercent = (progress.currentTime / progress.duration) * 100;
|
const progressPercent = (progress.currentTime / progress.duration) * 100;
|
||||||
if (progressPercent >= 95) {
|
if (progressPercent >= 85) {
|
||||||
filteredCount++;
|
filteredCount++;
|
||||||
console.log(`[HomeScreen] Filtered out ${key}: ${progressPercent.toFixed(1)}% complete`);
|
console.log(`[HomeScreen] Filtered out ${key}: ${progressPercent.toFixed(1)}% complete`);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue