133 lines
3.8 KiB
C#
133 lines
3.8 KiB
C#
using Avalonia;
|
|
using ReactiveUI;
|
|
using Serilog;
|
|
using SPTInstaller.CustomControls;
|
|
using SPTInstaller.Helpers;
|
|
using SPTInstaller.Interfaces;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
using Avalonia.Input;
|
|
using Avalonia.Platform.Storage;
|
|
|
|
namespace SPTInstaller.ViewModels;
|
|
|
|
public class MessageViewModel : ViewModelBase
|
|
{
|
|
private bool _HasErrors;
|
|
|
|
public bool HasErrors
|
|
{
|
|
get => _HasErrors;
|
|
set => this.RaiseAndSetIfChanged(ref _HasErrors, value);
|
|
}
|
|
|
|
private string _Message;
|
|
|
|
public string Message
|
|
{
|
|
get => _Message;
|
|
set => this.RaiseAndSetIfChanged(ref _Message, value);
|
|
}
|
|
|
|
private bool _showCloseButton;
|
|
|
|
public bool ShowCloseButton
|
|
{
|
|
get => _showCloseButton;
|
|
set => this.RaiseAndSetIfChanged(ref _showCloseButton, value);
|
|
}
|
|
|
|
private string _cacheInfoText;
|
|
|
|
public string CacheInfoText
|
|
{
|
|
get => _cacheInfoText;
|
|
set => this.RaiseAndSetIfChanged(ref _cacheInfoText, value);
|
|
}
|
|
|
|
private string _clipCommandText;
|
|
|
|
public string ClipCommandText
|
|
{
|
|
get => _clipCommandText;
|
|
set => this.RaiseAndSetIfChanged(ref _clipCommandText, value);
|
|
}
|
|
|
|
public ICommand CopyLogFileToClipboard => ReactiveCommand.CreateFromTask(async () =>
|
|
{
|
|
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
{
|
|
try
|
|
{
|
|
if (desktop.MainWindow?.Clipboard == null)
|
|
{
|
|
ClipCommandText = "Could not get clipboard :(";
|
|
return;
|
|
}
|
|
|
|
var dataObject = new DataObject();
|
|
var logFile = await desktop.MainWindow.StorageProvider.TryGetFileFromPathAsync(App.LogPath);
|
|
|
|
if (logFile == null)
|
|
{
|
|
ClipCommandText = "Could not get log file :(";
|
|
return;
|
|
}
|
|
|
|
dataObject.Set(DataFormats.Files, new[] {logFile});
|
|
|
|
await desktop.MainWindow.Clipboard.SetDataObjectAsync(dataObject);
|
|
ClipCommandText = "Copied!";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ClipCommandText = ex.Message;
|
|
}
|
|
}
|
|
});
|
|
|
|
private StatusSpinner.SpinnerState _cacheCheckState;
|
|
|
|
public StatusSpinner.SpinnerState CacheCheckState
|
|
{
|
|
get => _cacheCheckState;
|
|
set => this.RaiseAndSetIfChanged(ref _cacheCheckState, value);
|
|
}
|
|
|
|
public ICommand CloseCommand { get; set; } = ReactiveCommand.Create(() =>
|
|
{
|
|
if (Application.Current.ApplicationLifetime is
|
|
Avalonia.Controls.ApplicationLifetimes.IClassicDesktopStyleApplicationLifetime desktopApp)
|
|
{
|
|
desktopApp.MainWindow.Close();
|
|
}
|
|
});
|
|
|
|
public MessageViewModel(IScreen Host, IResult result, bool showCloseButton = true, bool noLog = false) : base(Host)
|
|
{
|
|
ShowCloseButton = showCloseButton;
|
|
Message = result.Message;
|
|
ClipCommandText = "Copy installer log to clipboard";
|
|
|
|
Task.Run(() =>
|
|
{
|
|
CacheInfoText = "Getting cache size ...";
|
|
CacheCheckState = StatusSpinner.SpinnerState.Running;
|
|
|
|
CacheInfoText = $"Cache Size: {DownloadCacheHelper.GetCacheSizeText()}";
|
|
CacheCheckState = StatusSpinner.SpinnerState.OK;
|
|
});
|
|
|
|
if (result.Succeeded)
|
|
{
|
|
Log.Information(Message);
|
|
return;
|
|
}
|
|
|
|
HasErrors = true;
|
|
|
|
if (!noLog)
|
|
Log.Error(Message);
|
|
}
|
|
} |