Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
6a06e85
update version
NeoCoderMatrix86 Feb 16, 2026
4c8c4be
Merge pull request #538 from NeoCoderMatrix86/536-prepare-v1040
NeoCoderMatrix86 Feb 16, 2026
68c1206
best practise corrections
NeoCoderMatrix86 Feb 16, 2026
c8fecb0
added TODOs
NeoCoderMatrix86 Feb 17, 2026
d85b9b5
fixed TODOs
NeoCoderMatrix86 Feb 17, 2026
19f8cb1
Update ImportManagerTests.cs
NeoCoderMatrix86 Feb 18, 2026
9344f78
set new cuesheet when importing cuesheet
NeoCoderMatrix86 Feb 18, 2026
4427e3c
Ask for user confirmation upon open file
NeoCoderMatrix86 Feb 18, 2026
6c8ab9c
Rename ConfirmationDialog
NeoCoderMatrix86 Feb 18, 2026
056ec1a
Merge pull request #539 from NeoCoderMatrix86/520-opening-a-cuesheet-…
NeoCoderMatrix86 Feb 18, 2026
4a9e746
update .NET
NeoCoderMatrix86 Feb 19, 2026
150db2e
fix null reference
NeoCoderMatrix86 Feb 19, 2026
ef5be48
Update EditTrackModal.razor
NeoCoderMatrix86 Feb 19, 2026
ec92f9a
Update FileInputManager.cs
NeoCoderMatrix86 Feb 19, 2026
469e460
Update AddTrack.razor
NeoCoderMatrix86 Feb 20, 2026
a10a4d2
Update .editorconfig
NeoCoderMatrix86 Feb 20, 2026
b28d73d
Update index.html
NeoCoderMatrix86 Feb 20, 2026
749553b
use culture for switching culture
NeoCoderMatrix86 Feb 20, 2026
a45051b
reload after switching language
NeoCoderMatrix86 Feb 27, 2026
7d5a6be
Update AppBar.cs
NeoCoderMatrix86 Feb 27, 2026
ab4f9b5
fix tracks table
NeoCoderMatrix86 Feb 27, 2026
a6143a6
Update Track.cs
NeoCoderMatrix86 Feb 27, 2026
7432662
fix tests
NeoCoderMatrix86 Feb 27, 2026
f5f4ad6
reset to method level parlellization
NeoCoderMatrix86 Feb 27, 2026
fba8d10
Update MSTestSettings.cs
NeoCoderMatrix86 Mar 3, 2026
f05f0ee
Update ArtistColumn.razor
NeoCoderMatrix86 Mar 3, 2026
ae3f9fd
Update ArtistColumn.razor
NeoCoderMatrix86 Mar 3, 2026
8130f2a
fix autocomplete handling
NeoCoderMatrix86 Mar 3, 2026
40f1b67
fix browser issues
NeoCoderMatrix86 Mar 4, 2026
fbb3a92
Update Readme.md
NeoCoderMatrix86 Mar 4, 2026
d535581
Update AudioCuesheetEditor.csproj
NeoCoderMatrix86 Mar 4, 2026
5ca3079
Update AudioCuesheetEditor.csproj
NeoCoderMatrix86 Mar 4, 2026
f83f0e9
Merge pull request #542 from NeoCoderMatrix86/512-update-to-net-10
NeoCoderMatrix86 Mar 4, 2026
7436a63
update libraries
NeoCoderMatrix86 Mar 4, 2026
48e3180
fix file input
NeoCoderMatrix86 Mar 4, 2026
2a06c05
Update FileInput.razor
NeoCoderMatrix86 Mar 4, 2026
6d12bc8
Update FileDropOverlay.razor
NeoCoderMatrix86 Mar 4, 2026
6b40468
fix tests
NeoCoderMatrix86 Mar 4, 2026
4c7329b
Update FileDropOverlay.razor
NeoCoderMatrix86 Mar 5, 2026
9d1bdb9
Update FileDropOverlay.razor
NeoCoderMatrix86 Mar 5, 2026
77151ca
first step for displaying export content directly
NeoCoderMatrix86 Mar 5, 2026
5f5e6d6
add localization
NeoCoderMatrix86 Mar 5, 2026
f04ed82
moved to seperate component
NeoCoderMatrix86 Mar 5, 2026
810baa3
display content with multiple files
NeoCoderMatrix86 Mar 5, 2026
432894c
add feedback for user
NeoCoderMatrix86 Mar 5, 2026
1e3e089
fix tests
NeoCoderMatrix86 Mar 5, 2026
8389e82
Merge pull request #543 from NeoCoderMatrix86/411-make-export-profile…
NeoCoderMatrix86 Mar 5, 2026
da6f228
Update AppBar.razor
NeoCoderMatrix86 Mar 6, 2026
14b720e
Merge pull request #544 from NeoCoderMatrix86/445-enable-opening-of-t…
NeoCoderMatrix86 Mar 6, 2026
943431c
fix upload dialog
NeoCoderMatrix86 Mar 9, 2026
6bcef35
Update FileInputManagerTests.cs
NeoCoderMatrix86 Mar 9, 2026
47a52b5
Update ImportManagerTests.cs
NeoCoderMatrix86 Mar 9, 2026
8cbd6af
add tests
NeoCoderMatrix86 Mar 10, 2026
dcaf006
Merge pull request #550 from NeoCoderMatrix86/549-dropping-a-file-doe…
NeoCoderMatrix86 Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,7 +1 @@
[*.cs]

# IDE0016: throw-Ausdruck verwenden
csharp_style_throw_expression = false:suggestion

# IDE0057: Bereichsoperator verwenden
csharp_style_prefer_range_operator = false:suggestion
[*.cs]
14 changes: 7 additions & 7 deletions .github/workflows/build_pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

# version can be found here https://dotnet.microsoft.com/en-us/download/dotnet/9.0
# version can be found here https://dotnet.microsoft.com/en-us/download/dotnet/10.0
- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Install wasm-tools
run: dotnet workload install wasm-tools-net9
run: dotnet workload install wasm-tools

- name: Build release
run: dotnet publish AudioCuesheetEditor --configuration Release --output release

- name: Upload Build Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: AudioCuesheetEditor-Release
path: ./release
Expand All @@ -45,7 +45,7 @@ jobs:
}}
steps:
- name: Download Build Artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: AudioCuesheetEditor-Release
- name: Deploy to Netlify
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,25 @@ jobs:
run-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v6

- name: Set timestamp variable
id: timestamp
run: echo "datetime=$(date +'%Y-%m-%d_%H-%M-%S')" >> $GITHUB_OUTPUT

# version can be found here https://dotnet.microsoft.com/en-us/download/dotnet/9.0
# version can be found here https://dotnet.microsoft.com/en-us/download/dotnet/10.0
- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Install wasm-tools
run: dotnet workload install wasm-tools-net9
run: dotnet workload install wasm-tools

- name: Build & Install
run: dotnet build
- name: Ensure browsers are installed
run: pwsh AudioCuesheetEditor.End2EndTests/bin/Debug/net9.0/playwright.ps1 install --with-deps
run: pwsh AudioCuesheetEditor.End2EndTests/bin/Debug/net10.0/playwright.ps1 install --with-deps

- name: Start App
run: dotnet run --project AudioCuesheetEditor &
Expand Down Expand Up @@ -59,8 +59,8 @@ jobs:

- name: Upload traces
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: playwright-traces-${{ steps.timestamp.outputs.datetime }}
path: AudioCuesheetEditor.End2EndTests/bin/Debug/net9.0/playwright-traces/
path: AudioCuesheetEditor.End2EndTests/bin/Debug/net10.0/playwright-traces/
if-no-files-found: ignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
Expand All @@ -16,8 +16,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Playwright.MSTest.v4" Version="1.57.0" />
<PackageReference Include="MSTest" Version="4.0.2" />
<PackageReference Include="Microsoft.Playwright.MSTest.v4" Version="1.58.0" />
<PackageReference Include="MSTest" Version="4.1.0" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion AudioCuesheetEditor.End2EndTests/MSTestSettings.cs
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]
[assembly: Parallelize()]
18 changes: 7 additions & 11 deletions AudioCuesheetEditor.End2EndTests/Models/AppBar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,32 @@

namespace AudioCuesheetEditor.End2EndTests.Models
{
partial class AppBar
partial class AppBar(IPage page)
{
[GeneratedRegex("^Open$")]
private static partial Regex OpenRegex();

private readonly IPage _page;
private readonly ILocator _menuButton;
private readonly IPage _page = page;
internal ILocator MenuButton => _page.GetByRole(AriaRole.Toolbar).GetByRole(AriaRole.Button, new() { Name = "More" });

internal ILocator UndoButton => _page.GetByRole(AriaRole.Button, new() { Name = "undo" });

internal ILocator RedoButton => _page.GetByRole(AriaRole.Button, new() { Name = "redo" });

internal ILocator HomeButton => _page.Locator(".mud-button-root").First;

internal AppBar(IPage page)
{
_page = page;
_menuButton = _page.GetByRole(AriaRole.Button, new() { Name = "More" });
}

internal async Task OpenSettingsAsync()
{
await _menuButton.ClickAsync();
await MenuButton.ClickAsync();
await _page.GetByText("Settings").ClickAsync();
}

internal async Task ChangeLanguageAsync(string language)
{
await _page.GetByRole(AriaRole.Button, new() { Name = "Change language" }).ClickAsync();
await _page.GetByText(language).ClickAsync();
await _page.WaitForLoadStateAsync(LoadState.NetworkIdle);
await _page.WaitForFunctionAsync(@"() => window.Blazor !== undefined");
}

internal async Task UndoAsync()
Expand Down Expand Up @@ -81,7 +77,7 @@ internal async Task OpenExportDialogAsync(string exportType, string fileMenuName

internal async Task OpenDisplayHotkeysAsync()
{
await _page.GetByRole(AriaRole.Button, new() { Name = "More" }).ClickAsync();
await MenuButton.ClickAsync();
await _page.GetByText("Hotkeys").ClickAsync();
}
}
Expand Down
6 changes: 2 additions & 4 deletions AudioCuesheetEditor.End2EndTests/Models/DetailView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@

namespace AudioCuesheetEditor.End2EndTests.Models
{
internal class DetailView(IPage page, bool mobile)
internal class DetailView(IPage page)
{
internal const string BaseUrl = "http://localhost:5132/";

private readonly IPage _page = page;
private readonly bool _isMobile = mobile;

internal ILocator AudiofileInput => _page.GetByRole(AriaRole.Group).Filter(new() { HasText = "AudiofileAudiofile" }).Locator("input[type=\"file\"]");

Expand Down Expand Up @@ -115,8 +114,7 @@ internal async Task RenameAudiofileAsync(string filename)

internal async Task OpenRenameAudiofileDialogAsync()
{
int buttonIndex = _isMobile ? 2 : 3;
await _page.GetByRole(AriaRole.Group).Filter(new() { HasText = "AudiofileAudiofile" }).GetByRole(AriaRole.Button).Nth(buttonIndex).ClickAsync();
await _page.GetByRole(AriaRole.Group).Filter(new() { HasText = "AudiofileAudiofile" }).GetByLabel("More").ClickAsync();
await _page.GetByText("Rename file").ClickAsync();
}
}
Expand Down
1 change: 0 additions & 1 deletion AudioCuesheetEditor.End2EndTests/Models/RecordView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ internal async Task AddRecordingTrackAsync(string artist, string title)
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).FillAsync(title);
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Button, new() { Name = "Add track" }).ClickAsync();
await _page.Locator(".mud-overlay").ClickAsync();
}
}
}
12 changes: 6 additions & 6 deletions AudioCuesheetEditor.End2EndTests/Tests/Desktop/BasicTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class BasicTest : PlaywrightTestBase
[TestMethod]
public async Task Application_HasTitle_WhenBrowsingIndex()
{
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
var appBar = new AppBar(TestPage);
await Expect(appBar.HomeButton).ToBeVisibleAsync();
Expand All @@ -43,7 +43,7 @@ public async Task AboutHeader_HasTitle_WhenBrowsingAbout()
[TestMethod]
public async Task Audiofile_ShouldBeRenamed_WhenEditingFilename()
{
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AudiofileInput.SetInputFilesAsync("Kalimba.mp3");
await detailView.RenameAudiofileAsync("Kalimba test 123.mp3");
Expand All @@ -54,7 +54,7 @@ public async Task Audiofile_ShouldBeRenamed_WhenEditingFilename()
public async Task OpenSettings_ShouldDisplaySettings_WhenSelectingSettings()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await bar.OpenSettingsAsync();
await Expect(TestPage.GetByRole(AriaRole.Heading, new() { Name = "Settings" })).ToBeVisibleAsync();
Expand All @@ -65,7 +65,7 @@ public async Task ChangeLanguage_ShouldSwitchLanguage_WhenGermanIsSelected()
{
var bar = new AppBar(TestPage);
var exportDialog = new ExportDialog(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await bar.ChangeLanguageAsync("German (Germany)");
await Expect(TestPage.GetByRole(AriaRole.Heading, new() { Name = "Abschnitte" })).ToBeVisibleAsync();
Expand All @@ -86,7 +86,7 @@ public async Task ChangeLanguage_ShouldSwitchLanguage_WhenGermanIsSelected()
public async Task TrackTableControls_ShouldBeEnabled_WhenSelectingFirstTrackAsync()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AddTrackAsync();
await detailView.AddTrackAsync();
Expand All @@ -108,7 +108,7 @@ await Expect(TestPage.GetByLabel("Track table controls")).ToMatchAriaSnapshotAsy
public async Task KeyboardCommands_ShouldControlDialogs_WhenUsingEnterOrEscapeAsync()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await TestPage.GetByRole(AriaRole.Dialog).WaitForAsync(new() { State = WaitForSelectorState.Detached });
await bar.OpenExportDialogAsync("Cuesheet");
Expand Down
10 changes: 5 additions & 5 deletions AudioCuesheetEditor.End2EndTests/Tests/Desktop/ExportTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class ExportTest : PlaywrightTestBase
public async Task DownloadCuesheet_GeneratesCuesheetFile_WhenCuesheetIsValid()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AddTrackAsync();
await detailView.CuesheetArtistInput.FillAsync("Cuesheet Artist 1");
Expand Down Expand Up @@ -54,7 +54,7 @@ TRACK 01 AUDIO
public async Task DownloadProject_GeneratesProjectFile_WhenCuesheetIsValidAsync()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AddTrackAsync();
await detailView.CuesheetArtistInput.FillAsync("Cuesheet Artist 1");
Expand All @@ -75,17 +75,17 @@ public async Task DownloadProject_GeneratesProjectFile_WhenCuesheetIsValidAsync(
public async Task DownloadText_GeneratesTextFile_WhenCuesheetIsValidAsync()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AddTrackAsync();
await detailView.CuesheetArtistInput.FillAsync("Cuesheet Artist 1");
await detailView.CuesheetTitleInput.FillAsync("Cuesheet Title 1");
await detailView.AudiofileInput.SetInputFilesAsync("Kalimba.mp3");
await detailView.EditTrackAsync("Track Artist 1", "Track Title 1");
await bar.OpenExportDialogAsync("Textfile");
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Next" }).ClickAsync();
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Next", Exact = true }).ClickAsync();
var downloadTask = TestPage.WaitForDownloadAsync();
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Download-YouTube.txt" }).ClickAsync();
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Download" }).ClickAsync();
var download = await downloadTask;
using var stream = await download.CreateReadStreamAsync();
using var reader = new StreamReader(stream);
Expand Down
7 changes: 3 additions & 4 deletions AudioCuesheetEditor.End2EndTests/Tests/Desktop/ImportTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class ImportTest : PlaywrightTestBase
public async Task Import_ShouldImportTracks_WhenUsingSampleInputfile()
{
var importView = new ImportView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await importView.GotoAsync();
await importView.ImportFileAsync("Sample_Inputfile.txt");
await importView.Analyze();
Expand Down Expand Up @@ -1690,7 +1690,7 @@ await Expect(TestPage.GetByRole(AriaRole.Table)).ToMatchAriaSnapshotAsync(@"- ta
[TestMethod]
public async Task Open_ShouldImportProject_WhenUsingProjectfile()
{
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
var appBar = new AppBar(TestPage);
await detailView.GotoAsync();
await appBar.OpenFileAsync("Sample_Project.ace");
Expand Down Expand Up @@ -1919,7 +1919,7 @@ await Expect(TestPage.GetByRole(AriaRole.Table)).ToMatchAriaSnapshotAsync(@"- ta
[TestMethod]
public async Task Open_ShouldImportCuesheet_WhenUsingCuesheetfile()
{
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
var appBar = new AppBar(TestPage);
await detailView.GotoAsync();
await appBar.OpenFileAsync("Sample_Cuesheet.cue");
Expand Down Expand Up @@ -2149,7 +2149,6 @@ await Expect(TestPage.GetByRole(AriaRole.Table)).ToMatchAriaSnapshotAsync(@"- ta
public async Task Import_ShouldImportTracks_WhenUsingText()
{
var importView = new ImportView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage, DeviceName != null);
await importView.GotoAsync();
var text = String.Join(Environment.NewLine, File.ReadAllLines("Sample_Inputfile.txt"));
await importView.ImportTextAsync(text);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public async Task Record_ShouldRecordTracks_WhenTracksAdded()
{
var recordView = new RecordView(TestPage);
var viewModes = new ViewModes(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await recordView.GotoAsync();
await recordView.StartRecordingAsync();
await recordView.AddRecordingTrackAsync("Test Track 1 Artist", "Test Track 1 Title");
Expand Down
4 changes: 2 additions & 2 deletions AudioCuesheetEditor.End2EndTests/Tests/Desktop/TracingTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class TracingTest : PlaywrightTestBase
public async Task UndoRedo_ShouldRestoreTrackState_WhenUndoAndRedoAreUsed()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AddTrackAsync();
await detailView.EditTrackAsync("Test Artist 1");
Expand Down Expand Up @@ -247,7 +247,7 @@ await Expect(TestPage.GetByRole(AriaRole.Table)).ToMatchAriaSnapshotAsync(@"- ta
public async Task UndoRedo_ShouldRestoreTrackState_WhenModalEdit()
{
var bar = new AppBar(TestPage);
var detailView = new DetailView(TestPage, DeviceName != null);
var detailView = new DetailView(TestPage);
await detailView.GotoAsync();
await detailView.AddTrackAsync();
await detailView.SelectTracksAsync([1]);
Expand Down
Loading