@@ -24,24 +24,52 @@ export const ProgressBar = ({ track }: Props) => {
2424 useEffect ( ( ) => {
2525 if ( ! track . duration || track . duration === 0 ) return ;
2626
27- const externalProgress = track . progress || 0 ;
27+ // Конвертируем внешний прогресс из секунд в проценты
28+ const externalProgressSeconds = track . progress || 0 ;
29+ const externalProgress =
30+ track . duration > 0 ? externalProgressSeconds / track . duration : 0 ;
2831 const lastProgress = lastExternalProgressRef . current ;
2932 const progressDiff = externalProgress - lastProgress ;
3033
31- // Проверяем значительные изменения вперед (перемотка вперед на 3+ секунд)
32- const isSignificantForwardJump = progressDiff > 3 ;
34+ // Проверяем значительные изменения вперед (перемотка вперед на 3+ секунд в процентах )
35+ const isSignificantForwardJump = progressDiff > 3 / track . duration ;
3336
34- // Проверяем значительные изменения назад (перемотка назад на 3+ секунд)
35- const isSignificantBackwardJump = progressDiff < - 3 ;
37+ // Проверяем значительные изменения назад (перемотка назад на 3+ секунд в процентах )
38+ const isSignificantBackwardJump = progressDiff < - ( 3 / track . duration ) ;
3639
37- // Проверяем резкие изменения в любом направлении (более 1 секунды)
38- const isRapidChange = Math . abs ( progressDiff ) > 1 ;
40+ // Проверяем резкие изменения в любом направлении (более 1 секунды в процентах )
41+ const isRapidChange = Math . abs ( progressDiff ) > 1 / track . duration ;
3942
4043 // Дополнительная проверка для отмотки назад - если прогресс резко уменьшился
41- const isRewindBack = progressDiff < - 0.5 && externalProgress < lastProgress ;
44+ const isRewindBack =
45+ progressDiff < - ( 0.5 / track . duration ) && externalProgress < lastProgress ;
4246
4347 // Проверяем, что изменение не слишком большое (не больше половины трека)
44- const isReasonableChange = Math . abs ( progressDiff ) < track . duration / 2 ;
48+ const isReasonableChange = Math . abs ( progressDiff ) < 0.5 ;
49+
50+ // Логируем все изменения прогресса для отладки
51+ if ( Math . abs ( progressDiff ) > 0.01 ) {
52+ console . log ( "🟡 PROGRESS CHANGE:" , {
53+ externalProgressSeconds,
54+ externalProgress,
55+ lastProgress,
56+ progressDiff,
57+ isSignificantForwardJump,
58+ isSignificantBackwardJump,
59+ isRapidChange,
60+ isRewindBack,
61+ isReasonableChange,
62+ willSync :
63+ ( isSignificantForwardJump ||
64+ isSignificantBackwardJump ||
65+ isRapidChange ||
66+ isRewindBack ) &&
67+ isReasonableChange ,
68+ trackStatus : track . status ,
69+ currentInternalProgress : progress ,
70+ trackDuration : track . duration ,
71+ } ) ;
72+ }
4573
4674 // Синхронизируемся при значительных перемотках, резких изменениях или отмотке назад
4775 if (
@@ -51,19 +79,25 @@ export const ProgressBar = ({ track }: Props) => {
5179 isRewindBack ) &&
5280 isReasonableChange
5381 ) {
82+ console . log ( "🟢 SYNCING PROGRESS:" , {
83+ from : progress ,
84+ to : externalProgress ,
85+ fromSeconds : progress * track . duration ,
86+ toSeconds : externalProgressSeconds ,
87+ } ) ;
5488 lastExternalProgressRef . current = externalProgress ;
5589 setProgress ( externalProgress ) ;
5690
5791 // Пересчитываем время начала для корректного продолжения анимации
5892 if ( track . status === "playing" ) {
59- startTimeRef . current = Date . now ( ) - externalProgress * 1000 ;
93+ startTimeRef . current = Date . now ( ) - externalProgressSeconds * 1000 ;
6094 }
6195 } else {
6296 // Если изменение незначительное, просто обновляем отслеживаемое значение
6397 // но не синхронизируемся, чтобы избежать бликов
6498 lastExternalProgressRef . current = externalProgress ;
6599 }
66- } , [ track . progress , track . duration , track . status ] ) ;
100+ } , [ track . progress , track . duration , track . status , progress ] ) ;
67101
68102 useEffect ( ( ) => {
69103 if ( ! track . duration || track . duration === 0 ) {
@@ -79,17 +113,28 @@ export const ProgressBar = ({ track }: Props) => {
79113
80114 // Если это новый трек, сбрасываем все состояния
81115 if ( lastTrackKeyRef . current !== trackKey ) {
116+ console . log ( "🟠 NEW TRACK DETECTED:" , {
117+ oldTrackKey : lastTrackKeyRef . current ,
118+ newTrackKey : trackKey ,
119+ initialProgress : track . progress || 0 ,
120+ trackStatus : track . status ,
121+ trackDuration : track . duration ,
122+ } ) ;
123+
82124 lastTrackKeyRef . current = trackKey ;
83- const initialProgress = track . progress || 0 ;
125+ const initialProgressSeconds = track . progress || 0 ;
126+ const initialProgress =
127+ track . duration > 0 ? initialProgressSeconds / track . duration : 0 ;
84128 setProgress ( initialProgress ) ;
85129 lastExternalProgressRef . current = initialProgress ;
86130 isPausedRef . current = false ;
87131 pausedTimeRef . current = 0 ;
88- startTimeRef . current = Date . now ( ) - initialProgress * 1000 ;
132+ startTimeRef . current = Date . now ( ) - initialProgressSeconds * 1000 ;
89133 }
90134
91135 // Если трек остановлен, сбрасываем прогресс
92136 if ( track . status === "stopped" ) {
137+ console . log ( "🔴 TRACK STOPPED - resetting progress" ) ;
93138 setProgress ( 0 ) ;
94139 lastExternalProgressRef . current = 0 ;
95140 isPausedRef . current = false ;
@@ -100,6 +145,7 @@ export const ProgressBar = ({ track }: Props) => {
100145 // Если трек на паузе
101146 if ( track . status === "paused" ) {
102147 if ( ! isPausedRef . current ) {
148+ console . log ( "⏸️ TRACK PAUSED" ) ;
103149 isPausedRef . current = true ;
104150 pausedTimeRef . current = Date . now ( ) ;
105151 }
@@ -111,6 +157,7 @@ export const ProgressBar = ({ track }: Props) => {
111157 // Если был на паузе, корректируем время начала
112158 if ( isPausedRef . current ) {
113159 const pauseDuration = Date . now ( ) - pausedTimeRef . current ;
160+ console . log ( "▶️ TRACK RESUMED after pause:" , { pauseDuration } ) ;
114161 startTimeRef . current += pauseDuration ;
115162 isPausedRef . current = false ;
116163 }
@@ -120,6 +167,21 @@ export const ProgressBar = ({ track }: Props) => {
120167 const elapsed = ( currentTime - startTimeRef . current ) / 1000 ;
121168 const newProgress = Math . min ( elapsed / track . duration , 1 ) ;
122169
170+ // Логируем изменения прогресса в анимации
171+ if ( Math . abs ( newProgress - progress ) > 0.01 ) {
172+ console . log ( "🔵 ANIMATION PROGRESS:" , {
173+ newProgress,
174+ newProgressSeconds : newProgress * track . duration ,
175+ currentProgress : progress ,
176+ currentProgressSeconds : progress * track . duration ,
177+ elapsed,
178+ trackDuration : track . duration ,
179+ trackStatus : track . status ,
180+ startTime : startTimeRef . current ,
181+ currentTime,
182+ } ) ;
183+ }
184+
123185 setProgress ( newProgress ) ;
124186
125187 if ( newProgress < 1 && track . status === "playing" ) {
@@ -149,6 +211,35 @@ export const ProgressBar = ({ track }: Props) => {
149211
150212 const progressPercentage = Math . min ( progress * 100 , 100 ) ;
151213
214+ useEffect ( ( ) => {
215+ if ( progressPercentage >= 99 ) {
216+ console . log ( "🔴 PROGRESS BAR DEBUG - 99%+ reached:" , {
217+ progressPercentage,
218+ progress,
219+ trackStatus : track . status ,
220+ trackDuration : track . duration ,
221+ externalProgressSeconds : track . progress ,
222+ externalProgressPercent :
223+ track . duration > 0 ? ( track . progress || 0 ) / track . duration : 0 ,
224+ lastExternalProgress : lastExternalProgressRef . current ,
225+ isPaused : isPausedRef . current ,
226+ startTime : startTimeRef . current ,
227+ currentTime : Date . now ( ) ,
228+ elapsed : ( Date . now ( ) - startTimeRef . current ) / 1000 ,
229+ trackKey,
230+ lastTrackKey : lastTrackKeyRef . current ,
231+ } ) ;
232+ debugger ;
233+ }
234+ } , [
235+ progressPercentage ,
236+ progress ,
237+ track . status ,
238+ track . duration ,
239+ track . progress ,
240+ trackKey ,
241+ ] ) ;
242+
152243 return (
153244 < div
154245 className = { styles . progressBarContainer }
0 commit comments