Skip to content

Commit

Permalink
Fine tuned the LyricsScroller
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexanderDotH committed May 6, 2023
1 parent e6e2b76 commit 98a4771
Show file tree
Hide file tree
Showing 11 changed files with 139 additions and 123 deletions.
21 changes: 0 additions & 21 deletions OpenLyricsClient.Shared/Utils/CryptoUtils.cs

This file was deleted.

6 changes: 4 additions & 2 deletions OpenLyricsClient/App.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@
<Style>

<Style.Resources>

<SolidColorBrush x:Key="PrimaryThemeColorBrush" Color="#dc143c">
<SolidColorBrush.Transitions>
<Transitions>
<ColorTransition Property="Color" Duration="0:0:0.5" Easing="LinearEasing"/>
<ColorTransition Property="Color" Duration="0:0:0.5" Easing="CircularEaseOut"/>
</Transitions>
</SolidColorBrush.Transitions>
</SolidColorBrush>
Expand All @@ -64,13 +64,15 @@
</Transitions>
</SolidColorBrush.Transitions>
</SolidColorBrush>

<SolidColorBrush x:Key="SecondaryThemeFontColorBrush" Color="#FFFFFF">
<SolidColorBrush.Transitions>
<Transitions>
<ColorTransition Property="Color" Duration="0:0:0.5" Easing="CircularEaseOut"/>
</Transitions>
</SolidColorBrush.Transitions>
</SolidColorBrush>

<SolidColorBrush x:Key="LightThemeFontColorBrush" Color="#FFFFFF">
<SolidColorBrush.Transitions>
<Transitions>
Expand Down
2 changes: 1 addition & 1 deletion OpenLyricsClient/Backend/Cache/CacheEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public CacheEntry(SongRequestObject songRequestObject, CacheData cacheData, long
append += songRequestObject.Artists;
append += songRequestObject.SongDuration;

this._id = CryptoUtils.ToMD5(append);
this._id = DevBase.Cryptography.MD5.MD5.ToMD5String(append);
}
}

Expand Down
2 changes: 1 addition & 1 deletion OpenLyricsClient/Backend/Cache/CacheManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ private string CalculateID(SongRequestObject songRequestObject)
append += songRequestObject.Artists;
append += songRequestObject.SongDuration;

return CryptoUtils.ToMD5(append);
return DevBase.Cryptography.MD5.MD5.ToMD5String(append);
}

private long CalculateExpirationDate()
Expand Down
151 changes: 76 additions & 75 deletions OpenLyricsClient/Backend/Handler/Artwork/ArtworkHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ public ArtworkHandler(SongHandler songHandler)

ArtworkFoundHandler += OnArtworkFoundHandler;


Core.INSTANCE.TaskRegister.Register(
out _applyArtworkSuspensionToken,
new Task(async () => await ApplyArtworkTask(), Core.INSTANCE.CancellationTokenSource.Token, TaskCreationOptions.LongRunning),
Expand All @@ -61,8 +60,78 @@ private void OnArtworkFoundHandler(object sender, ArtworkFoundEventArgs args)
song.Artwork = args.Artwork;

ArtworkAppliedEvent(args.Artwork);
}

public async Task FireArtworkSearch(SongResponseObject songResponseObject, SongChangedEventArgs songChangedEventArgs)
{
if (songChangedEventArgs.EventType == EventType.PRE)
return;

if (DataValidator.ValidateData(songChangedEventArgs) &&
DataValidator.ValidateData(songChangedEventArgs.Song))
{
if (Core.INSTANCE.CacheManager.IsArtworkInCache(songResponseObject.SongRequestObject))
return;

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

await this._artworkCollector.CollectArtwork(songResponseObject);

this._debugger.Write("Took " + stopwatch.ElapsedMilliseconds + "ms to fetch the artwork!", DebugType.INFO);
}
}

private async Task ApplyArtworkTask()
{
while (!this._disposed)
{
await Task.Delay(500);

Shared.Structure.Song.Song song = this._songHandler.CurrentSong;

if (!DataValidator.ValidateData(song))
continue;

if (!DataValidator.ValidateData(song.SongMetadata))
continue;

SongRequestObject songRequestObject = SongRequestObject.FromSong(song);

if (!DataValidator.ValidateData(songRequestObject))
continue;

Shared.Structure.Artwork.Artwork artworkCache = Core.INSTANCE.CacheManager.GetArtworkByRequest(songRequestObject);

if (!DataValidator.ValidateData(artworkCache))
continue;

CalcAndApplyColors(artworkCache);

if (artworkCache.Equals(song.Artwork))
continue;

if (artworkCache.ArtworkColor.A == 0 &&
artworkCache.ArtworkColor.R == 0 &&
artworkCache.ArtworkColor.G == 0 &&
artworkCache.ArtworkColor.B == 0)
{
await artworkCache.CalculateColor();
Core.INSTANCE.CacheManager.WriteToCache(songRequestObject, artworkCache);
}

if (!DataValidator.ValidateData(artworkCache))
continue;

if (!DataValidator.ValidateData(args.Artwork.ArtworkColor))
ArtworkFoundEvent(songRequestObject, artworkCache);

this._oldArtwork = artworkCache;
}
}

private void CalcAndApplyColors(Shared.Structure.Artwork.Artwork artwork)
{
if (!DataValidator.ValidateData(artwork.ArtworkColor))
return;

SolidColorBrush primaryColor = App.Current.FindResource("PrimaryColorBrush") as SolidColorBrush;
Expand All @@ -83,11 +152,11 @@ private void OnArtworkFoundHandler(object sender, ArtworkFoundEventArgs args)
}
else
{
color.Color = args.Artwork.ArtworkColor;
color.Color = artwork.ArtworkColor;
}
color.Color = args.Artwork.ArtworkColor;
secondaryColor.Color = args.Artwork.DarkArtworkColor;
color.Color = artwork.ArtworkColor;
secondaryColor.Color = artwork.DarkArtworkColor;
byte light = 120;
byte primary = 22;
Expand All @@ -103,7 +172,7 @@ private void OnArtworkFoundHandler(object sender, ArtworkFoundEventArgs args)
byte minG = (byte)Math.Round((double)(color.Color.G / 100.0));
byte minB = (byte)Math.Round((double)(color.Color.B / 100.0));
if (args.Artwork.GetBrightness() < 30)
if (artwork.GetBrightness() < 30)
{
selectedLineTextColor!.Color = new Color(255, (byte)(minR * darkSelected),
(byte)(minG * darkSelected), (byte)(minB * darkSelected));
Expand Down Expand Up @@ -133,78 +202,10 @@ private void OnArtworkFoundHandler(object sender, ArtworkFoundEventArgs args)
textColor!.Color = new Color(255, primary, primary, primary);
secondaryTextColor!.Color = new Color(255, secondary, secondary, secondary);
}
});
}

public async Task FireArtworkSearch(SongResponseObject songResponseObject, SongChangedEventArgs songChangedEventArgs)
{
if (songChangedEventArgs.EventType == EventType.PRE)
return;

if (DataValidator.ValidateData(songChangedEventArgs) &&
DataValidator.ValidateData(songChangedEventArgs.Song))
{
if (Core.INSTANCE.CacheManager.IsArtworkInCache(songResponseObject.SongRequestObject))
return;

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

await this._artworkCollector.CollectArtwork(songResponseObject);

this._debugger.Write("Took " + stopwatch.ElapsedMilliseconds + "ms to fetch the artwork!", DebugType.INFO);
}
}

private async Task ApplyArtworkTask()
{
while (!this._disposed)
{
await Task.Delay(500);

Shared.Structure.Song.Song song = this._songHandler.CurrentSong;

if (!DataValidator.ValidateData(song))
continue;

if (!DataValidator.ValidateData(song.SongMetadata))
continue;

SongRequestObject songRequestObject = SongRequestObject.FromSong(song);

if (!DataValidator.ValidateData(songRequestObject))
continue;

Shared.Structure.Artwork.Artwork artworkCache = Core.INSTANCE.CacheManager.GetArtworkByRequest(songRequestObject);

if (!DataValidator.ValidateData(artworkCache))
continue;

if (artworkCache.Equals(song.Artwork))
continue;

if (artworkCache.ArtworkColor.A == 0 &&
artworkCache.ArtworkColor.R == 0 &&
artworkCache.ArtworkColor.G == 0 &&
artworkCache.ArtworkColor.B == 0)
{
await artworkCache.CalculateColor();
Core.INSTANCE.CacheManager.WriteToCache(songRequestObject, artworkCache);
}

if (!DataValidator.ValidateData(artworkCache))
continue;

if (this._oldArtwork == null || this._oldArtwork != artworkCache)
ArtworkFoundEvent(songRequestObject, artworkCache);

this._oldArtwork = artworkCache;
}
}


protected virtual void ArtworkFoundEvent(SongRequestObject songResponseObject, Shared.Structure.Artwork.Artwork artwork)
{
ArtworkFoundEventHandler artworkFound = ArtworkFoundHandler;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Avalonia.Controls;
using Avalonia.Media;
using OpenLyricsClient.Backend;
using OpenLyricsClient.Backend.Events.EventArgs;
using OpenLyricsClient.Backend.Settings.Sections.Lyrics;
using OpenLyricsClient.Frontend.Models.Pages.Settings;
using OpenLyricsClient.Shared.Structure.Lyrics;

namespace OpenLyricsClient.Frontend.Models.Custom;
Expand All @@ -18,6 +22,15 @@ public NewLyricsScrollerViewModel()
Core.INSTANCE.LyricHandler.LyricChanged += LyricHandlerOnLyricChanged;
Core.INSTANCE.LyricHandler.LyricsFound += LyricHandlerOnLyricsFound;
Core.INSTANCE.SongHandler.SongChanged += SongHandlerOnSongChanged;
Core.INSTANCE.SettingsHandler.SettingsChanged += SettingsHandlerOnSettingsChanged;
}

private void SettingsHandlerOnSettingsChanged(object sender, SettingsChangedEventArgs settingschangedeventargs)
{
if (!settingschangedeventargs.Field.Equals("Artwork Background"))
return;

OnPropertyChanged("UiBackground");
}

private void SongHandlerOnSongChanged(object sender, SongChangedEventArgs songchangedevent)
Expand Down Expand Up @@ -47,6 +60,18 @@ public LyricPart? Lyric
set => SetField(ref this._lyric, value);
}

public SolidColorBrush UiBackground
{
get
{
if (Core.INSTANCE.SettingsHandler.Settings<LyricsSection>()?.GetValue<bool>("Artwork Background") == true)
return App.Current.FindResource("PrimaryThemeColorBrush") as SolidColorBrush;

return App.Current.FindResource("PrimaryBackgroundBrush") as SolidColorBrush;
}
}


protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ private void SettingManagerOnSettingsChanged(object sender, SettingsChangedEvent
if (settingschangedeventargs.Section != typeof(SpotifySection))
return;

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("UserGreeting"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("UserFollower"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("UserPlan"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsConnected"));
OnPropertyChanged("UserGreeting");
OnPropertyChanged("UserFollower");
OnPropertyChanged("UserPlan");
OnPropertyChanged("IsConnected");
}

public string UserGreeting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ public ScrollPreviewSubPageViewModel()

public ObservableCollection<LyricPart> CurrentLyricParts
{
get => _lyricParts;
get => this._lyricParts;
set
{
_lyricParts = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("CurrentLyricParts"));
this._lyricParts = value;
OnPropertyChanged("CurrentLyricParts");
}
}

Expand All @@ -41,7 +41,7 @@ public LyricPart CurrentLyricPart
set
{
_lyricPart = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("CurrentLyricPart"));
OnPropertyChanged("CurrentLyricPart");
}
}

Expand Down
5 changes: 3 additions & 2 deletions OpenLyricsClient/Frontend/View/Custom/NewLyricsScroller.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<custom:NewLyricsScrollerViewModel/>
</UserControl.DataContext>

<Grid Background="{DynamicResource PrimaryThemeColorBrush}">
<Grid Background="{Binding UiBackground}">
<custom:CustomScrollViewer Name="CTRL_Viewer">
<Panel Name="CTRL_Container">
<ItemsRepeater Name="HIDDEN_CTRL_Repeater"
Expand Down Expand Up @@ -46,7 +46,8 @@
</ItemsRepeater.ItemTemplate>
<ItemsRepeater.Transitions>
<Transitions>
<ThicknessTransition Property="Margin" Duration="0:0:3.0" Easing="LinearEasing"/>
<DoubleTransition Property="Opacity" Duration="0:0:3.0" Easing="CircularEaseOut"/>
<ThicknessTransition Property="Margin" Duration="0:0:1.0" Easing="CircularEaseOut"/>
</Transitions>
</ItemsRepeater.Transitions>
</ItemsRepeater>
Expand Down
Loading

0 comments on commit 98a4771

Please sign in to comment.