You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
using System; |
|
using CommunityToolkit.Mvvm.ComponentModel; |
|
using StabilityMatrix.Avalonia.ViewModels.Base; |
|
using StabilityMatrix.Core.Helper; |
|
using StabilityMatrix.Core.Models.Progress; |
|
|
|
namespace StabilityMatrix.Avalonia.ViewModels; |
|
|
|
public partial class ProgressItemViewModel : ProgressItemViewModelBase |
|
{ |
|
[ObservableProperty] private Guid id; |
|
[ObservableProperty] private string name; |
|
[ObservableProperty] private bool failed; |
|
|
|
public ProgressItemViewModel(ProgressItem progressItem) |
|
{ |
|
Id = progressItem.ProgressId; |
|
Name = progressItem.Name; |
|
Progress.Value = progressItem.Progress.Percentage; |
|
Failed = progressItem.Failed; |
|
Progress.Text = GetProgressText(progressItem.Progress); |
|
|
|
EventManager.Instance.ProgressChanged += OnProgressChanged; |
|
} |
|
|
|
private void OnProgressChanged(object? sender, ProgressItem e) |
|
{ |
|
if (e.ProgressId != Id) |
|
return; |
|
|
|
Progress.Value = e.Progress.Percentage; |
|
Failed = e.Failed; |
|
Progress.Text = GetProgressText(e.Progress); |
|
} |
|
|
|
private string GetProgressText(ProgressReport report) |
|
{ |
|
switch (report.Type) |
|
{ |
|
case ProgressType.Generic: |
|
break; |
|
case ProgressType.Download: |
|
return Failed ? "Download Failed" : "Downloading..."; |
|
case ProgressType.Extract: |
|
return Failed ? "Extraction Failed" : "Extracting..."; |
|
case ProgressType.Update: |
|
return Failed ? "Update Failed" : "Updating..."; |
|
} |
|
|
|
if (Failed) |
|
{ |
|
return "Failed"; |
|
} |
|
|
|
return string.IsNullOrWhiteSpace(report.Message) |
|
? string.IsNullOrWhiteSpace(report.Title) |
|
? string.Empty |
|
: report.Title |
|
: report.Message; |
|
} |
|
}
|
|
|