From 170ed203a060ed0744d2ab86730caf01092542d5 Mon Sep 17 00:00:00 2001 From: leon-morival Date: Wed, 3 Sep 2025 16:48:25 +0200 Subject: [PATCH] add 0.5 seconds --- src/providers/UserDataProvider.js | 11 +++++++---- src/screens/Library/MusicDetails.js | 10 ++++++---- src/screens/Library/components/BackTracks.js | 16 +++++++++++++--- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/providers/UserDataProvider.js b/src/providers/UserDataProvider.js index 1cd0dec..b3ac8c2 100644 --- a/src/providers/UserDataProvider.js +++ b/src/providers/UserDataProvider.js @@ -63,7 +63,9 @@ export default ({ children }) => { condition: !!currentUID, refreshArray: [currentUID], }); - + const userLikedPlaybacks = Array.isArray(userLikedProjects) + ? userLikedProjects.filter((project) => project.playbackUrl) + : []; // Subscribe to user's playlists const { data: userPlaylists = [] } = useDataFromRef({ ref: currentUID ? playlistsRef.where("createdBy", "==", currentUID) : null, @@ -118,7 +120,7 @@ export default ({ children }) => { ...partial, updatedAt: firebase.firestore.FieldValue.serverTimestamp(), }, - options, + options ); } catch (e) { console.log("updateProjectData error", e?.message); @@ -154,7 +156,7 @@ export default ({ children }) => { followedBy: arrayUnion(currentUID), lastFollowersUpdateAt: new Date(), }, - { merge: true }, + { merge: true } ); setTooltip({ type: "success", text: "Abonnement mis à jour" }); } @@ -172,7 +174,7 @@ export default ({ children }) => { followedBy: arrayRemove(currentUID), lastFollowersUpdateAt: new Date(), }, - { merge: true }, + { merge: true } ); setTooltip({ type: "success", @@ -303,6 +305,7 @@ export default ({ children }) => { userProjects, userPlaybacks, userLikedProjects, + userLikedPlaybacks, userPlaylists, selectedProjectId, selectedProject, diff --git a/src/screens/Library/MusicDetails.js b/src/screens/Library/MusicDetails.js index c78aae9..9f37be3 100644 --- a/src/screens/Library/MusicDetails.js +++ b/src/screens/Library/MusicDetails.js @@ -217,6 +217,8 @@ const MusicDetails = () => { () => Math.max(0, (progressInfo.pos || 0) / 1000), [progressInfo.pos] ); + // Preview lead: show words 0.5s earlier + const visibleTimeS = useMemo(() => Math.max(0, currentTimeS + 0.5), [currentTimeS]); // Group words into timed lines (similar to KaraokeLyrics) const groupAlignedWordsToLines = (words = [], { removeTags = true } = {}) => { const out = []; @@ -296,13 +298,13 @@ const MusicDetails = () => { if (!lines || lines.length === 0) return -1; for (let i = 0; i < lines.length; i++) { const L = lines[i]; - if (currentTimeS >= (L.startS || 0) && currentTimeS <= (L.endS || 0)) + if (visibleTimeS >= (L.startS || 0) && visibleTimeS <= (L.endS || 0)) return i; } - if (currentTimeS > (lines[lines.length - 1]?.endS || 0)) + if (visibleTimeS > (lines[lines.length - 1]?.endS || 0)) return lines.length - 1; return -1; - }, [lines, currentTimeS]); + }, [lines, visibleTimeS]); // Auto-scroll lyrics to keep the current line visible const lyricsRef = useRef(null); @@ -487,7 +489,7 @@ const MusicDetails = () => { = (w.startS || 0) + visibleTimeS >= (w.startS || 0) ? styles.karaokeWordActive : styles.karaokeWord } diff --git a/src/screens/Library/components/BackTracks.js b/src/screens/Library/components/BackTracks.js index 1e6391a..1fc93c2 100644 --- a/src/screens/Library/components/BackTracks.js +++ b/src/screens/Library/components/BackTracks.js @@ -1,9 +1,15 @@ import React, { useState } from "react"; -import { FlatList, Image, Pressable, Text, View, useWindowDimensions } from "react-native"; +import { + FlatList, + Image, + Pressable, + Text, + View, + useWindowDimensions, +} from "react-native"; import { Routes } from "../../../navigation"; import { navigate } from "../../../navigation/NavigationService"; import { useUserData } from "../../../providers/UserDataProvider"; -import { Style } from "../../../styles"; import CardContainer from "./CardContainer"; const BackTracks = () => { const { userPlaybacks } = useUserData(); @@ -30,7 +36,11 @@ const BackTracks = () => { keyExtractor={(item) => item.id} renderItem={({ item }) => ( - navigate(Routes.Playbacks, { projectId: item.id })}> + + navigate(Routes.Playbacks, { projectId: item.id }) + } + >