Files
modernkeepass/WinAppCommon/ViewModels/SaveVm.cs

55 lines
2.0 KiB
C#
Raw Normal View History

using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.AccessCache;
2020-04-21 13:14:56 +02:00
using GalaSoft.MvvmLight.Views;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Database.Commands.CloseDatabase;
using ModernKeePass.Application.Database.Commands.SaveDatabase;
using ModernKeePass.Application.Database.Queries.GetDatabase;
2020-04-21 13:14:56 +02:00
using ModernKeePass.Common;
using RelayCommand = GalaSoft.MvvmLight.Command.RelayCommand;
namespace ModernKeePass.ViewModels
{
public class SaveVm
{
public bool IsSaveEnabled => _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult().IsDirty;
public RelayCommand SaveCommand { get; }
public RelayCommand CloseCommand { get; }
private readonly IMediator _mediator;
2020-04-21 13:14:56 +02:00
private readonly INavigationService _navigation;
2020-04-21 13:14:56 +02:00
public SaveVm() : this(App.Services.GetRequiredService<IMediator>(), App.Services.GetRequiredService<INavigationService>()) { }
2020-04-21 13:14:56 +02:00
public SaveVm(IMediator mediator, INavigationService navigation)
{
_mediator = mediator;
2020-04-21 13:14:56 +02:00
_navigation = navigation;
SaveCommand = new RelayCommand(async () => await Save(), () => IsSaveEnabled);
CloseCommand = new RelayCommand(async () => await Close());
}
public async Task Save(bool close = true)
{
await _mediator.Send(new SaveDatabaseCommand());
if (close) await _mediator.Send(new CloseDatabaseCommand());
2020-04-21 13:14:56 +02:00
_navigation.NavigateTo(Constants.Navigation.MainPage);
}
2017-10-12 11:45:00 +02:00
public async Task Save(StorageFile file)
2017-10-12 11:45:00 +02:00
{
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
await _mediator.Send(new SaveDatabaseCommand { FilePath = token });
2020-04-21 13:14:56 +02:00
_navigation.NavigateTo(Constants.Navigation.MainPage);
2017-10-12 11:45:00 +02:00
}
public async Task Close()
{
await _mediator.Send(new CloseDatabaseCommand());
2020-04-21 13:14:56 +02:00
_navigation.NavigateTo(Constants.Navigation.MainPage);
}
}
}