From c8aa7ba8e7193f739660c2e4f048d71af3e627f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=B2=D0=B8=D0=B4=20=D0=A7=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=BF=D1=8F=D1=82=D0=BE=D0=B2?= Date: Mon, 8 Jul 2024 16:20:28 +0300 Subject: [PATCH] 1.5.1 --- NebulaAuth/Model/ProxyStorage.cs | 40 ++++++- NebulaAuth/NebulaAuth - Backup.csproj | 58 ---------- NebulaAuth/ViewModel/MainVM_Proxy.cs | 6 +- NebulaAuth/ViewModel/Other/ProxyManagerVM.cs | 108 +++++++++---------- changelog/1.5.1.html | 18 ++-- 5 files changed, 101 insertions(+), 129 deletions(-) delete mode 100644 NebulaAuth/NebulaAuth - Backup.csproj diff --git a/NebulaAuth/Model/ProxyStorage.cs b/NebulaAuth/Model/ProxyStorage.cs index 08329c5..8553284 100644 --- a/NebulaAuth/Model/ProxyStorage.cs +++ b/NebulaAuth/Model/ProxyStorage.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using AchiesUtilities.Collections; using AchiesUtilities.Web.Proxy; @@ -11,7 +12,7 @@ namespace NebulaAuth.Model; public static class ProxyStorage { - + public const string FORMAT = ADDRESS_FORMAT + ":{USER}:{PASS}"; public const string ADDRESS_FORMAT = "{IP}:{PORT}"; @@ -69,6 +70,41 @@ public static class ProxyStorage Save(); } + + public static void SetProxies(IEnumerable> proxies) + { + foreach (var (key, proxyData) in proxies) + { + var id = key; + if (id == null) + { + if (Proxies.Count == 0) + { + id = 0; + } + else + { + id = Proxies.Keys.Max() + 1; + } + } + + Proxies[id] = proxyData; + } + + Save(); + } + + public static void OrderCollection() //RETHINK: maybe there is better way to handle it + { + var proxies = Proxies.OrderBy(p => p.Key) + .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Proxies.Clear(); + foreach (var kvp in proxies) + { + Proxies.Add(kvp.Key, kvp.Value); + } + } + public static void RemoveProxy(int id) { Proxies.Remove(id); @@ -76,7 +112,7 @@ public static class ProxyStorage } public static bool CompareProxy(ProxyData proxyData1, ProxyData proxyData2) { - return proxyData1.Address == proxyData2.Address && proxyData1.Port == proxyData2.Port; + return proxyData1.Equals(proxyData2); } diff --git a/NebulaAuth/NebulaAuth - Backup.csproj b/NebulaAuth/NebulaAuth - Backup.csproj deleted file mode 100644 index 222a4cf..0000000 --- a/NebulaAuth/NebulaAuth - Backup.csproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - WinExe - net7.0-windows - enable - true - true - latest - ru - Theme\nebula lock.ico - 7.0 - 1.4.0 - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - - - - - - - - Always - - - - diff --git a/NebulaAuth/ViewModel/MainVM_Proxy.cs b/NebulaAuth/ViewModel/MainVM_Proxy.cs index 85a2ff5..148d8d4 100644 --- a/NebulaAuth/ViewModel/MainVM_Proxy.cs +++ b/NebulaAuth/ViewModel/MainVM_Proxy.cs @@ -76,7 +76,7 @@ public partial class MainVM var selectedId = SelectedProxy.Id; ProxyExist = ProxyStorage.Proxies.TryGetValue(selectedId, out var existedProxy) - && ProxyStorage.CompareProxy(SelectedProxy.Data, existedProxy); + && SelectedProxy.Data.Equals(existedProxy); //Id is not important in 'Equals()' as we extract it from the dictionary } [RelayCommand] @@ -98,7 +98,7 @@ public partial class MainVM [RelayCommand] private void RemoveProxy() { - if(SelectedProxy == null) return; + if (SelectedProxy == null) return; if (SelectedMafile == null) return; if (!ValidateCanSaveAndWarn(SelectedMafile)) return; SelectedMafile.Proxy = null; @@ -121,7 +121,7 @@ public partial class MainVM SelectedMafile.Proxy = SelectedProxy; Storage.UpdateMafile(SelectedMafile); } - + private bool ValidateCanSaveAndWarn(Mafile data) { var canSave = Storage.ValidateCanSave(data); diff --git a/NebulaAuth/ViewModel/Other/ProxyManagerVM.cs b/NebulaAuth/ViewModel/Other/ProxyManagerVM.cs index 457a9f2..14ff354 100644 --- a/NebulaAuth/ViewModel/Other/ProxyManagerVM.cs +++ b/NebulaAuth/ViewModel/Other/ProxyManagerVM.cs @@ -21,7 +21,7 @@ public partial class ProxyManagerVM : ObservableObject [ObservableProperty] private KeyValuePair? _defaultProxy; public ObservableDictionary Proxies => ProxyStorage.Proxies; - private static readonly Regex IdRegex = new(@"(?:\{(\d+)\})"); + private static readonly Regex IdRegex = new(@"\{(\d+)\}$"); public ProxyManagerVM() @@ -33,79 +33,71 @@ public partial class ProxyManagerVM : ObservableObject [RelayCommand] private void AddProxy() { - if (string.IsNullOrEmpty(AddProxyField)) return; - if (AddProxyField.Contains(Environment.NewLine)) - { - var split = AddProxyField.Split(Environment.NewLine); - var idPresent = (bool?)null; - var proxies = new List>(); - var i = 0; - foreach (var s in split.Where(s => string.IsNullOrWhiteSpace(s) == false)) - { - i++; - var str = s; - int? id = null; - var match = IdRegex.Match(str); - if (match.Success) - { - id = int.Parse(match.Groups[1].Value); - str = IdRegex.Replace(str, ""); - } - - idPresent ??= match.Success; - if (idPresent.Value != match.Success) - { - SnackbarController.SendSnackbar(GetLocalizationOrDefault("WrongFormatSomeIdsMissing")); - return; - } - - - - if (ProxyStorage.DefaultScheme.TryParse(str, out var proxy)) - { - if (id != null && proxies.Any(kvp => kvp.Key == id)) - { - SnackbarController.SendSnackbar(string.Format(GetLocalizationOrDefault("DuplicateId"), id)); - return; - } - proxies.Add(new KeyValuePair(id, proxy)); - } - else - { - SnackbarController.SendSnackbar(string.Format(GetLocalizationOrDefault("WrongFormatOnLine"), i)); - return; - } - } - - foreach (var kvp in proxies) - { - ProxyStorage.SetProxy(kvp.Key, kvp.Value); - } - } - else + var input = AddProxyField; + if (string.IsNullOrEmpty(input)) return; + + + var split = input + .Split(Environment.NewLine) + .Where(s => string.IsNullOrWhiteSpace(s) == false) + .ToArray(); + + if (split.Length == 0) return; + + bool? idPresent = null; + var proxies = new List>(); + var i = 0; + + + foreach (var s in split.Where(s => string.IsNullOrWhiteSpace(s) == false)) { + i++; + var str = s; int? id = null; - var input = AddProxyField; - if (IdRegex.IsMatch(AddProxyField)) + var idMatch = IdRegex.Match(str); + if (idMatch.Success) { - id = int.Parse(IdRegex.Match(AddProxyField).Groups[1].Value); - input = IdRegex.Replace(input, ""); + id = int.Parse(idMatch.Groups[1].Value); + str = IdRegex.Replace(str, ""); } - if (ProxyStorage.DefaultScheme.TryParse(input, out var data)) + idPresent ??= idMatch.Success; + if (idPresent.Value != idMatch.Success) { - ProxyStorage.SetProxy(id, data); + SnackbarController.SendSnackbar(GetLocalizationOrDefault("WrongFormatSomeIdsMissing")); + return; + } + + + + if (ProxyStorage.DefaultScheme.TryParse(str, out var proxy)) + { + if (id != null && proxies.Any(kvp => kvp.Key == id)) + { + SnackbarController.SendSnackbar(string.Format(GetLocalizationOrDefault("DuplicateId"), id)); + return; + } + proxies.Add(new KeyValuePair(id, proxy)); } else { - SnackbarController.SendSnackbar(GetLocalizationOrDefault("WrongFormat")); + if (split.Length == 1) + { + SnackbarController.SendSnackbar(GetLocalizationOrDefault("WrongFormat")); + return; + } + SnackbarController.SendSnackbar(string.Format(GetLocalizationOrDefault("WrongFormatOnLine"), i)); return; } } + + ProxyStorage.SetProxies(proxies); + ProxyStorage.OrderCollection(); AddProxyField = string.Empty; CheckIfDefaultProxyStay(); } + private void CheckIfDefaultProxyStay() { if (!DefaultProxy.HasValue || Proxies.Any(kvp => kvp.Equals(DefaultProxy.Value))) return; diff --git a/changelog/1.5.1.html b/changelog/1.5.1.html index 59e8eef..20ed85d 100644 --- a/changelog/1.5.1.html +++ b/changelog/1.5.1.html @@ -63,16 +63,18 @@ -
- -
-
Version 1.5.1
-
DATE
-
- - FIX: Fixed proxy problem when {id} was parsed as a part of password when using 'ip:port:username:password{id}' proxy format +
+ +
+
Version 1.5.1
+
DATE
+
+ - FIX: Fixed proxy error (407) when {id} was parsed as a part of password when using 'ip:port:username:password{id}' proxy format
+ - IMPROVEMENT: Now proxies always ordered by ID
+ - FIX: Small fix in the proxy comparison method (sometimes proxy red indicator was not shown) +
-
\ No newline at end of file