mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-01-11 20:10:25 +00:00
Enhance useTraktAutosync for improved session management and progress tracking
This update introduces enhanced deduplication logic in the useTraktAutosync hook, allowing updates if progress improves significantly after a session has stopped. Additionally, it refines the handling of unmount scenarios by ensuring the highest available progress is used, including checks for saved progress in local storage. These changes improve the accuracy of progress reporting and overall user experience during content synchronization.
This commit is contained in:
parent
25e648e135
commit
026c425660
1 changed files with 46 additions and 7 deletions
|
|
@ -214,9 +214,19 @@ export function useTraktAutosync(options: TraktAutosyncOptions) {
|
|||
}
|
||||
|
||||
// ENHANCED DEDUPLICATION: Check if we've already stopped this session
|
||||
// However, allow updates if the new progress is significantly higher (>5% improvement)
|
||||
if (hasStopped.current) {
|
||||
logger.log(`[TraktAutosync] Already stopped this session, skipping duplicate call (reason: ${reason})`);
|
||||
return;
|
||||
const currentProgressPercent = duration > 0 ? (currentTime / duration) * 100 : 0;
|
||||
const progressImprovement = currentProgressPercent - lastSyncProgress.current;
|
||||
|
||||
if (progressImprovement > 5) {
|
||||
logger.log(`[TraktAutosync] Session already stopped, but progress improved significantly by ${progressImprovement.toFixed(1)}% (${lastSyncProgress.current.toFixed(1)}% → ${currentProgressPercent.toFixed(1)}%), allowing update`);
|
||||
// Reset stopped flag to allow this significant update
|
||||
hasStopped.current = false;
|
||||
} else {
|
||||
logger.log(`[TraktAutosync] Already stopped this session, skipping duplicate call (reason: ${reason})`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// ENHANCED DEDUPLICATION: Prevent rapid successive calls (within 5 seconds)
|
||||
|
|
@ -235,11 +245,40 @@ export function useTraktAutosync(options: TraktAutosyncOptions) {
|
|||
let progressPercent = duration > 0 ? (currentTime / duration) * 100 : 0;
|
||||
logger.log(`[TraktAutosync] Initial progress calculation: ${progressPercent.toFixed(1)}%`);
|
||||
|
||||
// If progress is 0 during unmount, use the last synced progress instead
|
||||
// This happens when video player state is reset before component unmount
|
||||
if (reason === 'unmount' && progressPercent < 1 && lastSyncProgress.current > 0) {
|
||||
progressPercent = lastSyncProgress.current;
|
||||
logger.log(`[TraktAutosync] Using last synced progress for unmount: ${progressPercent.toFixed(1)}%`);
|
||||
// For unmount calls, always use the highest available progress
|
||||
// Check current progress, last synced progress, and local storage progress
|
||||
if (reason === 'unmount') {
|
||||
let maxProgress = progressPercent;
|
||||
|
||||
// Check last synced progress
|
||||
if (lastSyncProgress.current > maxProgress) {
|
||||
maxProgress = lastSyncProgress.current;
|
||||
}
|
||||
|
||||
// Also check local storage for the highest recorded progress
|
||||
try {
|
||||
const savedProgress = await storageService.getWatchProgress(
|
||||
options.id,
|
||||
options.type,
|
||||
options.episodeId
|
||||
);
|
||||
|
||||
if (savedProgress && savedProgress.duration > 0) {
|
||||
const savedProgressPercent = (savedProgress.currentTime / savedProgress.duration) * 100;
|
||||
if (savedProgressPercent > maxProgress) {
|
||||
maxProgress = savedProgressPercent;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error('[TraktAutosync] Error checking saved progress:', error);
|
||||
}
|
||||
|
||||
if (maxProgress !== progressPercent) {
|
||||
logger.log(`[TraktAutosync] Using highest available progress for unmount: ${maxProgress.toFixed(1)}% (current: ${progressPercent.toFixed(1)}%, last synced: ${lastSyncProgress.current.toFixed(1)}%)`);
|
||||
progressPercent = maxProgress;
|
||||
} else {
|
||||
logger.log(`[TraktAutosync] Current progress is already highest: ${progressPercent.toFixed(1)}%`);
|
||||
}
|
||||
}
|
||||
|
||||
// If we have valid progress but no started session, force start one first
|
||||
|
|
|
|||
Loading…
Reference in a new issue