diff --git a/ModernKeePass.Application/Application.csproj b/ModernKeePass.Application/Application.csproj
index b3864be..c56f2d0 100644
--- a/ModernKeePass.Application/Application.csproj
+++ b/ModernKeePass.Application/Application.csproj
@@ -81,7 +81,6 @@
-
@@ -105,6 +104,8 @@
+
+
@@ -119,7 +120,7 @@
-
+
diff --git a/ModernKeePass.Application/Common/Interfaces/IImportFormat.cs b/ModernKeePass.Application/Common/Interfaces/IImportFormat.cs
deleted file mode 100644
index 8044f55..0000000
--- a/ModernKeePass.Application/Common/Interfaces/IImportFormat.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Collections.Generic;
-
-namespace ModernKeePass.Application.Common.Interfaces
-{
- public interface IImportFormat
- {
- List> Import(IList fileContents);
- }
-}
\ No newline at end of file
diff --git a/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseQueryValidator.cs b/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommandValidator.cs
similarity index 79%
rename from ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseQueryValidator.cs
rename to ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommandValidator.cs
index 5c4ead4..611aa0e 100644
--- a/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseQueryValidator.cs
+++ b/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommandValidator.cs
@@ -2,9 +2,9 @@
namespace ModernKeePass.Application.Database.Commands.CreateDatabase
{
- public class CreateDatabaseQueryValidator : AbstractValidator
+ public class CreateDatabaseCommandValidator : AbstractValidator
{
- public CreateDatabaseQueryValidator()
+ public CreateDatabaseCommandValidator()
{
RuleFor(v => v.FilePath)
.NotNull()
diff --git a/ModernKeePass.Application/Import/Commands/ImportFromCsv/ImportFromCsvCommand.cs b/ModernKeePass.Application/Import/Commands/ImportFromCsv/ImportFromCsvCommand.cs
new file mode 100644
index 0000000..76f964c
--- /dev/null
+++ b/ModernKeePass.Application/Import/Commands/ImportFromCsv/ImportFromCsvCommand.cs
@@ -0,0 +1,50 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using MediatR;
+using ModernKeePass.Application.Common.Interfaces;
+using ModernKeePass.Domain.Enums;
+using ModernKeePass.Domain.Exceptions;
+
+namespace ModernKeePass.Application.Import.Commands.ImportFromCsv
+{
+ public class ImportFromCsvCommand : IRequest
+ {
+ public string FilePath { get; set; }
+ public string DestinationGroupId { get; set; }
+ public bool HasHeaderRow { get; set; }
+ public char Delimiter { get; set; } = ';';
+ public Dictionary FieldMappings { get; set; }
+
+ public class CreateDatabaseCommandHandler : IAsyncRequestHandler
+ {
+ private readonly IDatabaseProxy _database;
+ private readonly IFileProxy _file;
+
+ public CreateDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
+ {
+ _database = database;
+ _file = file;
+ }
+
+ public async Task Handle(ImportFromCsvCommand message)
+ {
+ if (!_database.IsOpen) throw new DatabaseClosedException();
+
+ var fileContents = await _file.ReadTextFile(message.FilePath);
+
+ for (var index = message.HasHeaderRow ? 1 : 0; index < fileContents.Count; index++)
+ {
+ var line = fileContents[index];
+ var fields = line.Split(message.Delimiter);
+
+ var entry = _database.CreateEntry(message.DestinationGroupId);
+ for (var i = 0; i < fields.Length; i++)
+ {
+ var fieldMapping = message.FieldMappings[i];
+ await _database.UpdateEntry(entry.Id, fieldMapping, fields[i], fieldMapping == EntryFieldName.Password);
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePass.Application/Import/Commands/ImportFromCsv/ImportFromCsvCommandValidator.cs b/ModernKeePass.Application/Import/Commands/ImportFromCsv/ImportFromCsvCommandValidator.cs
new file mode 100644
index 0000000..f0593a3
--- /dev/null
+++ b/ModernKeePass.Application/Import/Commands/ImportFromCsv/ImportFromCsvCommandValidator.cs
@@ -0,0 +1,17 @@
+using FluentValidation;
+
+namespace ModernKeePass.Application.Import.Commands.ImportFromCsv
+{
+ public class ImportFromCsvCommandValidator : AbstractValidator
+ {
+ public ImportFromCsvCommandValidator()
+ {
+ RuleFor(v => v.FilePath)
+ .NotNull()
+ .NotEmpty();
+ RuleFor(v => v.DestinationGroupId)
+ .NotNull()
+ .NotEmpty();
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePass.Infrastructure/File/CsvImportFormat.cs b/ModernKeePass.Infrastructure/File/CsvImportFormat.cs
deleted file mode 100644
index 94195de..0000000
--- a/ModernKeePass.Infrastructure/File/CsvImportFormat.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Collections.Generic;
-using ModernKeePass.Application.Common.Interfaces;
-
-namespace ModernKeePass.Infrastructure.File
-{
- public class CsvImportFormat: IImportFormat
- {
- private const bool HasHeaderRow = true;
- private const char Delimiter = ';';
- private const char LineDelimiter = '\n';
-
- public List> Import(IList fileContents)
- {
- var parsedResult = new List>();
- foreach (var line in fileContents)
- {
- var fields = line.Split(Delimiter);
- var recordItem = new Dictionary();
- var i = 0;
- foreach (var field in fields)
- {
- recordItem.Add(i.ToString(), field);
- i++;
- }
- parsedResult.Add(recordItem);
- }
-
- return parsedResult;
- }
- }
-}
\ No newline at end of file
diff --git a/ModernKeePass.Infrastructure/Infrastructure.csproj b/ModernKeePass.Infrastructure/Infrastructure.csproj
index a50fba2..fe31681 100644
--- a/ModernKeePass.Infrastructure/Infrastructure.csproj
+++ b/ModernKeePass.Infrastructure/Infrastructure.csproj
@@ -78,7 +78,6 @@
-
diff --git a/ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml b/ModernKeePass/Views/MainPageFrames/ImportPage.xaml
similarity index 97%
rename from ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml
rename to ModernKeePass/Views/MainPageFrames/ImportPage.xaml
index e5897ef..85c8ebc 100644
--- a/ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml
+++ b/ModernKeePass/Views/MainPageFrames/ImportPage.xaml
@@ -1,5 +1,5 @@
/// The import/export page.
///
- public sealed partial class ImportExportPage
+ public sealed partial class ImportPage
{
- public ImportExportPage()
+ public ImportPage()
{
InitializeComponent();
}
diff --git a/ModernKeePass/Win81App.csproj b/ModernKeePass/Win81App.csproj
index afd2ea5..5a1ba23 100644
--- a/ModernKeePass/Win81App.csproj
+++ b/ModernKeePass/Win81App.csproj
@@ -100,8 +100,8 @@
DonatePage.xaml
-
- ImportExportPage.xaml
+
+ ImportPage.xaml
SettingsHistoryPage.xaml
@@ -203,7 +203,7 @@
MSBuild:Compile
PreserveNewest
-
+
Designer
MSBuild:Compile