Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 4 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,7 @@ jobs:
run: dotnet build MakerPrompt.MAUI/MakerPrompt.MAUI.csproj -c Release -f net10.0-windows10.0.19041.0 -p:RuntimeIdentifierOverride=win-x64

- name: Build (Blazor WebAssembly)
run: dotnet build MakerPrompt.Blazor/MakerPrompt.Blazor.csproj -c Release --no-restore
run: dotnet build MakerPrompt.Blazor/MakerPrompt.Blazor.csproj -c Release --no-restore

- name: Test (Unit)
run: dotnet test MakerPrompt.Tests/MakerPrompt.Tests.csproj -c Release
8 changes: 4 additions & 4 deletions MakerPrompt.Blazor/Services/AppConfigurationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ public AppConfigurationService(IJSRuntime jsRuntime)
public async Task InitializeAsync()
{
var json = await _jsRuntime.InvokeAsync<string>("localStorage.getItem", StorageKey);
_config = json != null
? JsonSerializer.Deserialize<AppConfiguration>(json)
: new AppConfiguration();
}
_config = json != null
? JsonSerializer.Deserialize<AppConfiguration>(json) ?? new AppConfiguration()
: new AppConfiguration();
}

public async Task SaveConfigurationAsync()
{
Expand Down
190 changes: 120 additions & 70 deletions MakerPrompt.Shared/Components/ControlPanel.razor
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
disabled="@(!IsConnected)">
<i class="bi bi-stop-btn-fill"></i>
</button>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">X: @PrinterServiceFactory.Current?.LastTelemetry.Position.X.ToString("F2")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">Y: @PrinterServiceFactory.Current?.LastTelemetry.Position.Y.ToString("F2")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">Z: @PrinterServiceFactory.Current?.LastTelemetry.Position.Z.ToString("F2")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">X: @Telemetry.Position.X.ToString("F2")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">Y: @Telemetry.Position.Y.ToString("F2")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">Z: @Telemetry.Position.Z.ToString("F2")</span>
</div>
<div class="input-group mb-2">
<span class="input-group-text">XY:</span>
Expand All @@ -30,7 +30,7 @@
<div class="d-flex flex-column">
<div class="d-flex flex-row">
<div class="input-group justify-content-center">
<button type="button" class="btn btn-secondary" style="border-bottom-left-radius: 0;" title="@Localizer[Resources.ControlPanel_HomeAll]" @onclick="async () => await PrinterServiceFactory.Current?.Home()" disabled="@(!IsConnected)"><i class="bi bi-houses"></i></button>
<button type="button" class="btn btn-secondary" style="border-bottom-left-radius: 0;" title="@Localizer[Resources.ControlPanel_HomeAll]" @onclick="HomeAllAsync" disabled="@(!IsConnected)"><i class="bi bi-houses"></i></button>
<button type="button" class="btn btn-outline-secondary @(ActiveTab == AxisTab.X ? "active" : string.Empty)" @onclick="() => SetAxis(AxisTab.X)">X</button>
<button type="button" class="btn btn-outline-secondary @(ActiveTab == AxisTab.Y ? "active" : string.Empty)" @onclick="() => SetAxis(AxisTab.Y)">Y</button>
<button type="button" class="btn btn-outline-secondary @(ActiveTab == AxisTab.Z ? "active" : string.Empty)" @onclick="() => SetAxis(AxisTab.Z)">Z</button>
Expand Down Expand Up @@ -59,26 +59,26 @@
<h4 class="card-header">@Localizer[Resources.ControlPanel_Heating]</h4>
<div class="card-body">
<div class="input-group mb-2">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @PrinterServiceFactory.Current?.LastTelemetry.HotendTemp.ToString("F1")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Target]">T: @PrinterServiceFactory.Current?.LastTelemetry.HotendTarget.ToString("F1")</span>
<input type="number" min="0" max="300" class="form-control" @bind="hotendTarget" @bind:after="async () => await PrinterServiceFactory.Current?.SetHotendTemp(hotendTarget)" disabled="@(!IsConnected)">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @Telemetry.HotendTemp.ToString("F1")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Target]">T: @Telemetry.HotendTarget.ToString("F1")</span>
<input type="number" min="0" max="300" class="form-control" @bind="hotendTarget" @bind:after="SetHotendTempAsync" disabled="@(!IsConnected)">
<span class="input-group-text">°C</span>
<button class="btn btn-outline-secondary" type="button" title="@Localizer[Resources.ControlPanel_SetHotendTemp]" @onclick="async () => await PrinterServiceFactory.Current?.SetHotendTemp(hotendTarget)" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Set]</button>
<button class="btn btn-outline-secondary" type="button" title="@Localizer[Resources.ControlPanel_SetHotendTemp]" @onclick="SetHotendTempAsync" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Set]</button>
</div>
<div class="input-group mb-2">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @PrinterServiceFactory.Current?.LastTelemetry.BedTemp.ToString("F1")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Target]">T: @PrinterServiceFactory.Current?.LastTelemetry.BedTarget.ToString("F1")</span>
<input type="number" min="0" max="120" class="form-control" @bind="bedTarget" @bind:after="async () => await PrinterServiceFactory.Current?.SetBedTemp(bedTarget)" disabled="@(!IsConnected)">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @Telemetry.BedTemp.ToString("F1")</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Target]">T: @Telemetry.BedTarget.ToString("F1")</span>
<input type="number" min="0" max="120" class="form-control" @bind="bedTarget" @bind:after="SetBedTempAsync" disabled="@(!IsConnected)">
<span class="input-group-text">°C</span>
<button class="btn btn-outline-secondary" type="button" title="@Localizer[Resources.ControlPanel_SetBedTemp]" @onclick="async () => await PrinterServiceFactory.Current?.SetBedTemp(bedTarget)" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Set]</button>
<button class="btn btn-outline-secondary" type="button" title="@Localizer[Resources.ControlPanel_SetBedTemp]" @onclick="SetBedTempAsync" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Set]</button>
</div>
<div class="input-group">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @PrinterServiceFactory.Current?.LastTelemetry.FanSpeed.ToString()</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @Telemetry.FanSpeed.ToString()</span>
<span class="input-group-text">@Localizer[Resources.ControlPanel_FanSpeed]:</span>
<input type="text" min="0" max="100" class="form-control" @bind="printSpeed" disabled="@(!IsConnected)">
<span class="input-group-text">%</span>
<button class="btn btn-outline-secondary" type="button" title="@Localizer[Resources.ControlPanel_Set_FanSpeed]"
@onclick="async () => await PrinterServiceFactory.Current?.SetFanSpeed(printSpeed)" disabled="@(!IsConnected)">
<button class="btn btn-outline-secondary" type="button" title="@Localizer[Resources.ControlPanel_Set_FanSpeed]"
@onclick="SetFanSpeedAsync" disabled="@(!IsConnected)">
@Localizer[Resources.ControlPanel_Set]
</button>
</div>
Expand All @@ -100,8 +100,8 @@
</div>
<div class="d-flex align-items-end">
<div class="btn-group ms-auto" role="group">
<button type="button" class="btn btn-primary" @onclick="async () => await PrinterServiceFactory.Current?.RelativeMove(extrudeSpeed, 0, 0, 0, extrudeLength)" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Extrude]</button>
<button type="button" class="btn btn-primary" @onclick="async () => await PrinterServiceFactory.Current?.RelativeMove(extrudeSpeed, 0, 0, 0, -extrudeLength)" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Reverse]</button>
<button type="button" class="btn btn-primary" @onclick="async () => await ExtrudeAsync(extrudeLength)" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Extrude]</button>
<button type="button" class="btn btn-primary" @onclick="async () => await ExtrudeAsync(-extrudeLength)" disabled="@(!IsConnected)">@Localizer[Resources.ControlPanel_Reverse]</button>
</div>
</div>
</div>
Expand All @@ -111,16 +111,16 @@
<h4 class="card-header">@Localizer[Resources.ControlPanel_Status]</h4>
<div class="card-body">
<div class="input-group mb-2">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @PrinterServiceFactory.Current?.LastTelemetry.FeedRate.ToString()</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @Telemetry.FeedRate.ToString()</span>
<span class="input-group-text">@Localizer[Resources.ControlPanel_PrintSpeed]:</span>
<input type="text" class="form-control" @bind="printSpeed" @bind:after="async () => await PrinterServiceFactory.Current?.SetPrintSpeed(printSpeed)" disabled="@(!IsConnected)">
<input type="text" class="form-control" @bind="printSpeed" @bind:after="UpdatePrintSpeedAsync" disabled="@(!IsConnected)">
<span class="input-group-text">%</span>
<button class="btn btn-outline-secondary" type="button" disabled>@Localizer[Resources.ControlPanel_Set]</button>
</div>
<div class="input-group">
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @PrinterServiceFactory.Current?.LastTelemetry.FlowRate.ToString()</span>
<span class="input-group-text" title="@Localizer[Resources.ControlPanel_Current]">C: @Telemetry.FlowRate.ToString()</span>
<span class="input-group-text">@Localizer[Resources.ControlPanel_PrintFlow]:</span>
<input type="text" class="form-control" @bind="printFlow" @bind:after="async () => await PrinterServiceFactory.Current?.SetPrintSpeed(printFlow)" disabled="@(!IsConnected)">
<input type="text" class="form-control" @bind="printFlow" @bind:after="UpdatePrintFlowAsync" disabled="@(!IsConnected)">
<span class="input-group-text">%</span>
<button class="btn btn-outline-secondary" type="button" disabled>@Localizer[Resources.ControlPanel_Set]</button>
</div>
Expand All @@ -132,64 +132,114 @@
@code {
private int hotendTarget = 0;
private int bedTarget = 0;
private int fanSpeed = 0;
private int extrudeLength = 5;
private int extrudeLength = 5;
private int extrudeSpeed = 100;
private int xySpeed = 1000;
private int zSpeed = 100;
private int printSpeed = 100;
private int printFlow = 100;
private int printFlow = 100;


private bool isInverse;
private int[] moveLenghts = { 1, 10, 100, 500 };
private AxisTab ActiveTab = AxisTab.Y;
private enum AxisTab { X, Y, Z }

private void MotionReversed(ChangeEventArgs e)
{
// get the checkbox state
isInverse = (bool)e.Value;
}
private void MotionReversed(ChangeEventArgs e)
{
// get the checkbox state
isInverse = e.Value as bool? ?? false;
}

private void SetAxis(AxisTab tab)
{
ActiveTab = tab;
}

private async Task HomeSelectedAxis()
{
switch (ActiveTab)
{
case AxisTab.X:
await PrinterServiceFactory.Current?.Home(true,false, false);
break;
case AxisTab.Y:
await PrinterServiceFactory.Current?.Home(false, true, false);
break;
case AxisTab.Z:
await PrinterServiceFactory.Current?.Home(false, false, true);
break;
default:
return;
}
}

private async Task MoveSelectedAxis(int length)
{
switch (ActiveTab)
{
case AxisTab.X:
await PrinterServiceFactory.Current?.RelativeMove(xySpeed, length, 0, 0);
break;
case AxisTab.Y:
await PrinterServiceFactory.Current?.RelativeMove(xySpeed, 0, length, 0);
break;
case AxisTab.Z:
await PrinterServiceFactory.Current?.RelativeMove(zSpeed, 0, 0, length);
break;
default:
return;
}
}
}
private void SetAxis(AxisTab tab)
{
ActiveTab = tab;
}

private Task HomeAllAsync()
{
var printer = PrinterServiceFactory.Current;
return printer?.Home() ?? Task.CompletedTask;
}

private async Task HomeSelectedAxis()
{
var printer = PrinterServiceFactory.Current;
if (printer == null) return;

switch (ActiveTab)
{
case AxisTab.X:
await printer.Home(true,false, false);
break;
case AxisTab.Y:
await printer.Home(false, true, false);
break;
case AxisTab.Z:
await printer.Home(false, false, true);
break;
default:
return;
}
}

private async Task MoveSelectedAxis(int length)
{
var printer = PrinterServiceFactory.Current;
if (printer == null) return;

switch (ActiveTab)
{
case AxisTab.X:
await printer.RelativeMove(xySpeed, length, 0, 0);
break;
case AxisTab.Y:
await printer.RelativeMove(xySpeed, 0, length, 0);
break;
case AxisTab.Z:
await printer.RelativeMove(zSpeed, 0, 0, length);
break;
default:
return;
}
}

private Task SetHotendTempAsync()
{
var printer = PrinterServiceFactory.Current;
return printer?.SetHotendTemp(hotendTarget) ?? Task.CompletedTask;
}

private Task SetBedTempAsync()
{
var printer = PrinterServiceFactory.Current;
return printer?.SetBedTemp(bedTarget) ?? Task.CompletedTask;
}

private Task SetFanSpeedAsync()
{
var printer = PrinterServiceFactory.Current;
return printer?.SetFanSpeed(printSpeed) ?? Task.CompletedTask;
}

private Task ExtrudeAsync(int amount)
{
var printer = PrinterServiceFactory.Current;
return printer?.RelativeMove(extrudeSpeed, 0, 0, 0, amount) ?? Task.CompletedTask;
}

private Task UpdatePrintSpeedAsync()
{
var printer = PrinterServiceFactory.Current;
return printer?.SetPrintSpeed(printSpeed) ?? Task.CompletedTask;
}

private Task UpdatePrintFlowAsync()
{
var printer = PrinterServiceFactory.Current;
return printer?.SetPrintFlow(printFlow) ?? Task.CompletedTask;
}

private readonly PrinterTelemetry fallbackTelemetry = new();
private PrinterTelemetry Telemetry => PrinterServiceFactory.Current?.LastTelemetry ?? fallbackTelemetry;
}
23 changes: 19 additions & 4 deletions MakerPrompt.Shared/Components/FileExplorer.razor
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<div class="d-flex flex-row-reverse">
<div class="btn-group mb-3">
<button class="btn btn-sm btn-primary" @onclick="() => PrinterServiceFactory.Current?.StartPrint(selectedFile)" disabled="@(!CanStartPrint)">
<button class="btn btn-sm btn-primary" @onclick="StartPrintAsync" disabled="@(!CanStartPrint)">
<i class="bi bi-printer"></i> @Localizer[Resources.CalibrationPage_Start]
</button>
<button class="btn btn-sm btn-secondary" disabled="@(!IsConnected)" @onclick="RefreshFiles">
Expand Down Expand Up @@ -87,9 +87,14 @@
_isLoading = true;
StateHasChanged();

if (PrinterServiceFactory.Current != null)
var printerService = PrinterServiceFactory.Current;
if (printerService != null)
{
_files = await PrinterServiceFactory.Current?.GetFilesAsync() ?? new List<FileEntry>();
_files = await printerService.GetFilesAsync() ?? new List<FileEntry>();
}
else
{
_files = new List<FileEntry>();
}

_isLoading = false;
Expand Down Expand Up @@ -122,4 +127,14 @@
{
return selectedFile == file ? "table-active" : string.Empty;
}
}

private Task StartPrintAsync()
{
if (selectedFile == null || PrinterServiceFactory.Current == null)
{
return Task.CompletedTask;
}

return PrinterServiceFactory.Current.StartPrint(selectedFile);
}
}
6 changes: 3 additions & 3 deletions MakerPrompt.Shared/Components/LocalizedLabel.razor
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@

@code {

[Parameter] public required Expression<Func<object>> For { get; set; }
[Inject] IStringLocalizer<Resources> Localizer { get; set; }
[Parameter] public required Expression<Func<object>> For { get; set; }
[Inject] IStringLocalizer<Resources> Localizer { get; set; } = default!;

protected override void OnParametersSet()
{
base.OnParametersSet();
Label = Localizer[GetDisplayName()];
}

private string Label { get; set; }
private string Label { get; set; } = string.Empty;

private string GetDisplayName()
{
Expand Down
4 changes: 2 additions & 2 deletions MakerPrompt.Shared/Components/TestCommandModal.razor
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

[Parameter] public string? Command { get; set; }

private GCodeCommand selectedCommand { get; set; }
private GCodeCommand selectedCommand { get; set; } = null!;

protected override void OnParametersSet()
{
Expand All @@ -49,4 +49,4 @@
}

private async Task Close() => await BlazoredModal.CloseAsync();
}
}
3 changes: 1 addition & 2 deletions MakerPrompt.Shared/Components/ThermalModelCalibration.razor
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@
</div>

@code {
private CalibrationParameters Calibration { get; set; } = new();
private string calibrationResult = "";
private CalibrationParameters Calibration { get; set; } = new();

private async Task RunThermalModelCalibration()
{
Expand Down
Loading
Loading