Migrate Logging to SettingsLoggingViewModel

This commit is contained in:
Isaac Marovitz 2024-04-19 14:04:01 -04:00
parent 388597b4e6
commit 7e19054de1
No known key found for this signature in database
GPG key ID: 97250B2B09A132E1
5 changed files with 204 additions and 151 deletions

View file

@ -0,0 +1,183 @@
using Ryujinx.Common.Configuration;
using Ryujinx.UI.Common.Configuration;
using System;
namespace Ryujinx.Ava.UI.ViewModels.Settings
{
public class SettingsLoggingViewModel : BaseModel
{
public event Action DirtyEvent;
private bool _enableFileLog;
public bool EnableFileLog
{
get => _enableFileLog;
set
{
_enableFileLog = value;
DirtyEvent?.Invoke();
}
}
private bool _enableStub;
public bool EnableStub
{
get => _enableStub;
set
{
_enableStub = value;
DirtyEvent?.Invoke();
}
}
private bool _enableInfo;
public bool EnableInfo
{
get => _enableInfo;
set
{
_enableInfo = value;
DirtyEvent?.Invoke();
}
}
private bool _enableWarn;
public bool EnableWarn
{
get => _enableWarn;
set
{
_enableWarn = value;
DirtyEvent?.Invoke();
}
}
private bool _enableError;
public bool EnableError
{
get => _enableError;
set
{
_enableError = value;
DirtyEvent?.Invoke();
}
}
private bool _enableTrace;
public bool EnableTrace
{
get => _enableTrace;
set
{
_enableTrace = value;
DirtyEvent?.Invoke();
}
}
private bool _enableGuest;
public bool EnableGuest
{
get => _enableGuest;
set
{
_enableGuest = value;
DirtyEvent?.Invoke();
}
}
private bool _enableFsAccessLog;
public bool EnableFsAccessLog
{
get => _enableFsAccessLog;
set
{
_enableFsAccessLog = value;
DirtyEvent?.Invoke();
}
}
private bool _enableDebug;
public bool EnableDebug
{
get => _enableDebug;
set
{
_enableDebug = value;
DirtyEvent?.Invoke();
}
}
private int _fsGlobalAccessLogMode;
public int FsGlobalAccessLogMode
{
get => _fsGlobalAccessLogMode;
set
{
_fsGlobalAccessLogMode = value;
DirtyEvent?.Invoke();
}
}
private int _openglDebugLevel;
public int OpenglDebugLevel
{
get => _openglDebugLevel;
set
{
_openglDebugLevel = value;
DirtyEvent?.Invoke();
}
}
public SettingsLoggingViewModel()
{
ConfigurationState config = ConfigurationState.Instance;
EnableFileLog = config.Logger.EnableFileLog;
EnableStub = config.Logger.EnableStub;
EnableInfo = config.Logger.EnableInfo;
EnableWarn = config.Logger.EnableWarn;
EnableError = config.Logger.EnableError;
EnableTrace = config.Logger.EnableTrace;
EnableGuest = config.Logger.EnableGuest;
EnableDebug = config.Logger.EnableDebug;
EnableFsAccessLog = config.Logger.EnableFsAccessLog;
FsGlobalAccessLogMode = config.System.FsGlobalAccessLogMode;
OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value;
}
public bool CheckIfModified(ConfigurationState config)
{
bool isDirty = false;
isDirty |= config.Logger.EnableFileLog.Value != EnableFileLog;
isDirty |= config.Logger.EnableStub.Value != EnableStub;
isDirty |= config.Logger.EnableInfo.Value != EnableInfo;
isDirty |= config.Logger.EnableWarn.Value != EnableWarn;
isDirty |= config.Logger.EnableError.Value != EnableError;
isDirty |= config.Logger.EnableTrace.Value != EnableTrace;
isDirty |= config.Logger.EnableGuest.Value != EnableGuest;
isDirty |= config.Logger.EnableDebug.Value != EnableDebug;
isDirty |= config.Logger.EnableFsAccessLog.Value != EnableFsAccessLog;
isDirty |= config.System.FsGlobalAccessLogMode.Value != FsGlobalAccessLogMode;
isDirty |= config.Logger.GraphicsDebugLevel.Value != (GraphicsDebugLevel)OpenglDebugLevel;
return isDirty;
}
public void Save(ConfigurationState config)
{
config.Logger.EnableFileLog.Value = EnableFileLog;
config.Logger.EnableStub.Value = EnableStub;
config.Logger.EnableInfo.Value = EnableInfo;
config.Logger.EnableWarn.Value = EnableWarn;
config.Logger.EnableError.Value = EnableError;
config.Logger.EnableTrace.Value = EnableTrace;
config.Logger.EnableGuest.Value = EnableGuest;
config.Logger.EnableDebug.Value = EnableDebug;
config.Logger.EnableFsAccessLog.Value = EnableFsAccessLog;
config.System.FsGlobalAccessLogMode.Value = FsGlobalAccessLogMode;
config.Logger.GraphicsDebugLevel.Value = (GraphicsDebugLevel)OpenglDebugLevel;
}
}
}

View file

@ -2,9 +2,6 @@ using Avalonia.Collections;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Threading; using Avalonia.Threading;
using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem;
using Ryujinx.Audio.Backends.OpenAL;
using Ryujinx.Audio.Backends.SDL2;
using Ryujinx.Audio.Backends.SoundIo;
using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Models.Input;
@ -12,7 +9,6 @@ using Ryujinx.Ava.UI.Windows;
using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration;
using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.GraphicsDriver;
using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Time.TimeZone; using Ryujinx.HLE.HOS.Services.Time.TimeZone;
@ -297,105 +293,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
public bool ColorSpacePassthroughAvailable => IsMacOS; public bool ColorSpacePassthroughAvailable => IsMacOS;
private bool _enableFileLog;
public bool EnableFileLog
{
get => _enableFileLog;
set
{
_enableFileLog = value;
CheckIfModified();
}
}
private bool _enableStub;
public bool EnableStub
{
get => _enableStub;
set
{
_enableStub = value;
CheckIfModified();
}
}
private bool _enableInfo;
public bool EnableInfo
{
get => _enableInfo;
set
{
_enableInfo = value;
CheckIfModified();
}
}
private bool _enableWarn;
public bool EnableWarn
{
get => _enableWarn;
set
{
_enableWarn = value;
CheckIfModified();
}
}
private bool _enableError;
public bool EnableError
{
get => _enableError;
set
{
_enableError = value;
CheckIfModified();
}
}
private bool _enableTrace;
public bool EnableTrace
{
get => _enableTrace;
set
{
_enableTrace = value;
CheckIfModified();
}
}
private bool _enableGuest;
public bool EnableGuest
{
get => _enableGuest;
set
{
_enableGuest = value;
CheckIfModified();
}
}
private bool _enableFsAccessLog;
public bool EnableFsAccessLog
{
get => _enableFsAccessLog;
set
{
_enableFsAccessLog = value;
CheckIfModified();
}
}
private bool _enableDebug;
public bool EnableDebug
{
get => _enableDebug;
set
{
_enableDebug = value;
CheckIfModified();
}
}
public bool IsCustomResolutionScaleActive => _resolutionScale == 4; public bool IsCustomResolutionScaleActive => _resolutionScale == 4;
public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr; public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr;
@ -407,7 +304,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
public int Language { get; set; } public int Language { get; set; }
public int Region { get; set; } public int Region { get; set; }
public int FsGlobalAccessLogMode { get; set; }
public int MaxAnisotropy { get; set; } public int MaxAnisotropy { get; set; }
public int AspectRatio { get; set; } public int AspectRatio { get; set; }
public int AntiAliasingEffect { get; set; } public int AntiAliasingEffect { get; set; }
@ -422,7 +318,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
OnPropertyChanged(nameof(ScalingFilterLevelText)); OnPropertyChanged(nameof(ScalingFilterLevelText));
} }
} }
public int OpenglDebugLevel { get; set; }
public int MemoryMode { get; set; } public int MemoryMode { get; set; }
public int BaseStyleIndex { get; set; } public int BaseStyleIndex { get; set; }
public int GraphicsBackendIndex public int GraphicsBackendIndex
@ -449,6 +344,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
public int PreferredGpuIndex { get; set; } public int PreferredGpuIndex { get; set; }
private readonly SettingsAudioViewModel _audioViewModel; private readonly SettingsAudioViewModel _audioViewModel;
private readonly SettingsLoggingViewModel _loggingViewModel;
public DateTimeOffset CurrentDate { get; set; } public DateTimeOffset CurrentDate { get; set; }
public TimeSpan CurrentTime { get; set; } public TimeSpan CurrentTime { get; set; }
@ -487,13 +383,17 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
public SettingsViewModel( public SettingsViewModel(
VirtualFileSystem virtualFileSystem, VirtualFileSystem virtualFileSystem,
ContentManager contentManager, ContentManager contentManager,
SettingsAudioViewModel audioViewModel) : this() SettingsAudioViewModel audioViewModel,
SettingsLoggingViewModel loggingViewModel) : this()
{ {
_virtualFileSystem = virtualFileSystem; _virtualFileSystem = virtualFileSystem;
_contentManager = contentManager; _contentManager = contentManager;
_audioViewModel = audioViewModel; _audioViewModel = audioViewModel;
_loggingViewModel = loggingViewModel;
_audioViewModel.DirtyEvent += CheckIfModified; _audioViewModel.DirtyEvent += CheckIfModified;
_loggingViewModel.DirtyEvent += CheckIfModified;
if (Program.PreviewerDetached) if (Program.PreviewerDetached)
{ {
@ -586,18 +486,10 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
// Network // Network
isDirty |= config.System.EnableInternetAccess.Value != EnableInternetAccess; isDirty |= config.System.EnableInternetAccess.Value != EnableInternetAccess;
// Logging if (_loggingViewModel != null)
isDirty |= config.Logger.EnableFileLog.Value != EnableFileLog; {
isDirty |= config.Logger.EnableStub.Value != EnableStub; isDirty |= _loggingViewModel.CheckIfModified(config);
isDirty |= config.Logger.EnableInfo.Value != EnableInfo; }
isDirty |= config.Logger.EnableWarn.Value != EnableWarn;
isDirty |= config.Logger.EnableError.Value != EnableError;
isDirty |= config.Logger.EnableTrace.Value != EnableTrace;
isDirty |= config.Logger.EnableGuest.Value != EnableGuest;
isDirty |= config.Logger.EnableDebug.Value != EnableDebug;
isDirty |= config.Logger.EnableFsAccessLog.Value != EnableFsAccessLog;
isDirty |= config.System.FsGlobalAccessLogMode.Value != FsGlobalAccessLogMode;
isDirty |= config.Logger.GraphicsDebugLevel.Value != (GraphicsDebugLevel)OpenglDebugLevel;
isDirty |= config.Multiplayer.LanInterfaceId.Value != _networkInterfaces[NetworkInterfaceList[NetworkInterfaceIndex]]; isDirty |= config.Multiplayer.LanInterfaceId.Value != _networkInterfaces[NetworkInterfaceList[NetworkInterfaceIndex]];
isDirty |= config.Multiplayer.Mode.Value != (MultiplayerMode)MultiplayerModeIndex; isDirty |= config.Multiplayer.Mode.Value != (MultiplayerMode)MultiplayerModeIndex;
@ -748,19 +640,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
EnableInternetAccess = config.System.EnableInternetAccess; EnableInternetAccess = config.System.EnableInternetAccess;
// LAN interface index is loaded asynchronously in PopulateNetworkInterfaces() // LAN interface index is loaded asynchronously in PopulateNetworkInterfaces()
// Logging
EnableFileLog = config.Logger.EnableFileLog;
EnableStub = config.Logger.EnableStub;
EnableInfo = config.Logger.EnableInfo;
EnableWarn = config.Logger.EnableWarn;
EnableError = config.Logger.EnableError;
EnableTrace = config.Logger.EnableTrace;
EnableGuest = config.Logger.EnableGuest;
EnableDebug = config.Logger.EnableDebug;
EnableFsAccessLog = config.Logger.EnableFsAccessLog;
FsGlobalAccessLogMode = config.System.FsGlobalAccessLogMode;
OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value;
MultiplayerModeIndex = (int)config.Multiplayer.Mode.Value; MultiplayerModeIndex = (int)config.Multiplayer.Mode.Value;
} }
@ -828,26 +707,12 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
config.Graphics.BackendThreading.Value = (BackendThreading)GraphicsBackendMultithreadingIndex; config.Graphics.BackendThreading.Value = (BackendThreading)GraphicsBackendMultithreadingIndex;
config.Graphics.ShadersDumpPath.Value = ShaderDumpPath; config.Graphics.ShadersDumpPath.Value = ShaderDumpPath;
if (_audioViewModel != null) _audioViewModel?.Save(config);
{
_audioViewModel.Save(config);
}
// Network // Network
config.System.EnableInternetAccess.Value = EnableInternetAccess; config.System.EnableInternetAccess.Value = EnableInternetAccess;
// Logging _loggingViewModel?.Save(config);
config.Logger.EnableFileLog.Value = EnableFileLog;
config.Logger.EnableStub.Value = EnableStub;
config.Logger.EnableInfo.Value = EnableInfo;
config.Logger.EnableWarn.Value = EnableWarn;
config.Logger.EnableError.Value = EnableError;
config.Logger.EnableTrace.Value = EnableTrace;
config.Logger.EnableGuest.Value = EnableGuest;
config.Logger.EnableDebug.Value = EnableDebug;
config.Logger.EnableFsAccessLog.Value = EnableFsAccessLog;
config.System.FsGlobalAccessLogMode.Value = FsGlobalAccessLogMode;
config.Logger.GraphicsDebugLevel.Value = (GraphicsDebugLevel)OpenglDebugLevel;
config.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[NetworkInterfaceIndex]]; config.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[NetworkInterfaceIndex]];
config.Multiplayer.Mode.Value = (MultiplayerMode)MultiplayerModeIndex; config.Multiplayer.Mode.Value = (MultiplayerMode)MultiplayerModeIndex;

View file

@ -8,9 +8,9 @@
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale" xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels.Settings" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels.Settings"
mc:Ignorable="d" mc:Ignorable="d"
x:DataType="viewModels:SettingsViewModel"> x:DataType="viewModels:SettingsLoggingViewModel">
<Design.DataContext> <Design.DataContext>
<viewModels:SettingsViewModel /> <viewModels:SettingsLoggingViewModel />
</Design.DataContext> </Design.DataContext>
<ScrollViewer <ScrollViewer
Name="LoggingPage" Name="LoggingPage"

View file

@ -1,11 +1,15 @@
using Avalonia.Controls; using Avalonia.Controls;
using Ryujinx.Ava.UI.ViewModels.Settings;
namespace Ryujinx.Ava.UI.Views.Settings namespace Ryujinx.Ava.UI.Views.Settings
{ {
public partial class SettingsLoggingView : UserControl public partial class SettingsLoggingView : UserControl
{ {
public SettingsLoggingViewModel ViewModel;
public SettingsLoggingView() public SettingsLoggingView()
{ {
DataContext = ViewModel = new SettingsLoggingViewModel();
InitializeComponent(); InitializeComponent();
} }
} }

View file

@ -30,11 +30,13 @@ namespace Ryujinx.Ava.UI.Windows
Title = $"{LocaleManager.Instance[LocaleKeys.Settings]}"; Title = $"{LocaleManager.Instance[LocaleKeys.Settings]}";
AudioPage = new SettingsAudioView(); AudioPage = new SettingsAudioView();
LoggingPage = new SettingsLoggingView();
ViewModel = new SettingsViewModel( ViewModel = new SettingsViewModel(
virtualFileSystem, virtualFileSystem,
contentManager, contentManager,
AudioPage.ViewModel); AudioPage.ViewModel,
LoggingPage.ViewModel);
UiPage = new SettingsUiView(ViewModel); UiPage = new SettingsUiView(ViewModel);
InputPage = new SettingsInputView(ViewModel); InputPage = new SettingsInputView(ViewModel);
@ -43,7 +45,6 @@ namespace Ryujinx.Ava.UI.Windows
CpuPage = new SettingsCPUView(); CpuPage = new SettingsCPUView();
GraphicsPage = new SettingsGraphicsView(); GraphicsPage = new SettingsGraphicsView();
NetworkPage = new SettingsNetworkView(); NetworkPage = new SettingsNetworkView();
LoggingPage = new SettingsLoggingView();
DataContext = ViewModel; DataContext = ViewModel;