Skip to content

Commit a4ebc48

Browse files
Fix service
1 parent 2872839 commit a4ebc48

2 files changed

Lines changed: 14 additions & 11 deletions

File tree

AudioCuesheetEditor.Tests/Services/UI/ApplicationOptionsTimeSpanParserTests.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public async Task TimespanTextChanged_ValidInput_SetsPropertyCorrectly()
4343
.Setup(p => p.GetOptionsAsync<ApplicationOptions>())
4444
.ReturnsAsync(options);
4545
var parser = new ApplicationOptionsTimeSpanParser(mockOptionsProvider.Object);
46-
await Task.Delay(50);
4746
var track = new Track();
4847
// Act
4948
await parser.TimespanTextChanged(track, x => x.Begin, "92:12");
@@ -66,7 +65,6 @@ public async Task TimespanTextChanged_InvalidInput_SetsNull()
6665
.Setup(p => p.GetOptionsAsync<ApplicationOptions>())
6766
.ReturnsAsync(options);
6867
var parser = new ApplicationOptionsTimeSpanParser(mockOptionsProvider.Object);
69-
await Task.Delay(50);
7068
var track = new Track();
7169
// Act
7270
await parser.TimespanTextChanged(track, x => x.End, "not a time");
@@ -75,7 +73,7 @@ public async Task TimespanTextChanged_InvalidInput_SetsNull()
7573
}
7674

7775
[TestMethod()]
78-
public async Task GetTimespanFormatted_ValidFormat_ReturnsCorrectString()
76+
public void GetTimespanFormatted_ValidFormat_ReturnsCorrectString()
7977
{
8078
// Arrange
8179
var options = new ApplicationOptions()
@@ -87,15 +85,14 @@ public async Task GetTimespanFormatted_ValidFormat_ReturnsCorrectString()
8785
.Setup(p => p.GetOptionsAsync<ApplicationOptions>())
8886
.ReturnsAsync(options);
8987
var parser = new ApplicationOptionsTimeSpanParser(mockOptionsProvider.Object);
90-
await Task.Delay(50);
9188
// Act
9289
var result = parser.GetTimespanFormatted(new TimeSpan(0, 1, 30, 27, 200, 103));
9390
// Assert
9491
Assert.AreEqual("01:30:27", result);
9592
}
9693

9794
[TestMethod()]
98-
public async Task GetTimespanFormatted_InvalidFormat_FallbackToDefault()
95+
public void GetTimespanFormatted_InvalidFormat_FallbackToDefault()
9996
{
10097
// Arrange
10198
var options = new ApplicationOptions()
@@ -107,7 +104,6 @@ public async Task GetTimespanFormatted_InvalidFormat_FallbackToDefault()
107104
.Setup(p => p.GetOptionsAsync<ApplicationOptions>())
108105
.ReturnsAsync(options);
109106
var parser = new ApplicationOptionsTimeSpanParser(mockOptionsProvider.Object);
110-
await Task.Delay(50);
111107
// Act
112108
var result = parser.GetTimespanFormatted(new TimeSpan(0, 1, 30, 27, 200, 103));
113109
// Assert

AudioCuesheetEditor/Services/UI/ApplicationOptionsTimeSpanParser.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,14 @@ public class ApplicationOptionsTimeSpanParser
2626
private readonly ILocalStorageOptionsProvider _localStorageOptionsProvider;
2727

2828
private ApplicationOptions? applicationOptions;
29+
private Task? _initTask;
2930
private bool disposedValue;
3031

3132
public ApplicationOptionsTimeSpanParser(ILocalStorageOptionsProvider localStorageOptionsProvider)
3233
{
3334
_localStorageOptionsProvider = localStorageOptionsProvider;
3435
_localStorageOptionsProvider.OptionSaved += LocalStorageOptionsProvider_OptionSaved;
35-
Task.Run(InitAsync);
36+
_initTask = InitAsync();
3637
}
3738

3839
public async Task TimespanTextChanged<T, TProperty>(T entity, Expression<Func<T, TProperty>> expression, String value)
@@ -41,10 +42,7 @@ public async Task TimespanTextChanged<T, TProperty>(T entity, Expression<Func<T,
4142
{
4243
throw new ArgumentException("'expression' should be a member expression");
4344
}
44-
if (applicationOptions == null)
45-
{
46-
await InitAsync();
47-
}
45+
await EnsureInitializedAsync();
4846
TimeSpan? result = TimeSpanUtility.ParseTimeSpan(value, applicationOptions?.TimeSpanFormat);
4947
switch (memberExpression.Member.MemberType)
5048
{
@@ -59,6 +57,7 @@ public async Task TimespanTextChanged<T, TProperty>(T entity, Expression<Func<T,
5957
public string? GetTimespanFormatted(TimeSpan? timeSpan)
6058
{
6159
string? formatted = null;
60+
EnsureInitializedAsync().GetAwaiter().GetResult();
6261
if (timeSpan.HasValue)
6362
{
6463
try
@@ -92,6 +91,14 @@ private async Task InitAsync()
9291
applicationOptions ??= await _localStorageOptionsProvider.GetOptionsAsync<ApplicationOptions>();
9392
}
9493

94+
private async Task EnsureInitializedAsync()
95+
{
96+
if (_initTask != null)
97+
{
98+
await _initTask;
99+
}
100+
}
101+
95102
private void LocalStorageOptionsProvider_OptionSaved(object? sender, IOptions options)
96103
{
97104
if (options is ApplicationOptions applicationOption)

0 commit comments

Comments
 (0)