~ruther/NosTale-PacketLogger

676e5bb566fd796d9d023b1ccbdc751d8e0bb5c2 — Rutherther 2 years ago 39ccc8e
feat: add possibility to save and load settings to json
M src/PacketLogger/Models/Filters/FilterProfile.cs => src/PacketLogger/Models/Filters/FilterProfile.cs +2 -2
@@ 41,10 41,10 @@ public class FilterProfile : ObservableObject
    /// <summary>
    /// Gets or sets the receive filter entry.
    /// </summary>
    public FilterProfileEntry RecvFilterEntry { get; }
    public FilterProfileEntry RecvFilterEntry { get; set; }

    /// <summary>
    /// Gets or sets the send filter entry.
    /// </summary>
    public FilterProfileEntry SendFilterEntry { get; }
    public FilterProfileEntry SendFilterEntry { get; set; }
}
\ No newline at end of file

M src/PacketLogger/Models/Filters/FilterProfileEntry.cs => src/PacketLogger/Models/Filters/FilterProfileEntry.cs +1 -1
@@ 36,5 36,5 @@ public class FilterProfileEntry : ObservableObject
    /// <summary>
    /// Gets or sets the filters list.
    /// </summary>
    public ObservableCollection<FilterCreator.FilterData> Filters { get; }
    public ObservableCollection<FilterCreator.FilterData> Filters { get; set; }
}
\ No newline at end of file

M src/PacketLogger/Models/Filters/FilterProfiles.cs => src/PacketLogger/Models/Filters/FilterProfiles.cs +27 -9
@@ 5,6 5,7 @@
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive.Linq;

namespace PacketLogger.Models.Filters;


@@ 14,6 15,7 @@ namespace PacketLogger.Models.Filters;
/// </summary>
public class FilterProfiles
{
    private ObservableCollection<FilterProfile> _allProfiles;
    private bool _defaultFilterEnabled;

    /// <summary>


@@ 26,15 28,18 @@ public class FilterProfiles
            Name = "Default"
        };

        AllProfiles = new ObservableCollection<FilterProfile>();
        _allProfiles = new ObservableCollection<FilterProfile>();
        SelectableProfiles = new ObservableCollection<FilterProfile>();

        SelectableProfiles.Add(NoProfile = new FilterProfile(false)
        {
            Name = "No profile"
        });
        SelectableProfiles.Add
        (
            NoProfile = new FilterProfile(false)
            {
                Name = "No profile"
            }
        );

        AllProfiles.Add(DefaultProfile);
        _allProfiles.Add(DefaultProfile);
    }

    /// <summary>


@@ 61,7 66,7 @@ public class FilterProfiles
    /// <summary>
    /// Gets or sets the default filter.
    /// </summary>
    public FilterProfile DefaultProfile { get; }
    public FilterProfile DefaultProfile { get; private set; }

    /// <summary>
    /// Gets or sets the collection of profiles.


@@ 71,12 76,25 @@ public class FilterProfiles
    /// <summary>
    /// Gets or sets the collection of profiles.
    /// </summary>
    public ObservableCollection<FilterProfile> AllProfiles { get; }
    public ObservableCollection<FilterProfile> AllProfiles
    {
        get => _allProfiles;
        set
        {
            if (value.Count < 1)
            {
                return;
            }

            DefaultProfile = value.First();
            _allProfiles = value;
        }
    }

    /// <summary>
    /// Gets or sets the profile used as no profile.
    /// </summary>
    public FilterProfile NoProfile { get; set; }
    public FilterProfile NoProfile { get; private set; }

    /// <summary>
    /// Add the given profile.

M src/PacketLogger/PacketLogger.csproj => src/PacketLogger/PacketLogger.csproj +1 -0
@@ 42,6 42,7 @@
      <PrivateAssets>All</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Remora.Results" Version="7.2.3" />
    <PackageReference Include="System.Text.Json" Version="7.0.1" />
    <PackageReference Include="XamlNameReferenceGenerator" Version="1.5.1" />
  </ItemGroup>


M src/PacketLogger/ViewModels/MainWindowViewModel.cs => src/PacketLogger/ViewModels/MainWindowViewModel.cs +28 -1
@@ 14,6 14,7 @@ using System.Reactive;
using System.Reactive.Concurrency;
using System.Reactive.Linq;
using System.Reflection;
using System.Text.Json;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;


@@ 45,9 46,21 @@ public class MainWindowViewModel : ViewModelBase
    /// </summary>
    public MainWindowViewModel()
    {
        var filterProfiles = new FilterProfiles();
        if (Path.Exists("settings.json"))
        {
            using var file = File.OpenRead("settings.json");
            var deserialized = JsonSerializer.Deserialize<FilterProfiles>(file);

            if (deserialized is not null)
            {
                filterProfiles = deserialized;
            }
        }

        var services = new ServiceCollection()
            .AddLogging(b => b.ClearProviders().AddConsole())
            .AddSingleton<FilterProfiles>()
            .AddSingleton<FilterProfiles>(_ => filterProfiles)
            .AddSingleton<DockFactory>()
            .AddSingleton<NostaleProcesses>()
            .AddSingleton<ObservableCollection<IPacketProvider>>(_ => Providers)


@@ 165,6 178,15 @@ public class MainWindowViewModel : ViewModelBase
            }
        );

        SaveSettings = ReactiveCommand.CreateFromTask
        (
            async () =>
            {
                using var file = File.Open("settings.json", FileMode.Create);
                await JsonSerializer.SerializeAsync(file, filterProfiles);
            }
        );

        OpenFile = ReactiveCommand.Create
            (() => _factory.CreateLoadedDocument(doc => doc.OpenFile.Execute(Unit.Default)));



@@ 246,4 268,9 @@ public class MainWindowViewModel : ViewModelBase
    /// Gets the command used for opening settings.
    /// </summary>
    public ReactiveCommand<Unit, Unit> OpenSettings { get; }

    /// <summary>
    /// Gets the command used for saving settings.
    /// </summary>
    public ReactiveCommand<Unit, Unit> SaveSettings { get; }
}
\ No newline at end of file

M src/PacketLogger/Views/MainWindow.axaml => src/PacketLogger/Views/MainWindow.axaml +1 -0
@@ 41,6 41,7 @@
                <MenuItem Header="Save All As..." Command="{Binding SaveAll}" />
                <Separator />
                <MenuItem Header="Open Settings" Command="{Binding OpenSettings}" />
                <MenuItem Header="Save Settings" Command="{Binding SaveSettings}" />
                <MenuItem Header="Exit" Command="{Binding QuitApplication}" />
            </MenuItem>
            <MenuItem Header="_Tools">

Do not follow this link