Files
romrepomgr/RomRepoMgr/Models/DatImporter.cs

60 lines
1.7 KiB
C#

using System;
using Avalonia.Media;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
using RomRepoMgr.Core.EventArgs;
namespace RomRepoMgr.Models;
public partial class DatImporter : ObservableObject
{
[ObservableProperty]
bool _indeterminate;
[ObservableProperty]
double _maximum;
[ObservableProperty]
double _minimum;
[ObservableProperty]
double _progress;
[ObservableProperty]
Color _statusColor;
[ObservableProperty]
string _statusMessage;
public string Filename { get; internal init; }
internal void OnErrorOccurred(object sender, ErrorEventArgs e) => Dispatcher.UIThread.Post(() =>
{
StatusMessage = e.Message;
StatusColor = Colors.Red;
if(!Indeterminate) return;
Indeterminate = false;
Progress = 0;
});
internal void OnSetIndeterminateProgress(object sender, EventArgs e) =>
Dispatcher.UIThread.Post(() => Indeterminate = true);
internal void OnSetMessage(object sender, MessageEventArgs e) =>
Dispatcher.UIThread.Post(() => StatusMessage = e.Message);
internal void OnSetProgress(object sender, ProgressEventArgs e) =>
Dispatcher.UIThread.Post(() => Progress = e.Value);
internal void OnSetProgressBounds(object sender, ProgressBoundsEventArgs e) => Dispatcher.UIThread.Post(() =>
{
Indeterminate = false;
Maximum = e.Maximum;
Minimum = e.Minimum;
});
internal void OnWorkFinished(object sender, MessageEventArgs e) => Dispatcher.UIThread.Post(() =>
{
Indeterminate = false;
Maximum = 1;
Minimum = 0;
Progress = 1;
StatusMessage = e.Message;
});
}