Browse Source

Replace ExecuteAnsiRequest with TryParse.

BDisp 10 months ago
parent
commit
8050202db8

+ 5 - 2
Terminal.Gui/ConsoleDrivers/AnsiEscapeSequence/AnsiEscapeSequenceRequest.cs

@@ -12,8 +12,9 @@ public class AnsiEscapeSequenceRequest
     ///     Execute an ANSI escape sequence escape which may return a response or error.
     /// </summary>
     /// <param name="ansiRequest">The ANSI escape sequence to request.</param>
+    /// <param name="result">When this method returns <see langword="true"/>, an object containing the response with an empty error.</param>
     /// <returns>A <see cref="AnsiEscapeSequenceResponse"/> with the response, error, terminator and value.</returns>
-    public static AnsiEscapeSequenceResponse ExecuteAnsiRequest (AnsiEscapeSequenceRequest ansiRequest)
+    public static bool TryParse (AnsiEscapeSequenceRequest ansiRequest, out AnsiEscapeSequenceResponse result)
     {
         var response = new StringBuilder ();
         var error = new StringBuilder ();
@@ -137,7 +138,9 @@ public class AnsiEscapeSequenceRequest
         // Invoke the event if it's subscribed
         ansiRequest.ResponseReceived?.Invoke (ansiRequest, ansiResponse);
 
-        return ansiResponse;
+        result = ansiResponse;
+
+        return string.IsNullOrWhiteSpace (result.Error) && !string.IsNullOrWhiteSpace (result.Response);
     }
 
     /// <summary>

+ 19 - 3
UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs

@@ -86,6 +86,10 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
         appWindow.Add (label, tvTerminator);
 
         var btnResponse = new Button { X = Pos.Center (), Y = Pos.Bottom (tvResponse) + 2, Text = "Send Request" };
+
+        var lblSuccess = new Label { X = Pos.Center (), Y = Pos.Bottom (btnResponse) + 1 };
+        appWindow.Add (lblSuccess);
+
         btnResponse.Accept += (s, e) =>
                               {
                                   var ansiEscapeSequenceRequest = new AnsiEscapeSequenceRequest
@@ -95,18 +99,30 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
                                       Value = string.IsNullOrEmpty (tfValue.Text) ? null : tfValue.Text
                                   };
 
-                                  var ansiEscapeSequenceResponse = AnsiEscapeSequenceRequest.ExecuteAnsiRequest (
-                                       ansiEscapeSequenceRequest
+                                  var success = AnsiEscapeSequenceRequest.TryParse (
+                                       ansiEscapeSequenceRequest,
+                                       out AnsiEscapeSequenceResponse ansiEscapeSequenceResponse
                                       );
 
                                   tvResponse.Text = ansiEscapeSequenceResponse.Response;
                                   tvError.Text = ansiEscapeSequenceResponse.Error;
                                   tvValue.Text = ansiEscapeSequenceResponse.Value ?? "";
                                   tvTerminator.Text = ansiEscapeSequenceResponse.Terminator;
+
+                                  if (success)
+                                  {
+                                      lblSuccess.ColorScheme = Colors.ColorSchemes ["Base"];
+                                      lblSuccess.Text = "Successful";
+                                  }
+                                  else
+                                  {
+                                      lblSuccess.ColorScheme = Colors.ColorSchemes ["Error"];
+                                      lblSuccess.Text = "Error";
+                                  }
                               };
         appWindow.Add (btnResponse);
 
-        appWindow.Add (new Label { Y = Pos.Bottom (btnResponse) + 2, Text = "You can send other requests by editing the TextFields." });
+        appWindow.Add (new Label { Y = Pos.Bottom (lblSuccess) + 2, Text = "You can send other requests by editing the TextFields." });
 
         // Run - Start the application.
         Application.Run (appWindow);