Files
Nebula-Auth/NebulaAuth/ViewModel/MainVM_Groups.cs
T
Давид Чернопятов a9fdb58cac The most significant changes in the code include the addition of a new HTML file changelog\1.4.8.html to the project NebulaAuth.sln, which displays the changelog for version 1.4.8 of the software. A new converter ProxyDataTextConverter was added to App.xaml and a new class ProxyDataTextConverter was added in ProxyTextConverter.cs. The ProxyTextConverter was also modified to include the port number in the return string.
Several methods were added and modified in `Storage.cs`, `MainVM_Groups.cs`, `MainVM_Proxy.cs`, and `ProxyManagerVM.cs` to validate if the data can be saved before performing various operations. The `SnackbarController.cs` was modified to increase the minimum snackbar time and adjust the duration calculation.

In `MafileSerializer_SessionData.cs`, the check for whether the refresh token is expired or not was moved to a different location within the code. New localization entries were added in `localization.loc.json`.

The changes are as follows:

1. Added a new HTML file `changelog\1.4.8.html` to the project `NebulaAuth.sln`.
2. Added a new converter `ProxyDataTextConverter` to `App.xaml`.
3. Imported `AchiesUtilities.Web.Proxy` in `ProxyTextConverter.cs`.
4. Modified the return string in `ProxyTextConverter` to include the port number.
5. Added a new class `ProxyDataTextConverter` in `ProxyTextConverter.cs`.
6. Increased the minimum snackbar time from 1000 to 1200 in `SnackbarController.cs`.
7. Modified the duration calculation in `GetSnackbarTime` method in `SnackbarController.cs`.
8. Added tooltips to ComboBoxes in `MainWindow.xaml`.
9. Added a new method `ValidateCanSave` in `Storage.cs` to validate if the data can be saved.
10. Added a new method `GetProxyString` in `ProxyStorage.cs` to get the proxy string.
11. Modified the `CompareProxy` method in `ProxyStorage.cs` to compare the address and port of the proxy data.
12. Removed a logger info line in `Shell.cs`.
13. Added a new property `DuplicateFound` in `Storage.cs`.
14. Modified the `CreatePathForMafile` method in `Storage.cs` to create a file name based on the account name or steam id.
15. Modified the `AddGroup` method in `MainVM_Groups.cs` to validate if the data can be saved before adding a group.
16. Modified the `AddToGroup` method in `MainVM_Groups.cs` to validate if the data can be saved before adding to a group.
17. Modified the `RemoveGroup` method in `MainVM_Groups.cs` to validate if the data can be saved before removing a group.
18. Modified the `PerformQuery` method in `MainVM_Groups.cs` to set `SelectedMafile` to the first item in `MaFiles`.
19. Modified the `RemoveProxy` method in `MainVM_Proxy.cs` to validate if the data can be saved before removing a proxy.
20. Modified the `SelectedProxyChanged` method in `MainVM_Proxy.cs` to validate if the data can be saved before changing the selected proxy.
21. Added a new method `ValidateCanSaveAndWarn` in `MainVM_Proxy.cs` to validate if the data can be saved and send a snackbar message if it can't.
22. Modified the `TimerCheckSeconds` property in `MainVM_Timer.cs` to send a snackbar message when the timer is changed.
23. Added a new method `RemoveProxy` in `LoginAgainOnImportVM.cs` to remove the selected proxy.
24. Modified the `AddProxy` method in `ProxyManagerVM.cs` to use the `DefaultScheme` to parse the proxy data.
25. Modified the `AddProxy` method in `ProxyManagerVM.cs` to use the `DefaultScheme` to parse the proxy data and get the proxy string.
26. Modified the `CopyProxy` method in `ProxyManagerVM.cs` to get the proxy string.
27. Added new localization entries in `localization.loc.json`.
28. The `update.xml` file was updated to reflect the new version of the software (1.4.8.0) and the corresponding download URL and changelog URL were updated accordingly.
29. In `AdmissionHelper.cs`, a new constant `SESSION_ID_COOKIE_NAME` was added to replace hardcoded "sessionid" strings. The same was done for `LANGUAGE_COOKIE_NAME` replacing "Steam_Language". This change was reflected in multiple methods within the `AdmissionHelper` class.
30. A new method `CloneCookie` was added to `AdmissionHelper.cs` to create a copy of a given cookie. This method was then used to replace repetitive code in the `TransferCommunityCookies` method.
31. In `MafileSerializer_SessionData.cs`, the check for whether the refresh token is expired or not was moved to a different location within the code. This change does not affect the functionality but may improve readability or maintainability of the code.
2024-04-10 01:39:42 +03:00

153 lines
3.9 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using NebulaAuth.Model;
using NebulaAuth.Model.Entities;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
namespace NebulaAuth.ViewModel;
public partial class MainVM //Groups
{
[ObservableProperty]
private ObservableCollection<string> _groups = new();
public string? SelectedGroup
{
get => _selectedGroup;
set
{
if (SetProperty(ref _selectedGroup, value))
PerformQuery();
}
}
private string? _selectedGroup;
public string SearchText
{
get => _searchText;
set
{
if(SetProperty(ref _searchText, value))
PerformQuery();
}
}
private string _searchText = string.Empty;
[RelayCommand]
private void AddGroup(string? value)
{
var mafile = SelectedMafile;
if (mafile == null) return;
if (string.IsNullOrEmpty(value)) return;
if (!ValidateCanSaveAndWarn(mafile)) return;
mafile.Group = value;
Storage.UpdateMafile(mafile);
QueryGroups();
SelectedGroup = value;
OnPropertyChanged(nameof(SelectedMafile)); //For bindings
}
[RelayCommand]
private void AddToGroup(object[]? value)
{
if (value == null) return;
if (value.Length < 2) return;
var group = (string?)value[0];
var mafile = (Mafile?)value[1];
if (group == null || mafile == null) return;
if (!ValidateCanSaveAndWarn(mafile)) return;
mafile.Group = group;
Storage.UpdateMafile(mafile);
QueryGroups();
PerformQuery();
OnPropertyChanged(nameof(SelectedMafile));
}
[RelayCommand]
private void RemoveGroup(Mafile? mafile)
{
if (mafile?.Group == null) return;
if (!ValidateCanSaveAndWarn(mafile)) return;
var mafGroup = mafile.Group;
mafile.Group = null;
Storage.UpdateMafile(mafile);
OnPropertyChanged(nameof(SelectedMafile)); //For bindings
QueryGroups();
if (Groups.All(g => g.Equals(mafGroup) == false))
{
SelectedGroup = null;
}
PerformQuery();
}
private void QueryGroups()
{
var groups = Storage.MaFiles
.Where(m => string.IsNullOrWhiteSpace(m.Group) == false)
.Select(m => m.Group)
.Distinct()
.Order()
.ToList();
Groups = new ObservableCollection<string>(groups!);
}
private void PerformQuery()
{
if (string.IsNullOrWhiteSpace(SelectedGroup) && string.IsNullOrWhiteSpace(SearchText))
{
MaFiles = Storage.MaFiles;
return;
}
long? searchSteamId = null;
if (long.TryParse(SearchText, out var steamId))
{
searchSteamId = steamId;
}
var query = Storage.MaFiles.AsEnumerable();
if (!string.IsNullOrWhiteSpace(SearchText))
{
query = query.Where(SearchPredicate);
}
if (!string.IsNullOrWhiteSpace(SelectedGroup))
{
query = query.Where(m => m.Group != null && m.Group.Equals(SelectedGroup));
}
var perform = query.ToList();
MaFiles = new ObservableCollection<Mafile>(perform);
SelectedMafile = MaFiles.FirstOrDefault();
return;
bool SearchPredicate(Mafile mafile)
{
if (!mafile.AccountName.Contains(SearchText, StringComparison.CurrentCultureIgnoreCase))
{
return mafile.SessionData != null && mafile.SessionData.SteamId.Steam64.Id.Equals(searchSteamId);
}
return true;
}
}
private void ResetQuery()
{
_selectedGroup = null;
_searchText = string.Empty;
PerformQuery();
}
}