diff --git a/LANCommander/Components/InputArchiveFile.razor b/LANCommander/Components/InputArchiveFile.razor
new file mode 100644
index 00000000..49d058b0
--- /dev/null
+++ b/LANCommander/Components/InputArchiveFile.razor
@@ -0,0 +1,54 @@
+@using LANCommander.Models;
+@using System.IO.Compression;
+@inject ModalService ModalService
+
+
+
+
+
+ @if (ArchiveId != Guid.Empty) {
+
+
+
+ }
+
+
+@code {
+ [Parameter] public string Value { get; set; }
+ [Parameter] public EventCallback ValueChanged { get; set; }
+ [Parameter] public Guid ArchiveId { get; set; }
+ [Parameter] public string ArchiveBrowserTitle { get; set; } = "Choose File";
+ [Parameter] public bool AllowDirectories { get; set; } = false;
+
+ private async void BrowseForFile()
+ {
+ var modalOptions = new ModalOptions()
+ {
+ Title = ArchiveBrowserTitle,
+ Maximizable = false,
+ DefaultMaximized = true,
+ Closable = true,
+ OkText = "Select File"
+ };
+
+ var browserOptions = new ArchiveBrowserOptions()
+ {
+ ArchiveId = ArchiveId,
+ Select = true,
+ Multiple = false,
+ AllowDirectories = AllowDirectories
+ };
+
+ var modalRef = await ModalService.CreateModalAsync>(modalOptions, browserOptions);
+
+ modalRef.OnOk = async (results) =>
+ {
+ Value = results.FirstOrDefault().FullName;
+
+ if (ValueChanged.HasDelegate)
+ await ValueChanged.InvokeAsync(Value);
+
+ StateHasChanged();
+ };
+ }
+}
\ No newline at end of file
diff --git a/LANCommander/Components/InputRegistry.razor b/LANCommander/Components/InputRegistry.razor
new file mode 100644
index 00000000..e0deb770
--- /dev/null
+++ b/LANCommander/Components/InputRegistry.razor
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@code {
+ [Parameter] public string Value { get; set; } = "";
+ [Parameter] public EventCallback ValueChanged { get; set; }
+
+ string Hive = "HKCU:\\";
+ string Path = "SOFTWARE";
+
+ private async void OnChanged()
+ {
+ Value = Hive + Path;
+
+ if (ValueChanged.HasDelegate)
+ await ValueChanged.InvokeAsync(Value);
+
+ StateHasChanged();
+ }
+}
\ No newline at end of file
diff --git a/LANCommander/Migrations/DatabaseContextModelSnapshot.cs b/LANCommander/Migrations/DatabaseContextModelSnapshot.cs
index e8c8f418..9bef70d0 100644
--- a/LANCommander/Migrations/DatabaseContextModelSnapshot.cs
+++ b/LANCommander/Migrations/DatabaseContextModelSnapshot.cs
@@ -525,6 +525,45 @@ namespace LANCommander.Migrations
b.ToTable("AspNetRoles", (string)null);
});
+ modelBuilder.Entity("LANCommander.Data.Models.SavePath", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("CreatedById")
+ .HasColumnType("TEXT");
+
+ b.Property("CreatedOn")
+ .HasColumnType("TEXT");
+
+ b.Property("GameId")
+ .HasColumnType("TEXT");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.Property("UpdatedById")
+ .HasColumnType("TEXT");
+
+ b.Property("UpdatedOn")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreatedById");
+
+ b.HasIndex("GameId");
+
+ b.HasIndex("UpdatedById");
+
+ b.ToTable("SavePaths");
+ });
+
modelBuilder.Entity("LANCommander.Data.Models.Script", b =>
{
b.Property("Id")
@@ -1110,6 +1149,27 @@ namespace LANCommander.Migrations
b.Navigation("UpdatedBy");
});
+ modelBuilder.Entity("LANCommander.Data.Models.SavePath", b =>
+ {
+ b.HasOne("LANCommander.Data.Models.User", "CreatedBy")
+ .WithMany()
+ .HasForeignKey("CreatedById");
+
+ b.HasOne("LANCommander.Data.Models.Game", "Game")
+ .WithMany("SavePaths")
+ .HasForeignKey("GameId");
+
+ b.HasOne("LANCommander.Data.Models.User", "UpdatedBy")
+ .WithMany()
+ .HasForeignKey("UpdatedById");
+
+ b.Navigation("CreatedBy");
+
+ b.Navigation("Game");
+
+ b.Navigation("UpdatedBy");
+ });
+
modelBuilder.Entity("LANCommander.Data.Models.Script", b =>
{
b.HasOne("LANCommander.Data.Models.User", "CreatedBy")
@@ -1231,6 +1291,8 @@ namespace LANCommander.Migrations
b.Navigation("MultiplayerModes");
+ b.Navigation("SavePaths");
+
b.Navigation("Scripts");
});