Skip to content

Commit

Permalink
Fixed fade bugs when changing sounds
Browse files Browse the repository at this point in the history
  • Loading branch information
dpaulino committed May 12, 2024
1 parent 05ce725 commit c5c5919
Showing 1 changed file with 13 additions and 17 deletions.
30 changes: 13 additions & 17 deletions src/AmbientSounds.Uwp/Controls/Slideshow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -27,7 +26,8 @@ public sealed partial class Slideshow : UserControl
private readonly ITelemetry _telemetry;
private readonly ISoundService _soundDataProvider;
private readonly IDispatcherQueue _dispatcherQueue;
private CancellationTokenSource _cts = new();
private readonly SemaphoreSlim _soundsChangedLock = new(1, 1);
private CancellationTokenSource _loadingCts = new();
private IList<string>? _images;
private int _imageIndex1;
private int _imageIndex2;
Expand Down Expand Up @@ -75,17 +75,14 @@ public string Image2Source

public async Task LoadAsync(string? soundIdToUse = null)
{
_cts.Cancel();
_cts = new();
_loadingCts.Cancel();
_loadingCts = new();

try
{
await InternalLoadAsync(soundIdToUse, _cts.Token);
}
catch (OperationCanceledException)
{
Debug.WriteLine("################# internal load canceled");
await InternalLoadAsync(soundIdToUse, _loadingCts.Token);
}
catch (OperationCanceledException) { }
}

private async Task InternalLoadAsync(string? soundIdToUse, CancellationToken ct)
Expand Down Expand Up @@ -132,7 +129,6 @@ private async Task InternalLoadAsync(string? soundIdToUse, CancellationToken ct)

Image1.Visibility = Visibility.Visible;
Image2.Visibility = Visibility.Collapsed;
Debug.WriteLine("################# LoadAsync Image 1 fade in and slide starting");
_ = Image1FadeInAndSlide.StartAsync(ct);

Image2Source = _images[_imageIndex2]; // Preload next
Expand All @@ -150,10 +146,8 @@ private async Task CycleImagesAsync()
if (Image1.Visibility is Visibility.Visible)
{
Image2.Visibility = Visibility.Visible;
Debug.WriteLine("################# CycleImagesAsync Image 2 fade in starting");
_ = Image2FadeInAndSlide.StartAsync();

Debug.WriteLine("################# CycleImagesAsync Image 1 fade out starting");
await Image1FadeOut.StartAsync();
Image1.Visibility = Visibility.Collapsed;

Expand All @@ -163,10 +157,8 @@ private async Task CycleImagesAsync()
else if (Image2.Visibility is Visibility.Visible)
{
Image1.Visibility = Visibility.Visible;
Debug.WriteLine("################# CycleImagesAsync Image 1 fade in starting");
_ = Image1FadeInAndSlide.StartAsync();

Debug.WriteLine("################# CycleImagesAsync Image 2 fade out starting");
await Image2FadeOut.StartAsync();
Image2.Visibility = Visibility.Collapsed;

Expand Down Expand Up @@ -226,18 +218,22 @@ private async void OnSoundsChanged(object sender, SoundChangedEventArgs e)

private async Task HandleSoundChangeAsync()
{
await _soundsChangedLock.WaitAsync();
_timerService.Stop();

if (Image1.Visibility is Visibility.Visible)
{
Debug.WriteLine("################# HandleSoundChange Image 1 fade out starting");
await Image1FadeOut.StartAsync();
Image1.Visibility = Visibility.Collapsed;
}
else if (Image2.Visibility is Visibility.Visible)

if (Image2.Visibility is Visibility.Visible)
{
Debug.WriteLine("################# HandleSoundChange Image 2 fade out starting");
await Image2FadeOut.StartAsync();
Image2.Visibility = Visibility.Collapsed;
}

_soundsChangedLock.Release();
}

private void TimerIntervalElapsed(object sender, TimeSpan e)
Expand Down

0 comments on commit c5c5919

Please sign in to comment.