From 0b20720fdb3cb4ee4870b448d9edc4d3a8e5bfb1 Mon Sep 17 00:00:00 2001
From: pizzaboxer <pizzaboxer@pizzaboxer.xyz>
Date: Sun, 15 Sep 2024 20:58:28 +0100
Subject: [PATCH] Reorganize models

---
 Bloxstrap/GlobalUsings.cs                     |  9 +++--
 .../Models/{ => APIs/Config}/Supporter.cs     |  2 +-
 .../Models/{ => APIs/Config}/SupporterData.cs |  2 +-
 .../Models/APIs/GitHub/GitHubReleaseAsset.cs  |  8 +++++
 .../Models/{ => APIs/GitHub}/GithubRelease.cs | 13 ++-----
 Bloxstrap/Models/{ => APIs}/IPInfoResponse.cs | 28 +++++++--------
 .../Roblox}/ApiArrayResponse.cs               |  2 +-
 .../{ => APIs/Roblox}/ClientFlagSettings.cs   |  2 +-
 .../Models/{ => APIs/Roblox}/ClientVersion.cs |  2 +-
 .../{RobloxApi => APIs/Roblox}/GameCreator.cs |  2 +-
 .../Roblox}/GameDetailResponse.cs             |  2 +-
 .../Roblox}/ThumbnailResponse.cs              |  2 +-
 .../Roblox}/UniverseIdResponse.cs             |  2 +-
 .../Models/{ => Entities}/ActivityData.cs     | 36 +++++++++----------
 .../{ => Entities}/ModPresetFileData.cs       |  8 ++---
 .../Models/{ => Entities}/UniverseDetails.cs  | 10 +++---
 .../Models/{ => Persistable}/AppState.cs      |  4 +--
 .../Models/{ => Persistable}/Settings.cs      |  2 +-
 Bloxstrap/Models/{ => Persistable}/State.cs   |  6 ++--
 .../Models/{ => Persistable}/WindowState.cs   |  8 ++---
 .../Models/SettingTasks/EnumModPresetTask.cs  |  3 +-
 .../Models/SettingTasks/ModPresetTask.cs      |  3 +-
 .../UI/Elements/Settings/MainWindow.xaml.cs   |  2 +-
 23 files changed, 83 insertions(+), 75 deletions(-)
 rename Bloxstrap/Models/{ => APIs/Config}/Supporter.cs (89%)
 rename Bloxstrap/Models/{ => APIs/Config}/SupporterData.cs (84%)
 create mode 100644 Bloxstrap/Models/APIs/GitHub/GitHubReleaseAsset.cs
 rename Bloxstrap/Models/{ => APIs/GitHub}/GithubRelease.cs (63%)
 rename Bloxstrap/Models/{ => APIs}/IPInfoResponse.cs (88%)
 rename Bloxstrap/Models/{RobloxApi => APIs/Roblox}/ApiArrayResponse.cs (84%)
 rename Bloxstrap/Models/{ => APIs/Roblox}/ClientFlagSettings.cs (80%)
 rename Bloxstrap/Models/{ => APIs/Roblox}/ClientVersion.cs (91%)
 rename Bloxstrap/Models/{RobloxApi => APIs/Roblox}/GameCreator.cs (96%)
 rename Bloxstrap/Models/{RobloxApi => APIs/Roblox}/GameDetailResponse.cs (99%)
 rename Bloxstrap/Models/{RobloxApi => APIs/Roblox}/ThumbnailResponse.cs (90%)
 rename Bloxstrap/Models/{RobloxApi => APIs/Roblox}/UniverseIdResponse.cs (80%)
 rename Bloxstrap/Models/{ => Entities}/ActivityData.cs (85%)
 rename Bloxstrap/Models/{ => Entities}/ModPresetFileData.cs (95%)
 rename Bloxstrap/Models/{ => Entities}/UniverseDetails.cs (90%)
 rename Bloxstrap/Models/{ => Persistable}/AppState.cs (60%)
 rename Bloxstrap/Models/{ => Persistable}/Settings.cs (97%)
 rename Bloxstrap/Models/{ => Persistable}/State.cs (89%)
 rename Bloxstrap/Models/{ => Persistable}/WindowState.cs (78%)

diff --git a/Bloxstrap/GlobalUsings.cs b/Bloxstrap/GlobalUsings.cs
index 9c10516..c04aec2 100644
--- a/Bloxstrap/GlobalUsings.cs
+++ b/Bloxstrap/GlobalUsings.cs
@@ -3,7 +3,6 @@ global using System.Collections.Generic;
 global using System.Diagnostics;
 global using System.Globalization;
 global using System.IO;
-global using System.IO.Compression;
 global using System.Text;
 global using System.Text.Json;
 global using System.Text.Json.Serialization;
@@ -18,10 +17,16 @@ global using Bloxstrap.Enums;
 global using Bloxstrap.Exceptions;
 global using Bloxstrap.Extensions;
 global using Bloxstrap.Models;
+global using Bloxstrap.Models.APIs.Config;
+global using Bloxstrap.Models.APIs.GitHub;
+global using Bloxstrap.Models.APIs.Roblox;
 global using Bloxstrap.Models.Attributes;
 global using Bloxstrap.Models.BloxstrapRPC;
-global using Bloxstrap.Models.RobloxApi;
+global using Bloxstrap.Models.Entities;
 global using Bloxstrap.Models.Manifest;
+global using Bloxstrap.Models.Persistable;
+global using Bloxstrap.Models.SettingTasks;
+global using Bloxstrap.Models.SettingTasks.Base;
 global using Bloxstrap.Resources;
 global using Bloxstrap.UI;
 global using Bloxstrap.Utility;
\ No newline at end of file
diff --git a/Bloxstrap/Models/Supporter.cs b/Bloxstrap/Models/APIs/Config/Supporter.cs
similarity index 89%
rename from Bloxstrap/Models/Supporter.cs
rename to Bloxstrap/Models/APIs/Config/Supporter.cs
index 6732a26..9a689b5 100644
--- a/Bloxstrap/Models/Supporter.cs
+++ b/Bloxstrap/Models/APIs/Config/Supporter.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.APIs.Config
 {
     public class Supporter
     {
diff --git a/Bloxstrap/Models/SupporterData.cs b/Bloxstrap/Models/APIs/Config/SupporterData.cs
similarity index 84%
rename from Bloxstrap/Models/SupporterData.cs
rename to Bloxstrap/Models/APIs/Config/SupporterData.cs
index f9ef2fe..35feb1e 100644
--- a/Bloxstrap/Models/SupporterData.cs
+++ b/Bloxstrap/Models/APIs/Config/SupporterData.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.APIs.Config
 {
     public class SupporterData
     {
diff --git a/Bloxstrap/Models/APIs/GitHub/GitHubReleaseAsset.cs b/Bloxstrap/Models/APIs/GitHub/GitHubReleaseAsset.cs
new file mode 100644
index 0000000..023c307
--- /dev/null
+++ b/Bloxstrap/Models/APIs/GitHub/GitHubReleaseAsset.cs
@@ -0,0 +1,8 @@
+public class GithubReleaseAsset
+{
+    [JsonPropertyName("browser_download_url")]
+    public string BrowserDownloadUrl { get; set; } = null!;
+
+    [JsonPropertyName("name")]
+    public string Name { get; set; } = null!;
+}
\ No newline at end of file
diff --git a/Bloxstrap/Models/GithubRelease.cs b/Bloxstrap/Models/APIs/GitHub/GithubRelease.cs
similarity index 63%
rename from Bloxstrap/Models/GithubRelease.cs
rename to Bloxstrap/Models/APIs/GitHub/GithubRelease.cs
index 12b8876..2f55f91 100644
--- a/Bloxstrap/Models/GithubRelease.cs
+++ b/Bloxstrap/Models/APIs/GitHub/GithubRelease.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.APIs.GitHub
 {
     public class GithubRelease
     {
@@ -7,7 +7,7 @@
 
         [JsonPropertyName("name")]
         public string Name { get; set; } = null!;
-        
+
         [JsonPropertyName("body")]
         public string Body { get; set; } = null!;
 
@@ -17,13 +17,4 @@
         [JsonPropertyName("assets")]
         public List<GithubReleaseAsset>? Assets { get; set; }
     }
-
-    public class GithubReleaseAsset
-    {
-        [JsonPropertyName("browser_download_url")]
-        public string BrowserDownloadUrl { get; set; } = null!;
-
-        [JsonPropertyName("name")]
-        public string Name { get; set; } = null!;
-    }
 }
diff --git a/Bloxstrap/Models/IPInfoResponse.cs b/Bloxstrap/Models/APIs/IPInfoResponse.cs
similarity index 88%
rename from Bloxstrap/Models/IPInfoResponse.cs
rename to Bloxstrap/Models/APIs/IPInfoResponse.cs
index f8d3bc0..8cb65a5 100644
--- a/Bloxstrap/Models/IPInfoResponse.cs
+++ b/Bloxstrap/Models/APIs/IPInfoResponse.cs
@@ -1,14 +1,14 @@
-namespace Bloxstrap.Models
-{
-    public class IPInfoResponse
-    {
-        [JsonPropertyName("city")]
-        public string City { get; set; } = null!;
-
-        [JsonPropertyName("country")]
-        public string Country { get; set; } = null!;
-
-        [JsonPropertyName("region")]
-        public string Region { get; set; } = null!;
-    }
-}
+namespace Bloxstrap.Models.APIs
+{
+    public class IPInfoResponse
+    {
+        [JsonPropertyName("city")]
+        public string City { get; set; } = null!;
+
+        [JsonPropertyName("country")]
+        public string Country { get; set; } = null!;
+
+        [JsonPropertyName("region")]
+        public string Region { get; set; } = null!;
+    }
+}
diff --git a/Bloxstrap/Models/RobloxApi/ApiArrayResponse.cs b/Bloxstrap/Models/APIs/Roblox/ApiArrayResponse.cs
similarity index 84%
rename from Bloxstrap/Models/RobloxApi/ApiArrayResponse.cs
rename to Bloxstrap/Models/APIs/Roblox/ApiArrayResponse.cs
index 4e1fefd..202de43 100644
--- a/Bloxstrap/Models/RobloxApi/ApiArrayResponse.cs
+++ b/Bloxstrap/Models/APIs/Roblox/ApiArrayResponse.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models.RobloxApi
+namespace Bloxstrap.Models.APIs.Roblox
 {
     /// <summary>
     /// Roblox.Web.WebAPI.Models.ApiArrayResponse
diff --git a/Bloxstrap/Models/ClientFlagSettings.cs b/Bloxstrap/Models/APIs/Roblox/ClientFlagSettings.cs
similarity index 80%
rename from Bloxstrap/Models/ClientFlagSettings.cs
rename to Bloxstrap/Models/APIs/Roblox/ClientFlagSettings.cs
index b50932b..88ef9eb 100644
--- a/Bloxstrap/Models/ClientFlagSettings.cs
+++ b/Bloxstrap/Models/APIs/Roblox/ClientFlagSettings.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.APIs.Roblox
 {
     public class ClientFlagSettings
     {
diff --git a/Bloxstrap/Models/ClientVersion.cs b/Bloxstrap/Models/APIs/Roblox/ClientVersion.cs
similarity index 91%
rename from Bloxstrap/Models/ClientVersion.cs
rename to Bloxstrap/Models/APIs/Roblox/ClientVersion.cs
index b90df0a..9fa405e 100644
--- a/Bloxstrap/Models/ClientVersion.cs
+++ b/Bloxstrap/Models/APIs/Roblox/ClientVersion.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.APIs.Roblox
 {
     public class ClientVersion
     {
diff --git a/Bloxstrap/Models/RobloxApi/GameCreator.cs b/Bloxstrap/Models/APIs/Roblox/GameCreator.cs
similarity index 96%
rename from Bloxstrap/Models/RobloxApi/GameCreator.cs
rename to Bloxstrap/Models/APIs/Roblox/GameCreator.cs
index c191884..5ac73fd 100644
--- a/Bloxstrap/Models/RobloxApi/GameCreator.cs
+++ b/Bloxstrap/Models/APIs/Roblox/GameCreator.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models.RobloxApi
+namespace Bloxstrap.Models.APIs.Roblox
 {
     /// <summary>
     /// Roblox.Games.Api.Models.Response.GameCreator
diff --git a/Bloxstrap/Models/RobloxApi/GameDetailResponse.cs b/Bloxstrap/Models/APIs/Roblox/GameDetailResponse.cs
similarity index 99%
rename from Bloxstrap/Models/RobloxApi/GameDetailResponse.cs
rename to Bloxstrap/Models/APIs/Roblox/GameDetailResponse.cs
index dca8c81..93abd5d 100644
--- a/Bloxstrap/Models/RobloxApi/GameDetailResponse.cs
+++ b/Bloxstrap/Models/APIs/Roblox/GameDetailResponse.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models.RobloxApi
+namespace Bloxstrap.Models.APIs.Roblox
 {
 
     /// <summary>
diff --git a/Bloxstrap/Models/RobloxApi/ThumbnailResponse.cs b/Bloxstrap/Models/APIs/Roblox/ThumbnailResponse.cs
similarity index 90%
rename from Bloxstrap/Models/RobloxApi/ThumbnailResponse.cs
rename to Bloxstrap/Models/APIs/Roblox/ThumbnailResponse.cs
index c667813..213083c 100644
--- a/Bloxstrap/Models/RobloxApi/ThumbnailResponse.cs
+++ b/Bloxstrap/Models/APIs/Roblox/ThumbnailResponse.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models.RobloxApi
+namespace Bloxstrap.Models.APIs.Roblox
 {
     /// <summary>
     /// Roblox.Web.Responses.Thumbnails.ThumbnailResponse
diff --git a/Bloxstrap/Models/RobloxApi/UniverseIdResponse.cs b/Bloxstrap/Models/APIs/Roblox/UniverseIdResponse.cs
similarity index 80%
rename from Bloxstrap/Models/RobloxApi/UniverseIdResponse.cs
rename to Bloxstrap/Models/APIs/Roblox/UniverseIdResponse.cs
index c42d10a..7ab52fa 100644
--- a/Bloxstrap/Models/RobloxApi/UniverseIdResponse.cs
+++ b/Bloxstrap/Models/APIs/Roblox/UniverseIdResponse.cs
@@ -1,4 +1,4 @@
-namespace Bloxstrap.Models.RobloxApi
+namespace Bloxstrap.Models.APIs.Roblox
 {
     // lmao its just one property
     public class UniverseIdResponse
diff --git a/Bloxstrap/Models/ActivityData.cs b/Bloxstrap/Models/Entities/ActivityData.cs
similarity index 85%
rename from Bloxstrap/Models/ActivityData.cs
rename to Bloxstrap/Models/Entities/ActivityData.cs
index b99e81c..40565f0 100644
--- a/Bloxstrap/Models/ActivityData.cs
+++ b/Bloxstrap/Models/Entities/ActivityData.cs
@@ -1,10 +1,10 @@
 using System.Web;
 using System.Windows;
 using System.Windows.Input;
-
+using Bloxstrap.Models.APIs;
 using CommunityToolkit.Mvvm.Input;
 
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.Entities
 {
     public class ActivityData
     {
@@ -16,7 +16,7 @@ namespace Bloxstrap.Models
         /// </summary>
         public ActivityData? RootActivity;
 
-        public long UniverseId 
+        public long UniverseId
         {
             get => _universeId;
             set
@@ -28,19 +28,19 @@ namespace Bloxstrap.Models
 
         public long PlaceId { get; set; } = 0;
 
-        public string JobId { get; set; } = String.Empty;
+        public string JobId { get; set; } = string.Empty;
 
         /// <summary>
         /// This will be empty unless the server joined is a private server
         /// </summary>
-        public string AccessCode { get; set; } = String.Empty;
-        
-        public string MachineAddress { get; set; } = String.Empty;
+        public string AccessCode { get; set; } = string.Empty;
 
-        public bool MachineAddressValid => !String.IsNullOrEmpty(MachineAddress) && !MachineAddress.StartsWith("10.");
+        public string MachineAddress { get; set; } = string.Empty;
+
+        public bool MachineAddressValid => !string.IsNullOrEmpty(MachineAddress) && !MachineAddress.StartsWith("10.");
 
         public bool IsTeleport { get; set; } = false;
-        
+
         public ServerType ServerType { get; set; } = ServerType.Public;
 
         public DateTime TimeJoined { get; set; }
@@ -52,15 +52,15 @@ namespace Bloxstrap.Models
         /// <summary>
         /// This is intended only for other people to use, i.e. context menu invite link, rich presence joining
         /// </summary>
-        public string RPCLaunchData { get; set; } = String.Empty;
+        public string RPCLaunchData { get; set; } = string.Empty;
 
         public UniverseDetails? UniverseDetails { get; set; }
-        
+
         public string GameHistoryDescription
         {
             get
             {
-                string desc = String.Format("{0} • {1} - {2}", UniverseDetails?.Data.Creator.Name, TimeJoined.ToString("h:mm tt"), TimeLeft?.ToString("h:mm tt"));
+                string desc = string.Format("{0} • {1} - {2}", UniverseDetails?.Data.Creator.Name, TimeJoined.ToString("h:mm tt"), TimeLeft?.ToString("h:mm tt"));
 
                 if (ServerType != ServerType.Public)
                     desc += " • " + ServerType.ToTranslatedString();
@@ -82,7 +82,7 @@ namespace Bloxstrap.Models
             else
                 deeplink += "&gameInstanceId=" + JobId;
 
-            if (launchData && !String.IsNullOrEmpty(RPCLaunchData))
+            if (launchData && !string.IsNullOrEmpty(RPCLaunchData))
                 deeplink += "&launchData=" + HttpUtility.UrlEncode(RPCLaunchData);
 
             return deeplink;
@@ -107,7 +107,7 @@ namespace Bloxstrap.Models
             {
                 var ipInfo = await Http.GetJson<IPInfoResponse>($"https://ipinfo.io/{MachineAddress}/json");
 
-                if (String.IsNullOrEmpty(ipInfo.City))
+                if (string.IsNullOrEmpty(ipInfo.City))
                     throw new InvalidHTTPResponseException("Reported city was blank");
 
                 if (ipInfo.City == ipInfo.Region)
@@ -127,9 +127,9 @@ namespace Bloxstrap.Models
                 serverQuerySemaphore.Release();
 
                 Frontend.ShowConnectivityDialog(
-                    String.Format(Strings.Dialog_Connectivity_UnableToConnect, "ipinfo.io"), 
-                    Strings.ActivityWatcher_LocationQueryFailed, 
-                    MessageBoxImage.Warning, 
+                    string.Format(Strings.Dialog_Connectivity_UnableToConnect, "ipinfo.io"),
+                    Strings.ActivityWatcher_LocationQueryFailed,
+                    MessageBoxImage.Warning,
                     ex
                 );
             }
@@ -142,7 +142,7 @@ namespace Bloxstrap.Models
         private void RejoinServer()
         {
             string playerPath = Path.Combine(Paths.Roblox, "Player", "RobloxPlayerBeta.exe");
-            
+
             Process.Start(playerPath, GetInviteDeeplink(false));
         }
     }
diff --git a/Bloxstrap/Models/ModPresetFileData.cs b/Bloxstrap/Models/Entities/ModPresetFileData.cs
similarity index 95%
rename from Bloxstrap/Models/ModPresetFileData.cs
rename to Bloxstrap/Models/Entities/ModPresetFileData.cs
index d704891..8f620bd 100644
--- a/Bloxstrap/Models/ModPresetFileData.cs
+++ b/Bloxstrap/Models/Entities/ModPresetFileData.cs
@@ -1,23 +1,23 @@
 using System.Security.Cryptography;
 using System.Windows.Markup;
 
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.Entities
 {
     public class ModPresetFileData
     {
         public string FilePath { get; private set; }
 
         public string FullFilePath => Path.Combine(Paths.Modifications, FilePath);
-        
+
         public FileStream FileStream => File.OpenRead(FullFilePath);
 
         public string ResourceIdentifier { get; private set; }
-        
+
         public Stream ResourceStream => Resource.GetStream(ResourceIdentifier);
 
         public byte[] ResourceHash { get; private set; }
 
-        public ModPresetFileData(string contentPath, string resource) 
+        public ModPresetFileData(string contentPath, string resource)
         {
             FilePath = contentPath;
             ResourceIdentifier = resource;
diff --git a/Bloxstrap/Models/UniverseDetails.cs b/Bloxstrap/Models/Entities/UniverseDetails.cs
similarity index 90%
rename from Bloxstrap/Models/UniverseDetails.cs
rename to Bloxstrap/Models/Entities/UniverseDetails.cs
index aa87501..62f5445 100644
--- a/Bloxstrap/Models/UniverseDetails.cs
+++ b/Bloxstrap/Models/Entities/UniverseDetails.cs
@@ -1,11 +1,13 @@
-namespace Bloxstrap.Models
+using Bloxstrap.Models.APIs.Roblox;
+
+namespace Bloxstrap.Models.Entities
 {
     public class UniverseDetails
     {
         private static List<UniverseDetails> _cache { get; set; } = new();
 
         public GameDetailResponse Data { get; set; } = null!;
-        
+
         /// <summary>
         /// Returns data for a 128x128 icon
         /// </summary>
@@ -13,9 +15,9 @@
 
         public static UniverseDetails? LoadFromCache(long id)
         {
-             var cacheQuery = _cache.Where(x => x.Data?.Id == id);
+            var cacheQuery = _cache.Where(x => x.Data?.Id == id);
 
-             if (cacheQuery.Any())
+            if (cacheQuery.Any())
                 return cacheQuery.First();
 
             return null;
diff --git a/Bloxstrap/Models/AppState.cs b/Bloxstrap/Models/Persistable/AppState.cs
similarity index 60%
rename from Bloxstrap/Models/AppState.cs
rename to Bloxstrap/Models/Persistable/AppState.cs
index 68c3c58..57c3224 100644
--- a/Bloxstrap/Models/AppState.cs
+++ b/Bloxstrap/Models/Persistable/AppState.cs
@@ -1,8 +1,8 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.Persistable
 {
     public class AppState
     {
-        public string VersionGuid { get; set; } = String.Empty;
+        public string VersionGuid { get; set; } = string.Empty;
 
         public Dictionary<string, string> PackageHashes { get; set; } = new();
 
diff --git a/Bloxstrap/Models/Settings.cs b/Bloxstrap/Models/Persistable/Settings.cs
similarity index 97%
rename from Bloxstrap/Models/Settings.cs
rename to Bloxstrap/Models/Persistable/Settings.cs
index ebe594f..d4018ce 100644
--- a/Bloxstrap/Models/Settings.cs
+++ b/Bloxstrap/Models/Persistable/Settings.cs
@@ -1,6 +1,6 @@
 using System.Collections.ObjectModel;
 
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.Persistable
 {
     public class Settings
     {
diff --git a/Bloxstrap/Models/State.cs b/Bloxstrap/Models/Persistable/State.cs
similarity index 89%
rename from Bloxstrap/Models/State.cs
rename to Bloxstrap/Models/Persistable/State.cs
index edaf426..de05265 100644
--- a/Bloxstrap/Models/State.cs
+++ b/Bloxstrap/Models/Persistable/State.cs
@@ -1,13 +1,13 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.Persistable
 {
     public class State
     {
         public bool ShowFFlagEditorWarning { get; set; } = true;
-        
+
         public bool PromptWebView2Install { get; set; } = true;
 
         public AppState Player { get; set; } = new();
-        
+
         public AppState Studio { get; set; } = new();
 
         public WindowState SettingsWindow { get; set; } = new();
diff --git a/Bloxstrap/Models/WindowState.cs b/Bloxstrap/Models/Persistable/WindowState.cs
similarity index 78%
rename from Bloxstrap/Models/WindowState.cs
rename to Bloxstrap/Models/Persistable/WindowState.cs
index efc808d..90bf334 100644
--- a/Bloxstrap/Models/WindowState.cs
+++ b/Bloxstrap/Models/Persistable/WindowState.cs
@@ -1,13 +1,13 @@
-namespace Bloxstrap.Models
+namespace Bloxstrap.Models.Persistable
 {
     public class WindowState
     {
         public double Width { get; set; }
-        
+
         public double Height { get; set; }
-        
+
         public double Left { get; set; }
-        
+
         public double Top { get; set; }
     }
 }
diff --git a/Bloxstrap/Models/SettingTasks/EnumModPresetTask.cs b/Bloxstrap/Models/SettingTasks/EnumModPresetTask.cs
index a06808e..07fb0ca 100644
--- a/Bloxstrap/Models/SettingTasks/EnumModPresetTask.cs
+++ b/Bloxstrap/Models/SettingTasks/EnumModPresetTask.cs
@@ -1,4 +1,5 @@
-using Bloxstrap.Models.SettingTasks.Base;
+using Bloxstrap.Models.Entities;
+using Bloxstrap.Models.SettingTasks.Base;
 
 namespace Bloxstrap.Models.SettingTasks
 {
diff --git a/Bloxstrap/Models/SettingTasks/ModPresetTask.cs b/Bloxstrap/Models/SettingTasks/ModPresetTask.cs
index 99c20ee..8aa1592 100644
--- a/Bloxstrap/Models/SettingTasks/ModPresetTask.cs
+++ b/Bloxstrap/Models/SettingTasks/ModPresetTask.cs
@@ -1,4 +1,5 @@
-using Bloxstrap.Models.SettingTasks.Base;
+using Bloxstrap.Models.Entities;
+using Bloxstrap.Models.SettingTasks.Base;
 
 namespace Bloxstrap.Models.SettingTasks
 {
diff --git a/Bloxstrap/UI/Elements/Settings/MainWindow.xaml.cs b/Bloxstrap/UI/Elements/Settings/MainWindow.xaml.cs
index df17658..fda449f 100644
--- a/Bloxstrap/UI/Elements/Settings/MainWindow.xaml.cs
+++ b/Bloxstrap/UI/Elements/Settings/MainWindow.xaml.cs
@@ -14,7 +14,7 @@ namespace Bloxstrap.UI.Elements.Settings
     /// </summary>
     public partial class MainWindow : INavigationWindow
     {
-        private Models.WindowState _state => App.State.Prop.SettingsWindow;
+        private Models.Persistable.WindowState _state => App.State.Prop.SettingsWindow;
 
         public MainWindow(bool showAlreadyRunningWarning)
         {