Skip to content

Commit afca18d

Browse files
Merge pull request #452 from NeoCoderMatrix86/437-import-of-cuesheet-is-not-undoable-as-one-thing
Import of cuesheet is not undoable as one thing
2 parents 8d09039 + 963450c commit afca18d

5 files changed

Lines changed: 17 additions & 3 deletions

File tree

AudioCuesheetEditor.End2EndTests/Pages/IndexTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ public async Task OpenSampleCuesheetAsync()
116116
await Expect(Page.GetByRole(AriaRole.Textbox, new() { Name = "Cuesheet title" })).ToHaveValueAsync("Sample CD Title");
117117
await Expect(Page.GetByRole(AriaRole.Cell, new() { Name = "Sample Artist 3 Clear" })).ToBeVisibleAsync();
118118
await Expect(Page.GetByRole(AriaRole.Cell, new() { Name = ":45:54" }).Nth(1)).ToBeVisibleAsync();
119+
await Page.GetByRole(AriaRole.Toolbar).GetByRole(AriaRole.Button).Filter(new() { HasTextRegex = new Regex("^$") }).First.ClickAsync();
120+
await Expect(Page.GetByRole(AriaRole.Paragraph).Filter(new() { HasText = "Tracks has invalid Count (0)!" })).ToBeVisibleAsync();
119121
}
120122

121123
[TestMethod]
@@ -131,6 +133,8 @@ public async Task OpenProjectFileAsync()
131133
await Expect(Page.GetByRole(AriaRole.Cell, new() { Name = "Sample Title 2 Clear" })).ToBeVisibleAsync();
132134
await Expect(Page.GetByRole(AriaRole.Cell, new() { Name = ":09:23" }).Nth(1)).ToBeVisibleAsync();
133135
await Expect(Page.GetByRole(AriaRole.Cell, new() { Name = ":45:54" }).First).ToBeVisibleAsync();
136+
await Page.GetByRole(AriaRole.Toolbar).GetByRole(AriaRole.Button).Filter(new() { HasTextRegex = new Regex("^$") }).First.ClickAsync();
137+
await Expect(Page.GetByRole(AriaRole.Paragraph).Filter(new() { HasText = "Tracks has invalid Count (0)!" })).ToBeVisibleAsync();
134138
}
135139

136140
[TestMethod]

AudioCuesheetEditor.Tests/Services/UI/SessionStateContainerTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ public void Cuesheet_SetNewValue_ShouldTriggerCuesheetChangedEvent()
4040
// Arrange
4141
var newCuesheet = new Cuesheet();
4242
bool eventTriggered = false;
43+
bool traceablePropertyChangedFired = false;
4344
sessionStateContainer.CuesheetChanged += (sender, args) => eventTriggered = true;
45+
sessionStateContainer.TraceablePropertyChanged += (sender, args) => traceablePropertyChangedFired = true;
4446

4547
// Act
4648
sessionStateContainer.Cuesheet = newCuesheet;
4749

4850
// Assert
4951
Assert.IsTrue(eventTriggered);
50-
traceChangeManagerMock.Verify(m => m.Reset(), Times.Exactly(2));
52+
Assert.IsTrue(traceablePropertyChangedFired);
5153
traceChangeManagerMock.Verify(m => m.TraceChanges(newCuesheet), Times.Once);
5254
}
5355

AudioCuesheetEditor/Services/IO/ImportManager.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public async Task<Dictionary<IBrowserFile, ImportFileType>> ImportFilesAsync(IEn
4848
{
4949
if (_fileInputManager.CheckFileMimeType(file, FileMimeTypes.Projectfile, FileExtensions.Projectfile))
5050
{
51+
//TODO: can not be undone
5152
var fileContent = await ReadFileContentAsync(file);
5253
var cuesheet = Projectfile.ImportFile(fileContent.ToArray());
5354
if (cuesheet != null)
@@ -114,7 +115,9 @@ private void ImportCuesheet(IEnumerable<String?> fileContent)
114115
_sessionStateContainer.Importfile = CuesheetImportService.Analyse(fileContent);
115116
if (_sessionStateContainer.Importfile.AnalysedCuesheet != null)
116117
{
118+
_traceChangeManager.BulkEdit = true;
117119
CopyCuesheet(_sessionStateContainer.Cuesheet, _sessionStateContainer.Importfile.AnalysedCuesheet);
120+
_traceChangeManager.BulkEdit = false;
118121
}
119122
}
120123
private static async Task<MemoryStream> ReadFileContentAsync(IBrowserFile file)

AudioCuesheetEditor/Services/UI/SessionStateContainer.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
using AudioCuesheetEditor.Model.AudioCuesheet;
1717
using AudioCuesheetEditor.Model.IO.Audio;
1818
using AudioCuesheetEditor.Model.IO.Import;
19+
using AudioCuesheetEditor.Model.UI;
1920

2021
namespace AudioCuesheetEditor.Services.UI
2122
{
22-
public class SessionStateContainer : ISessionStateContainer
23+
public class SessionStateContainer : ISessionStateContainer, ITraceable
2324
{
2425
public event EventHandler? CuesheetChanged;
2526
public event EventHandler? ImportCuesheetChanged;
27+
public event EventHandler<TraceablePropertiesChangedEventArgs>? TraceablePropertyChanged;
2628

2729
private readonly ITraceChangeManager _traceChangeManager;
2830
private Cuesheet cuesheet;
@@ -34,6 +36,7 @@ public SessionStateContainer(ITraceChangeManager traceChangeManager)
3436
_traceChangeManager = traceChangeManager;
3537
cuesheet = new Cuesheet();
3638
SetCuesheetReference(cuesheet);
39+
_traceChangeManager.TraceChanges(this);
3740
}
3841
public Cuesheet Cuesheet
3942
{
@@ -84,9 +87,10 @@ public void ResetImport()
8487

8588
private void SetCuesheetReference(Cuesheet value)
8689
{
90+
var previousValue = Cuesheet;
8791
cuesheet = value;
88-
_traceChangeManager.Reset();
8992
_traceChangeManager.TraceChanges(Cuesheet);
93+
TraceablePropertyChanged?.Invoke(this, new TraceablePropertiesChangedEventArgs(new TraceableChange(previousValue, nameof(Cuesheet))));
9094
CuesheetChanged?.Invoke(this, EventArgs.Empty);
9195
}
9296
}

AudioCuesheetEditor/Shared/AppBar.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ along with Foobar. If not, see
162162
if (result?.Canceled == false)
163163
{
164164
_sessionStateContainer.Cuesheet = new();
165+
TraceChangeManager.Reset();
165166
}
166167
}
167168

0 commit comments

Comments
 (0)