mirror of
https://github.com/Jellify-Music/App.git
synced 2026-04-21 00:58:32 -05:00
player clean up, az selector style fixes
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import React, { RefObject, useEffect, useRef, useState } from 'react'
|
||||
import { LayoutChangeEvent, View as RNView, Text as RNText } from 'react-native'
|
||||
import { getToken, Spinner, Text, useTheme, YStack } from 'tamagui'
|
||||
import { View as RNView, Text as RNText } from 'react-native'
|
||||
import { getToken, Paragraph, Spinner, useTheme, View, YStack } from 'tamagui'
|
||||
import { Gesture, GestureDetector } from 'react-native-gesture-handler'
|
||||
import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'
|
||||
import { scheduleOnRN } from 'react-native-worklets'
|
||||
@@ -153,57 +153,40 @@ export default function AZScroller({
|
||||
top: gesturePositionY.value,
|
||||
}))
|
||||
|
||||
const handleLetterLayout = (event: LayoutChangeEvent) => {
|
||||
letterHeight.current = event.nativeEvent.layout.height
|
||||
}
|
||||
|
||||
const alphabetElements = alphabetToUse.map((letter, index) => {
|
||||
const letterElement = (
|
||||
<Text key={letter} userSelect='none' color={'$borderColor'} fontSize={17.5}>
|
||||
{letter}
|
||||
</Text>
|
||||
)
|
||||
|
||||
return index === 0 ? (
|
||||
<Text
|
||||
key={letter}
|
||||
color={'$borderColor'}
|
||||
userSelect='none'
|
||||
fontSize={17.5}
|
||||
onLayout={handleLetterLayout}
|
||||
>
|
||||
{letterElement}
|
||||
</Text>
|
||||
) : (
|
||||
letterElement
|
||||
)
|
||||
})
|
||||
const alphabetElements = alphabetToUse.map((letter, index) => (
|
||||
<Paragraph
|
||||
flex={1}
|
||||
key={letter}
|
||||
userSelect='none'
|
||||
color={'$borderColor'}
|
||||
fontSize={'$6'}
|
||||
fontWeight={'$6'}
|
||||
textAlign='center'
|
||||
>
|
||||
{letter}
|
||||
</Paragraph>
|
||||
))
|
||||
|
||||
useEffect(() => {
|
||||
triggerHaptic('impactLight')
|
||||
if (overlayLetter !== '') {
|
||||
triggerHaptic('impactLight')
|
||||
}
|
||||
}, [overlayLetter])
|
||||
|
||||
useEffect(() => {
|
||||
if (alphabetSelectorRef.current) {
|
||||
alphabetSelectorRef.current.measureInWindow((x, y, width, height) => {
|
||||
alphabetSelectorTopY.current = y
|
||||
alphabetSelectorHeight.current = height
|
||||
letterHeight.current = height / alphabetToUse.length
|
||||
})
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<>
|
||||
<View>
|
||||
<GestureDetector gesture={gesture}>
|
||||
<YStack
|
||||
minWidth={'$2'}
|
||||
maxWidth={'$3'}
|
||||
justifyContent='flex-start'
|
||||
alignItems='center'
|
||||
alignContent='center'
|
||||
paddingVertical={0}
|
||||
paddingHorizontal={0}
|
||||
onLayout={(event) => {
|
||||
requestAnimationFrame(() => {
|
||||
alphabetSelectorRef.current?.measureInWindow((x, y, width, height) => {
|
||||
alphabetSelectorTopY.current = y
|
||||
alphabetSelectorHeight.current = height
|
||||
})
|
||||
})
|
||||
}}
|
||||
ref={alphabetSelectorRef}
|
||||
>
|
||||
<YStack minWidth={'$2'} maxWidth={'$3'} flex={1} ref={alphabetSelectorRef}>
|
||||
{alphabetElements}
|
||||
</YStack>
|
||||
</GestureDetector>
|
||||
@@ -244,7 +227,7 @@ export default function AZScroller({
|
||||
</RNText>
|
||||
)}
|
||||
</Animated.View>
|
||||
</>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import { usePlayerQueueStore } from '../../../stores/player/queue'
|
||||
import { usePlayerSettingsStore } from '../../../stores/settings/player'
|
||||
import { useUsageSettingsStore } from '../../../stores/settings/usage'
|
||||
import calculateTrackVolume from '../../../utils/audio/normalization'
|
||||
import { TRACKPLAYER_LOOKAHEAD_COUNT } from '../../../configs/player.config'
|
||||
import {
|
||||
TrackPlayer,
|
||||
DownloadManager,
|
||||
@@ -87,15 +86,6 @@ export async function onChangeTrack(track: TrackItem, reason?: Reason) {
|
||||
|
||||
reportPlaybackStarted(track, 0)
|
||||
|
||||
// Proactively resolve URLs for upcoming tracks so the native player can buffer
|
||||
// them for gapless playback before onTracksNeedUpdate fires.
|
||||
TrackPlayer.getNextTracks(TRACKPLAYER_LOOKAHEAD_COUNT)
|
||||
.then((upcomingTracks) => {
|
||||
const unresolved = upcomingTracks.filter((t) => !t.url)
|
||||
if (unresolved.length > 0) return updateTrackMediaInfo(unresolved)
|
||||
})
|
||||
.catch((err) => console.warn('Failed to preload lookahead URLs', err))
|
||||
|
||||
// Apply audio normalization if enabled in settings
|
||||
const { enableAudioNormalization } = usePlayerSettingsStore.getState()
|
||||
if (enableAudioNormalization) {
|
||||
|
||||
Reference in New Issue
Block a user