fix lyrics delta + fix translation color in lyrics

This commit is contained in:
Pato05 2024-07-01 13:16:11 +02:00
parent cf3829e103
commit 99fb6521f2
No known key found for this signature in database
GPG key ID: ED4C6F9C3D574FB6
6 changed files with 67 additions and 42 deletions

4
.gitignore vendored
View file

@ -71,3 +71,7 @@ testfiles/
translations/crowdin.zip translations/crowdin.zip
translations/freezer.json translations/freezer.json
translations/exp translations/exp
# Ignore flatpak builds
flatpak/build-dir
flatpak/.flatpak-builder

View file

@ -14,9 +14,10 @@ executableName=freezer
# ------------------------------- Build Flatpak ----------------------------- # # ------------------------------- Build Flatpak ----------------------------- #
# Extract portable Flutter build. # Find and extract portable build
mkdir -p $projectName mkdir -p $projectName
tar -xf $projectName-linux.tar.gz -C $projectName EXTRACT_DIR=`pwd`"/$projectName"
tar -xf "../build/linux/x64/release/$projectName-linux-*.tar.gz" -C "$EXTRACT_DIR"
# Copy the portable app to the Flatpak-based location. # Copy the portable app to the Flatpak-based location.
cp -r $projectName /app/ cp -r $projectName /app/

View file

@ -88,6 +88,7 @@ class DeezerAudioSource extends StreamAudioSource {
if (_downloadUrl != null && quality != newQuality) { if (_downloadUrl != null && quality != newQuality) {
// update currentUrl to get tracks with new quality // update currentUrl to get tracks with new quality
_deezerAudio.quality = newQuality;
_downloadUrl = null; _downloadUrl = null;
} }

View file

@ -658,6 +658,7 @@ class AudioPlayerTask extends BaseAudioHandler {
Future customAction(String name, [Map<String, dynamic>? extras]) async { Future customAction(String name, [Map<String, dynamic>? extras]) async {
switch (name) { switch (name) {
case 'updateQuality': case 'updateQuality':
_logger.fine('updateQuality($extras)');
//Pass wifi & mobile quality by custom action //Pass wifi & mobile quality by custom action
//Isolate can't access globals //Isolate can't access globals
wifiQuality = extras!['wifiQuality'] as AudioQuality; wifiQuality = extras!['wifiQuality'] as AudioQuality;

View file

@ -108,7 +108,7 @@ class Settings {
@HiveField(26) @HiveField(26)
bool colorGradientBackground = false; bool colorGradientBackground = false;
@HiveField(27) @HiveField(27)
bool blurPlayerBackground = false; bool blurPlayerBackground = true;
@HiveField(28) @HiveField(28)
String font = 'System'; String font = 'System';
@HiveField(29) @HiveField(29)
@ -117,8 +117,8 @@ class Settings {
int? displayMode; int? displayMode;
@HiveField(31, defaultValue: true) @HiveField(31, defaultValue: true)
bool enableFilledPlayButton = true; bool enableFilledPlayButton = true;
@HiveField(32, defaultValue: false) @HiveField(32, defaultValue: true)
bool playerBackgroundOnLyrics = false; bool playerBackgroundOnLyrics = true;
@HiveField(33, defaultValue: NavigatorRouteType.material) @HiveField(33, defaultValue: NavigatorRouteType.material)
NavigatorRouteType navigatorRouteType = NavigatorRouteType.material; NavigatorRouteType navigatorRouteType = NavigatorRouteType.material;
@ -161,8 +161,8 @@ class Settings {
@HiveField(45, defaultValue: false) @HiveField(45, defaultValue: false)
bool materialYouAccent = false; bool materialYouAccent = false;
@HiveField(46, defaultValue: true) @HiveField(46, defaultValue: false)
bool playerAlbumArtDropShadow = true; bool playerAlbumArtDropShadow = false;
@HiveField(47, defaultValue: false) @HiveField(47, defaultValue: false)
bool seekAsSkip = false; bool seekAsSkip = false;

View file

@ -282,12 +282,11 @@ class _LyricsWidgetState extends State<LyricsWidget>
if (_showTranslation) if (_showTranslation)
Text(_lyrics!.lyrics![i].translated!, Text(_lyrics!.lyrics![i].translated!,
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: TextStyle( style: lyricsStyle.getTextStyle(
color: Color.lerp( isActive,
Theme.of(context).colorScheme.onBackground, Color.lerp(textColor, Colors.black, 0.25)!
Colors.black, .withOpacity(isActive ? 1.0 : 0.25),
0.12), 20.0)),
fontSize: 20.0)),
], ],
), ),
))); )));
@ -296,6 +295,7 @@ class _LyricsWidgetState extends State<LyricsWidget>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final lyricsStyle = LyricsStyle.fromIndex(settings.lyricsStyle); final lyricsStyle = LyricsStyle.fromIndex(settings.lyricsStyle);
var extentBefore = 0.0;
return Stack( return Stack(
children: [ children: [
_error != null _error != null
@ -305,45 +305,63 @@ class _LyricsWidgetState extends State<LyricsWidget>
_loading _loading
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: LayoutBuilder(builder: (context, constraints) { : LayoutBuilder(builder: (context, constraints) {
return NotificationListener<ScrollStartNotification>( return NotificationListener<ScrollNotification>(
onNotification: (notification) { onNotification: (notification) {
if (!_syncedLyrics) return false; if (!_syncedLyrics) return false;
final extentDelta =
(notification.metrics.extentBefore -
notification.metrics.extentAfter)
.abs();
// avoid accidental clicks // avoid accidental clicks
const extentThreshold = 9000.0; final extentDelta =
print('delta: $extentDelta'); (notification.metrics.pixels - extentBefore)
if (extentDelta >= extentThreshold && .abs();
!_animatedScroll && extentBefore = notification.metrics.pixels;
const extentThreshold = 20.0;
if (!_animatedScroll &&
!_freeScroll &&
!_loading && !_loading &&
!_freeScroll) { extentDelta >= extentThreshold) {
setState(() => _freeScroll = true); setState(() => _freeScroll = true);
} }
return false; return false;
}, },
child: ScrollConfiguration( child: ScrollConfiguration(
behavior: _scrollBehavior, behavior: _scrollBehavior,
child: FadingEdgeScrollView.fromScrollView( child: _syncedLyrics
gradientFractionOnStart: 0.25, ? FadingEdgeScrollView.fromScrollView(
gradientFractionOnEnd: 0.25, gradientFractionOnStart: 0.25,
child: ListView.builder( gradientFractionOnEnd: 0.25,
padding: EdgeInsets.symmetric( child: ListView.builder(
horizontal: 8.0, padding: EdgeInsets.symmetric(
vertical: constraints.maxHeight / 2 - horizontal: 8.0,
height / 2), vertical: !_syncedLyrics
controller: _controller, ? 4.0
itemCount: _lyrics!.lyrics!.length + 1, : constraints.maxHeight / 2 -
itemBuilder: (BuildContext context, int i) { height / 2),
return AutoScrollTag( controller: _controller,
key: ValueKey(i), itemCount: _lyrics!.lyrics!.length + 1,
controller: _controller, itemBuilder:
index: i, (BuildContext context, int i) {
child: return AutoScrollTag(
_buildLyricWidget(i, lyricsStyle)); key: ValueKey(i),
}, controller: _controller,
)))); index: i,
child: _buildLyricWidget(
i, lyricsStyle));
},
))
: FadingEdgeScrollView
.fromSingleChildScrollView(
gradientFractionOnStart: 0.25,
gradientFractionOnEnd: 0.25,
child: SingleChildScrollView(
controller: _controller,
child: Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
_lyrics!.lyrics![0].text!,
style:
TextStyle(fontSize: 20.0),
),
)))));
}), }),
if (_availableTranslation) if (_availableTranslation)
Positioned( Positioned(