|
87 | 87 | const getStatusClass = (status, isActive = false) => { |
88 | 88 | const base = 'ml-2 font-mono text-xs'; |
89 | 89 | if (isActive) return `${base} text-green-400`; |
90 | | - if (status === 'LOADED') return `${base} text-blue-400`; |
91 | | - if (status === 'LOADING') return `${base} text-yellow-400`; |
| 90 | + if (status?.includes('LOADED')) return `${base} text-blue-400`; |
| 91 | + if (status?.includes('LOADING')) return `${base} text-yellow-400`; |
92 | 92 | return `${base} text-gray-400`; |
93 | 93 | }; |
94 | 94 |
|
|
181 | 181 | onEnded: () => updateState({ isPlaying: false }) |
182 | 182 | }); |
183 | 183 |
|
| 184 | + // Add metadata to tracks |
184 | 185 | player.tracks.forEach((track, idx) => { |
185 | 186 | track.metadata = METADATA[idx]; |
186 | 187 | }); |
187 | 188 |
|
188 | | - updateState({ tracks: player.tracks }); |
| 189 | + // Update state with tracks immediately |
| 190 | + updateState({ tracks: [...player.tracks] }); |
| 191 | + |
189 | 192 | player.setVolume(0.7); |
190 | 193 | player.play(); |
191 | 194 |
|
| 195 | + // Debug |
| 196 | + console.log('Player initialized with tracks:', player.tracks.length); |
| 197 | + console.log('State tracks:', state().tracks.length); |
| 198 | + |
192 | 199 | if (player.currentTrack) onTrackChange(player.currentTrack); |
193 | 200 | }); |
194 | 201 |
|
195 | 202 | onCleanup(() => player?.cleanUp()); |
196 | 203 |
|
197 | 204 | // Computed values |
198 | | - const s = state(); |
199 | | - const currentMeta = s.currentTrack?.metadata || {}; |
200 | | - const trackTitle = currentMeta.title || `Track ${s.trackIdx + 1}`; |
| 205 | + const trackTitle = () => { |
| 206 | + const s = state(); |
| 207 | + const currentMeta = s.currentTrack?.metadata || {}; |
| 208 | + return currentMeta.title || `Track ${s.trackIdx + 1}`; |
| 209 | + }; |
201 | 210 |
|
202 | 211 | return html` |
203 | 212 | <div class="max-w-4xl mx-auto p-4"> |
@@ -268,7 +277,7 @@ <h3 class="text-lg font-semibold mb-3 flex items-center"> |
268 | 277 | <i class="fas fa-list-music mr-2"></i> Playlist |
269 | 278 | </h3> |
270 | 279 | <div class="space-y-1"> |
271 | | - ${() => state().tracks.map((track, idx) => { |
| 280 | + ${() => (state().tracks || []).map((track, idx) => { |
272 | 281 | const meta = track.metadata || {}; |
273 | 282 | const isActive = state().trackIdx === idx; |
274 | 283 | const isCurrentlyPlaying = isActive && state().isPlaying; |
@@ -311,7 +320,7 @@ <h3 class="text-lg font-semibold mb-3 flex items-center"> |
311 | 320 | </div> |
312 | 321 | <div> |
313 | 322 | <span class="text-gray-400">Current Track:</span> |
314 | | - <span class="ml-2 font-mono">${() => `${state().trackIdx + 1} / ${state().tracks.length}`}</span> |
| 323 | + <span class="ml-2 font-mono">${() => `${state().trackIdx + 1} / ${(state().tracks || []).length}`}</span> |
315 | 324 | </div> |
316 | 325 | <div> |
317 | 326 | <span class="text-gray-400">Playback Mode:</span> |
|
0 commit comments