aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx/UI/Helpers/LoggerAdapter.cs
diff options
context:
space:
mode:
authorMary Guillemard <mary@mary.zone>2024-03-02 12:51:05 +0100
committerGitHub <noreply@github.com>2024-03-02 12:51:05 +0100
commitec6cb0abb4b7669895b6e96fd7581c93b5abd691 (patch)
tree128c862ff5faea0b219467656d4023bee7faefb5 /src/Ryujinx/UI/Helpers/LoggerAdapter.cs
parent53b5985da6b9d7b281d9fc25b93bfd1d1918a107 (diff)
infra: Make Avalonia the default UI (#6375)1.1.1216
* misc: Move Ryujinx project to Ryujinx.Gtk3 This breaks release CI for now but that's fine. Signed-off-by: Mary Guillemard <mary@mary.zone> * misc: Move Ryujinx.Ava project to Ryujinx This breaks CI for now, but it's fine. Signed-off-by: Mary Guillemard <mary@mary.zone> * infra: Make Avalonia the default UI Should fix CI after the previous changes. GTK3 isn't build by the release job anymore, only by PR CI. This also ensure that the test-ava update package is still generated to allow update from the old testing channel. Signed-off-by: Mary Guillemard <mary@mary.zone> * Fix missing copy in create_app_bundle.sh Signed-off-by: Mary Guillemard <mary@mary.zone> * Fix syntax error Signed-off-by: Mary Guillemard <mary@mary.zone> --------- Signed-off-by: Mary Guillemard <mary@mary.zone>
Diffstat (limited to 'src/Ryujinx/UI/Helpers/LoggerAdapter.cs')
-rw-r--r--src/Ryujinx/UI/Helpers/LoggerAdapter.cs102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs
new file mode 100644
index 00000000..fc714541
--- /dev/null
+++ b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs
@@ -0,0 +1,102 @@
+using Avalonia.Logging;
+using Avalonia.Utilities;
+using Ryujinx.Common.Logging;
+using System;
+using System.Text;
+
+namespace Ryujinx.Ava.UI.Helpers
+{
+ using AvaLogger = Avalonia.Logging.Logger;
+ using AvaLogLevel = LogEventLevel;
+ using RyuLogClass = LogClass;
+ using RyuLogger = Ryujinx.Common.Logging.Logger;
+
+ internal class LoggerAdapter : ILogSink
+ {
+ public static void Register()
+ {
+ AvaLogger.Sink = new LoggerAdapter();
+ }
+
+ private static RyuLogger.Log? GetLog(AvaLogLevel level)
+ {
+ return level switch
+ {
+ AvaLogLevel.Verbose => RyuLogger.Debug,
+ AvaLogLevel.Debug => RyuLogger.Debug,
+ AvaLogLevel.Information => RyuLogger.Debug,
+ AvaLogLevel.Warning => RyuLogger.Debug,
+ AvaLogLevel.Error => RyuLogger.Error,
+ AvaLogLevel.Fatal => RyuLogger.Error,
+ _ => throw new ArgumentOutOfRangeException(nameof(level), level, null),
+ };
+ }
+
+ public bool IsEnabled(AvaLogLevel level, string area)
+ {
+ return GetLog(level) != null;
+ }
+
+ public void Log(AvaLogLevel level, string area, object source, string messageTemplate)
+ {
+ GetLog(level)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, null));
+ }
+
+ public void Log(AvaLogLevel level, string area, object source, string messageTemplate, params object[] propertyValues)
+ {
+ GetLog(level)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, propertyValues));
+ }
+
+ private static string Format(AvaLogLevel level, string area, string template, object source, object[] v)
+ {
+ var result = new StringBuilder();
+ var r = new CharacterReader(template.AsSpan());
+ int i = 0;
+
+ result.Append('[');
+ result.Append(level);
+ result.Append("] ");
+
+ result.Append('[');
+ result.Append(area);
+ result.Append("] ");
+
+ while (!r.End)
+ {
+ var c = r.Take();
+
+ if (c != '{')
+ {
+ result.Append(c);
+ }
+ else
+ {
+ if (r.Peek != '{')
+ {
+ result.Append('\'');
+ result.Append(i < v.Length ? v[i++] : null);
+ result.Append('\'');
+ r.TakeUntil('}');
+ r.Take();
+ }
+ else
+ {
+ result.Append('{');
+ r.Take();
+ }
+ }
+ }
+
+ if (source != null)
+ {
+ result.Append(" (");
+ result.Append(source.GetType().Name);
+ result.Append(" #");
+ result.Append(source.GetHashCode());
+ result.Append(')');
+ }
+
+ return result.ToString();
+ }
+ }
+}