Sfoglia il codice sorgente

Handles error on request values.

BDisp 8 mesi fa
parent
commit
1ea9ae0b65

+ 8 - 3
Terminal.Gui/ConsoleDrivers/AnsiEscapeSequence/AnsiEscapeSequenceRequest.cs

@@ -53,9 +53,9 @@ public class AnsiEscapeSequenceRequest
     /// </summary>
     public required string Terminator { get; init; }
 
-    internal void RaiseResponseFromInput (string? response)
+    internal void RaiseResponseFromInput (string? response, AnsiEscapeSequenceRequest? request)
     {
-        ProcessResponse (response);
+        ProcessResponse (response, request);
 
         ResponseFromInput?.Invoke (this, AnsiEscapeSequenceResponse);
     }
@@ -69,7 +69,7 @@ public class AnsiEscapeSequenceRequest
     ///     Process the <see cref="AnsiEscapeSequenceResponse"/> of an ANSI escape sequence request.
     /// </summary>
     /// <param name="response">The response.</param>
-    private void ProcessResponse (string? response)
+    private void ProcessResponse (string? response, AnsiEscapeSequenceRequest? request)
     {
         var error = new StringBuilder ();
         var values = new string? [] { null };
@@ -108,6 +108,11 @@ public class AnsiEscapeSequenceRequest
             {
                 (string? _, string? _, values, string? _) = AnsiEscapeSequenceRequestUtils.GetEscapeResult (response?.ToCharArray ());
             }
+
+            if (request is { } && !string.IsNullOrEmpty (request.ExpectedResponseValue) && request.ExpectedResponseValue != values [0])
+            {
+                error.AppendLine ($"Error executing ANSI request:\nValue ends with '{values [0]}'\nand doesn't end with: '{ExpectedResponseValue! [^1]}'");
+            }
         }
 
         AnsiEscapeSequenceResponse = new ()

+ 2 - 2
Terminal.Gui/ConsoleDrivers/AnsiEscapeSequence/AnsiEscapeSequenceRequestUtils.cs

@@ -347,7 +347,7 @@ public static class AnsiEscapeSequenceRequestUtils
 
                     lock (seqReqStatus?.AnsiRequest._responseLock!)
                     {
-                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ckiString);
+                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ckiString, seqReqStatus.AnsiRequest);
                     }
 
                     return;
@@ -382,7 +382,7 @@ public static class AnsiEscapeSequenceRequestUtils
                         {
                             lock (result.AnsiRequest._responseLock)
                             {
-                                result.AnsiRequest.RaiseResponseFromInput (ToString (cki));
+                                result.AnsiRequest.RaiseResponseFromInput (ToString (cki), result.AnsiRequest);
                             }
                         }
                     }

+ 1 - 1
Terminal.Gui/ConsoleDrivers/CursesDriver/UnixMainLoop.cs

@@ -264,7 +264,7 @@ internal class UnixMainLoop (ConsoleDriver consoleDriver) : IMainLoopDriver
                             {
                                 AnsiEscapeSequenceRequests.Statuses.TryDequeue (out _);
 
-                                seqReqStatus.AnsiRequest.RaiseResponseFromInput (null);
+                                seqReqStatus.AnsiRequest.RaiseResponseFromInput (null, seqReqStatus.AnsiRequest);
                             }
                         }
 

+ 1 - 1
Terminal.Gui/ConsoleDrivers/NetDriver/NetEvents.cs

@@ -102,7 +102,7 @@ internal class NetEvents : IDisposable
                     {
                         AnsiEscapeSequenceRequests.Statuses.TryDequeue (out _);
 
-                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (null);
+                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (null, seqReqStatus.AnsiRequest);
                     }
                 }
 

+ 3 - 3
Terminal.Gui/ConsoleDrivers/WindowsDriver/WindowsConsole.cs

@@ -120,7 +120,7 @@ internal class WindowsConsole
                                     {
                                         readingSequence = false;
                                         raisedResponse = true;
-                                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ansiSequence.ToString ());
+                                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ansiSequence.ToString (), seqReqStatus.AnsiRequest);
                                         // Clear the terminator for not be enqueued
                                         inputRecord = default (InputRecord);
                                         // Clear numberEventsRead to not exit
@@ -145,7 +145,7 @@ internal class WindowsConsole
 
                     lock (seqReqStatus!.AnsiRequest._responseLock)
                     {
-                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ansiSequence.ToString ());
+                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ansiSequence.ToString (), seqReqStatus.AnsiRequest);
                         // Clear the terminator for not be enqueued
                         inputRecord = default (InputRecord);
                     }
@@ -162,7 +162,7 @@ internal class WindowsConsole
                             {
                                 AnsiEscapeSequenceRequests.Statuses.TryDequeue (out _);
 
-                                seqReqStatus.AnsiRequest.RaiseResponseFromInput (null);
+                                seqReqStatus.AnsiRequest.RaiseResponseFromInput (null, seqReqStatus.AnsiRequest);
                                 // Clear the terminator for not be enqueued
                                 inputRecord = default (InputRecord);
                             }