diff --git a/components/AudioPlayer.tsx b/components/AudioPlayer.tsx index 61c7387..feb4c70 100644 --- a/components/AudioPlayer.tsx +++ b/components/AudioPlayer.tsx @@ -96,10 +96,13 @@ const AudioPlayer = forwardRef(({ src, unlocke } }, 150); } - } else if (startTime !== undefined && audioRef.current.currentTime < startTime) { - // If startTime is set and currentTime is before it, reset to startTime - // This handles the case where the audio element was reset or reloaded - audioRef.current.currentTime = startTime; + } else if (startTime !== undefined && startTime > 0) { + // If startTime is set and we haven't processed changes, ensure currentTime is at least at startTime + // This handles the case where the audio element was reset or reloaded, or when manually playing for the first time + const current = audioRef.current.currentTime; + if (current < startTime) { + audioRef.current.currentTime = startTime; + } } } }, [src, unlockedSeconds, startTime, autoPlay, processedSrc, processedUnlockedSeconds]); @@ -145,16 +148,31 @@ const AudioPlayer = forwardRef(({ src, unlocke audioRef.current.pause(); setIsPlaying(false); } else { - // Check if we need to reset to startTime + // Ensure we're at the correct position before playing const current = audioRef.current.currentTime; const elapsed = current - startTime; - // Reset if: never played before, current position is before startTime, or we've exceeded the unlocked segment - if (!hasPlayedOnce || current < startTime || elapsed >= unlockedSeconds) { - // Reset to start of segment - audioRef.current.currentTime = startTime; + // Determine target position + let targetPos = startTime; + + // If we've played before and we're within the unlocked segment, continue from current position + if (hasPlayedOnce && current >= startTime && elapsed < unlockedSeconds) { + targetPos = current; // Continue from current position + } else { + // Reset to start of segment if: never played, before startTime, or exceeded unlocked segment + targetPos = startTime; } + // Set position before playing + audioRef.current.currentTime = targetPos; + + // Ensure position sticks (browser might reset it) + setTimeout(() => { + if (audioRef.current && Math.abs(audioRef.current.currentTime - targetPos) > 0.5) { + audioRef.current.currentTime = targetPos; + } + }, 50); + audioRef.current.play(); setIsPlaying(true); onPlay?.(); diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 82ac035..929b30a 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -69,6 +69,38 @@ git fetch --prune --tags origin master git fetch --tags origin git reset --hard origin/master +# Determine version: try git tag first, then package.json +echo "🏷️ Determining version..." +APP_VERSION="" +# Try to get exact tag if we're on a tagged commit +if git describe --tags --exact-match HEAD 2>/dev/null; then + APP_VERSION=$(git describe --tags --exact-match HEAD 2>/dev/null) + echo " Found exact tag: $APP_VERSION" +else + # Try to get latest tag + LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + if [ -n "$LATEST_TAG" ]; then + APP_VERSION="$LATEST_TAG" + echo " Using latest tag: $APP_VERSION" + else + # Fallback to package.json + if [ -f "package.json" ]; then + PACKAGE_VERSION=$(grep -o '"version": "[^"]*"' package.json 2>/dev/null | cut -d'"' -f4) + if [ -n "$PACKAGE_VERSION" ]; then + APP_VERSION="v${PACKAGE_VERSION}" + echo " Using package.json version: $APP_VERSION" + fi + fi + fi +fi + +if [ -z "$APP_VERSION" ]; then + echo "⚠️ Could not determine version, using 'dev'" + APP_VERSION="dev" +fi + +echo "📦 Building with version: $APP_VERSION" + # Prüfe und erstelle/repariere Netzwerk falls nötig echo "🌐 Prüfe Docker-Netzwerk..." if ! docker network ls | grep -q "hoerdle_default"; then @@ -84,7 +116,7 @@ echo "" # Build new image in background (doesn't stop running container) echo "🔨 Building new Docker image (this runs while app is still online)..." -docker compose build +docker compose build --build-arg APP_VERSION="$APP_VERSION" # Quick restart with pre-built image echo "🔄 Restarting with new image (minimal downtime)..."