diff --git a/StabilityMatrix.Avalonia/ViewModels/Base/PausableProgressItemViewModelBase.cs b/StabilityMatrix.Avalonia/ViewModels/Base/PausableProgressItemViewModelBase.cs index 695da5b6f..26e25ccda 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Base/PausableProgressItemViewModelBase.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Base/PausableProgressItemViewModelBase.cs @@ -32,6 +32,13 @@ public abstract partial class PausableProgressItemViewModelBase : ProgressItemVi public override bool IsCompleted => State is ProgressState.Success or ProgressState.Failed or ProgressState.Cancelled; + /// + /// Whether the item should be removed by a "Clear Finished" bulk operation. + /// Unlike , this excludes + /// so that items with retry/dismiss buttons remain visible. + /// + public override bool IsClearable => State is ProgressState.Success or ProgressState.Cancelled; + public virtual bool SupportsPauseResume => true; public virtual bool SupportsCancel => true; diff --git a/StabilityMatrix.Avalonia/ViewModels/Base/ProgressItemViewModelBase.cs b/StabilityMatrix.Avalonia/ViewModels/Base/ProgressItemViewModelBase.cs index 1ef8eac1c..1ddd5bc44 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Base/ProgressItemViewModelBase.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Base/ProgressItemViewModelBase.cs @@ -16,5 +16,7 @@ public abstract partial class ProgressItemViewModelBase : ViewModelBase public virtual bool IsCompleted => Progress.Value >= 100 || Failed; + public virtual bool IsClearable => Progress.Value >= 100 && !Failed; + public ContentDialogProgressViewModelBase Progress { get; init; } = new(); } diff --git a/StabilityMatrix.Avalonia/ViewModels/Progress/ProgressManagerViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Progress/ProgressManagerViewModel.cs index 883d8f366..3f80b9aa3 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Progress/ProgressManagerViewModel.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Progress/ProgressManagerViewModel.cs @@ -401,7 +401,7 @@ public void StartEventListener() public void ClearDownloads() { - ProgressItems.RemoveAll(ProgressItems.Where(x => x.IsCompleted)); + ProgressItems.RemoveAll(ProgressItems.Where(x => x.IsClearable)); } private void OnProgressChanged(object? sender, ProgressItem e)