FileInfo overhaul

Opening DB works again
This commit is contained in:
Geoffroy BONNEVILLE
2020-04-07 12:48:18 +02:00
parent 56d93a5187
commit 1fa799bdf8
15 changed files with 73 additions and 31 deletions

View File

@@ -31,7 +31,7 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase
await _database.Create(file, await _database.Create(file,
new Credentials new Credentials
{ {
KeyFileContents = await _file.OpenBinaryFile(message.KeyFilePath), KeyFileContents = !string.IsNullOrEmpty(message.KeyFilePath) ? await _file.OpenBinaryFile(message.KeyFilePath) : null,
Password = message.Password Password = message.Password
}); });
_database.FileAccessToken = message.FilePath; _database.FileAccessToken = message.FilePath;

View File

@@ -30,7 +30,7 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase
var file = await _file.OpenBinaryFile(request.FilePath); var file = await _file.OpenBinaryFile(request.FilePath);
await _database.Open(file, new Credentials await _database.Open(file, new Credentials
{ {
KeyFileContents = await _file.OpenBinaryFile(request.KeyFilePath), KeyFileContents = !string.IsNullOrEmpty(request.KeyFilePath) ? await _file.OpenBinaryFile(request.KeyFilePath): null,
Password = request.Password Password = request.Password
}); });
_database.FileAccessToken = request.FilePath; _database.FileAccessToken = request.FilePath;

View File

@@ -2,6 +2,7 @@
{ {
public class FileInfo public class FileInfo
{ {
public string Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Path { get; set; } public string Path { get; set; }
} }

View File

@@ -18,11 +18,12 @@ namespace ModernKeePass.Infrastructure.UWP
{ {
var recentEntry = _mru.Entries.FirstOrDefault(e => e.Token == token); var recentEntry = _mru.Entries.FirstOrDefault(e => e.Token == token);
var file = await _mru.GetFileAsync(token); var file = await _mru.GetFileAsync(token);
StorageApplicationPermissions.FutureAccessList.AddOrReplace(recentEntry.Metadata, file); StorageApplicationPermissions.FutureAccessList.AddOrReplace(token, file);
return new FileInfo return new FileInfo
{ {
Id = token,
Name = file.DisplayName, Name = file.DisplayName,
Path = recentEntry.Metadata Path = file.Path
}; };
} }
@@ -46,8 +47,8 @@ namespace ModernKeePass.Infrastructure.UWP
public async Task Add(FileInfo recentItem) public async Task Add(FileInfo recentItem)
{ {
var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(recentItem.Path); var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(recentItem.Id);
_mru.Add(file, recentItem.Path); _mru.Add(file);
} }
public void ClearAll() public void ClearAll()
@@ -55,7 +56,7 @@ namespace ModernKeePass.Infrastructure.UWP
for (var i = _mru.Entries.Count; i > 0; i--) for (var i = _mru.Entries.Count; i > 0; i--)
{ {
var entry = _mru.Entries[i]; var entry = _mru.Entries[i];
StorageApplicationPermissions.FutureAccessList.Remove(entry.Metadata); StorageApplicationPermissions.FutureAccessList.Remove(entry.Token);
_mru.Remove(entry.Token); _mru.Remove(entry.Token);
} }
} }

View File

@@ -239,8 +239,9 @@ namespace ModernKeePass
var token = StorageApplicationPermissions.FutureAccessList.Add(file); var token = StorageApplicationPermissions.FutureAccessList.Add(file);
var fileInfo = new FileInfo var fileInfo = new FileInfo
{ {
Path = token, Id = token,
Name = file.DisplayName Name = file.DisplayName,
Path = file.Path
}; };
rootFrame.Navigate(typeof(MainPage), fileInfo); rootFrame.Navigate(typeof(MainPage), fileInfo);
} }

View File

@@ -170,7 +170,7 @@ namespace ModernKeePass.ViewModels
public async Task CreateKeyFile(FileInfo file) public async Task CreateKeyFile(FileInfo file)
{ {
// TODO: implement entropy generator // TODO: implement entropy generator
await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = file.Path}); await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = file.Id});
KeyFilePath = file.Path; KeyFilePath = file.Path;
KeyFileText = file.Name; KeyFileText = file.Name;
} }

View File

@@ -1,5 +1,4 @@
using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces; using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.AOP; using ModernKeePass.Domain.AOP;
using ModernKeePass.Domain.Dtos; using ModernKeePass.Domain.Dtos;
@@ -11,10 +10,27 @@ namespace ModernKeePass.ViewModels
{ {
private readonly IRecentProxy _recent; private readonly IRecentProxy _recent;
private bool _isSelected; private bool _isSelected;
private string _name;
private string _token;
private string _path;
public string Token { get; } public string Token
public string Name { get; } {
public string Path => string.Empty; get { return _token; }
set { SetProperty(ref _token, value); }
}
public string Name
{
get { return _name; }
set { SetProperty(ref _name, value); }
}
public string Path
{
get { return _path; }
set { SetProperty(ref _path, value); }
}
public bool IsSelected public bool IsSelected
{ {
@@ -26,13 +42,15 @@ namespace ModernKeePass.ViewModels
public RecentItemVm(IRecentProxy recent, FileInfo file) public RecentItemVm(IRecentProxy recent, FileInfo file)
{ {
_recent = recent; _recent = recent;
Token = file.Path; Token = file.Id;
Name = file.Name; Name = file.Name;
Path = file.Path;
} }
public async Task UpdateAccessTime() // Called from XAML
public void UpdateAccessTime()
{ {
await _recent.Get(Token); _recent.Get(Token).Wait();
} }
} }
} }

View File

@@ -9,10 +9,28 @@ namespace ModernKeePass.ViewModels
public class OpenVm: NotifyPropertyChangedBase public class OpenVm: NotifyPropertyChangedBase
{ {
private readonly IRecentProxy _recent; private readonly IRecentProxy _recent;
private string _name;
private string _path;
private string _token;
public bool IsFileSelected => !string.IsNullOrEmpty(Path); public bool IsFileSelected => !string.IsNullOrEmpty(Path);
public string Name { get; private set; } public string Token
public string Path { get; private set; } {
get { return _token; }
set { SetProperty(ref _token, value); }
}
public string Name
{
get { return _name; }
private set { SetProperty(ref _name, value); }
}
public string Path
{
get { return _path; }
private set { SetProperty(ref _path, value); }
}
public OpenVm(): this(App.Services.GetService<IRecentProxy>()) { } public OpenVm(): this(App.Services.GetService<IRecentProxy>()) { }
@@ -23,9 +41,9 @@ namespace ModernKeePass.ViewModels
public async Task OpenFile(FileInfo file) public async Task OpenFile(FileInfo file)
{ {
Token = file.Id;
Name = file.Name; Name = file.Name;
Path = file.Path; Path = file.Path;
OnPropertyChanged(nameof(Name));
OnPropertyChanged(nameof(IsFileSelected)); OnPropertyChanged(nameof(IsFileSelected));
await AddToRecentList(file); await AddToRecentList(file);
} }

View File

@@ -52,7 +52,7 @@ namespace ModernKeePass.ViewModels
RecentItems = new ObservableCollection<RecentItemVm>(_recent.GetAll().GetAwaiter().GetResult() RecentItems = new ObservableCollection<RecentItemVm>(_recent.GetAll().GetAwaiter().GetResult()
.Select(r => new RecentItemVm(r))); .Select(r => new RecentItemVm(r)));
if (RecentItems.Count > 0) if (RecentItems.Count > 0)
SelectedItem = RecentItems[0] as RecentItemVm; SelectedItem = RecentItems[0];
} }
private void ClearAll() private void ClearAll()

View File

@@ -21,7 +21,7 @@
<Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}"> <Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
<StackPanel Margin="25,0,25,0"> <StackPanel Margin="25,0,25,0">
<TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Name}" />
<userControls:CompositeKeyUserControl x:Uid="CompositeKeyNewButton" CreateNew="True" DatabaseFilePath="{Binding Path}" ValidationChecked="CompositeKeyUserControl_OnValidationChecked" /> <userControls:CompositeKeyUserControl x:Uid="CompositeKeyNewButton" CreateNew="True" DatabaseFilePath="{Binding Token}" ValidationChecked="CompositeKeyUserControl_OnValidationChecked" />
</StackPanel> </StackPanel>
</Border> </Border>
<CheckBox x:Name="CheckBox" x:Uid="NewImportCheckbox" Margin="15,10,0,0" IsChecked="{Binding IsImportChecked, Mode=TwoWay}" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}" /> <CheckBox x:Name="CheckBox" x:Uid="NewImportCheckbox" Margin="15,10,0,0" IsChecked="{Binding IsImportChecked, Mode=TwoWay}" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}" />

View File

@@ -50,7 +50,8 @@ namespace ModernKeePass.Views
var token = StorageApplicationPermissions.FutureAccessList.Add(file); var token = StorageApplicationPermissions.FutureAccessList.Add(file);
var fileInfo = new FileInfo var fileInfo = new FileInfo
{ {
Path = token, Id = token,
Path = file.Path,
Name = file.DisplayName Name = file.DisplayName
}; };
await Model.OpenFile(fileInfo); await Model.OpenFile(fileInfo);

View File

@@ -25,7 +25,7 @@
<Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}"> <Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
<StackPanel Margin="25,0,25,0"> <StackPanel Margin="25,0,25,0">
<TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Name}" />
<userControls:CompositeKeyUserControl x:Uid="CompositeKeyOpenButton" DatabaseFilePath="{Binding Path}"> <userControls:CompositeKeyUserControl x:Uid="CompositeKeyOpenButton" DatabaseFilePath="{Binding Token}">
<interactivity:Interaction.Behaviors> <interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ValidationChecked"> <core:EventTriggerBehavior EventName="ValidationChecked">
<core:NavigateToPageAction TargetPage="ModernKeePass.Views.GroupDetailPage" /> <core:NavigateToPageAction TargetPage="ModernKeePass.Views.GroupDetailPage" />

View File

@@ -49,8 +49,9 @@ namespace ModernKeePass.Views
var token = StorageApplicationPermissions.FutureAccessList.Add(file); var token = StorageApplicationPermissions.FutureAccessList.Add(file);
var fileInfo = new FileInfo var fileInfo = new FileInfo
{ {
Path = token, Path = file.Path,
Name = file.DisplayName Name = file.DisplayName,
Id = token
}; };
await Model.OpenFile(fileInfo); await Model.OpenFile(fileInfo);
} }

View File

@@ -45,7 +45,7 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Text="{Binding Name}" Padding="5,0,0,0" /> <TextBlock Grid.Row="0" Text="{Binding Name}" Padding="5,0,0,0" />
<TextBlock Grid.Row="1" Text="{Binding Path}" Padding="5,0,0,0" FontSize="10" /> <TextBlock Grid.Row="1" Text="{Binding Path}" Padding="5,0,0,0" FontSize="10" />
<userControls:CompositeKeyUserControl Grid.Row="2" x:Name="DatabaseUserControl" x:Uid="CompositeKeyOpenButton" HorizontalAlignment="Stretch" MinWidth="400" Margin="0,10,0,0" Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" DatabaseFilePath="{Binding Path}"> <userControls:CompositeKeyUserControl Grid.Row="2" x:Name="DatabaseUserControl" x:Uid="CompositeKeyOpenButton" HorizontalAlignment="Stretch" MinWidth="400" Margin="0,10,0,0" Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" DatabaseFilePath="{Binding Token}">
<interactivity:Interaction.Behaviors> <interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ValidationChecked"> <core:EventTriggerBehavior EventName="ValidationChecked">
<core:CallMethodAction TargetObject="{Binding}" MethodName="UpdateAccessTime" /> <core:CallMethodAction TargetObject="{Binding}" MethodName="UpdateAccessTime" />

View File

@@ -172,8 +172,9 @@ namespace ModernKeePass.Views.UserControls
var token = StorageApplicationPermissions.FutureAccessList.Add(file); var token = StorageApplicationPermissions.FutureAccessList.Add(file);
await Model.CreateKeyFile(new FileInfo await Model.CreateKeyFile(new FileInfo
{ {
Path = token, Id = token,
Name = file.DisplayName Name = file.DisplayName,
Path = file.Path
}); });
} }