diff --git a/src/Applications/ConvAssistTerminate/Program.cs b/src/Applications/ConvAssistTerminate/Program.cs
index 0ba19cbd..88fb0ceb 100644
--- a/src/Applications/ConvAssistTerminate/Program.cs
+++ b/src/Applications/ConvAssistTerminate/Program.cs
@@ -187,7 +187,7 @@ private static void SendMessage()
{
Console.WriteLine("Sending Request to close ConvAssist");
ConvAssistMessage message = new ConvAssistMessage(WordPredictorMessageTypes.ForceQuitApp, WordPredictionModes.None, "NA");
- string jsonMessage = JsonSerializer.Serialize(message);
+ string jsonMessage = JsonSerializer.SerializeForInterop(message);
_pipeServer.Send(jsonMessage);
}
catch (Exception es)
diff --git a/src/Extensions/ACAT.Extensions.Onboarding/ACAT.Extensions.Onboarding.csproj b/src/Extensions/ACAT.Extensions.Onboarding/ACAT.Extensions.Onboarding.csproj
index 2e90d4c9..76bd1462 100644
--- a/src/Extensions/ACAT.Extensions.Onboarding/ACAT.Extensions.Onboarding.csproj
+++ b/src/Extensions/ACAT.Extensions.Onboarding/ACAT.Extensions.Onboarding.csproj
@@ -55,9 +55,7 @@
UserControlKeyboardConfigSelect.cs
-
- UserControl
-
+
UserControlLanguageSelect.cs
diff --git a/src/Extensions/Default/WordPredictors/ConvAssist/ConvAssistWordPredictor.cs b/src/Extensions/Default/WordPredictors/ConvAssist/ConvAssistWordPredictor.cs
index 7230a25e..c8d8427e 100644
--- a/src/Extensions/Default/WordPredictors/ConvAssist/ConvAssistWordPredictor.cs
+++ b/src/Extensions/Default/WordPredictors/ConvAssist/ConvAssistWordPredictor.cs
@@ -292,7 +292,7 @@ public string SendMessageConvAssistSentencePrediction(string text, WordPredictio
public string SendMessageConvAssistWordPrediction(string text, WordPredictionModes mode)
{
ConvAssistMessage message = new(WordPredictorMessageTypes.NextWordPredictionRequest, mode, text);
- string jsonMessage = JsonSerializer.Serialize(message);
+ string jsonMessage = JsonSerializer.SerializeForInterop(message);
//var answer = namedPipe.WriteSync(text, 150);
return namedPipe.WriteSync(jsonMessage, 10000);
}
diff --git a/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistMessage.cs b/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistMessage.cs
index 1ccaf53c..2ea28462 100644
--- a/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistMessage.cs
+++ b/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistMessage.cs
@@ -18,13 +18,17 @@ namespace ACAT.Extensions.WordPredictors.ConvAssist.MessageTypes
[Serializable]
internal class ConvAssistMessage
{
- public string Data { get; set; }
- public WordPredictorMessageTypes MessageType { get; set; }
- public WordPredictionModes PredictionType { get; set; }
+ public string Data { get; set; } = string.Empty;
+ public WordPredictorMessageTypes MessageType { get; set; } = WordPredictorMessageTypes.None;
+ public WordPredictionModes PredictionType { get; set; } = WordPredictionModes.None;
- // Parameterless constructor for deserialization
+ // Parameterless constructor for deserialization - explicitly initialize all properties
public ConvAssistMessage()
- { }
+ {
+ Data = string.Empty;
+ MessageType = WordPredictorMessageTypes.None;
+ PredictionType = WordPredictionModes.None;
+ }
// this is the JSON representation of the data
///
@@ -37,7 +41,7 @@ public ConvAssistMessage(WordPredictorMessageTypes msgType, WordPredictionModes
{
MessageType = msgType;
PredictionType = PredictionMode;
- Data = message;
+ Data = message ?? string.Empty;
}
}
}
\ No newline at end of file
diff --git a/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistSetParam.cs b/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistSetParam.cs
index f81ef6a5..03f34ead 100644
--- a/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistSetParam.cs
+++ b/src/Extensions/Default/WordPredictors/ConvAssist/MessageTypes/ConvAssistSetParam.cs
@@ -17,17 +17,20 @@ namespace ACAT.Extensions.WordPredictors.ConvAssist.MessageTypes
[Serializable]
internal class ConvAssistSetParam
{
- public ConvAssistParameterType Parameter { get; set; }
- public string Value { get; set; }
+ public ConvAssistParameterType Parameter { get; set; } = ConvAssistParameterType.None;
+ public string Value { get; set; } = string.Empty;
- // Parameterless constructor for deserialization
+ // Parameterless constructor for deserialization - explicitly initialize all properties
public ConvAssistSetParam()
- { }
+ {
+ Parameter = ConvAssistParameterType.None;
+ Value = string.Empty;
+ }
public ConvAssistSetParam(ConvAssistParameterType param, string value)
{
Parameter = param;
- Value = value;
+ Value = value ?? string.Empty;
}
public ConvAssistSetParam(ConvAssistParameterType param, int value)
diff --git a/src/Extensions/Default/WordPredictors/ConvAssist/NamedPipeServerConvAssist.cs b/src/Extensions/Default/WordPredictors/ConvAssist/NamedPipeServerConvAssist.cs
index 01198444..f8da32fa 100644
--- a/src/Extensions/Default/WordPredictors/ConvAssist/NamedPipeServerConvAssist.cs
+++ b/src/Extensions/Default/WordPredictors/ConvAssist/NamedPipeServerConvAssist.cs
@@ -223,14 +223,14 @@ public async Task SendParams()
List parameters = new()
{
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.EnableLog, Common.AppPreferences.EnableLogs.ToString())),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathLog, FileUtils.GetLogsDir())),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Suggestions, Common.AppPreferences.WordsSuggestions.ToString())),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.TestGeneralSentencePrediction, ConvAssistWordPredictor.settings.Test_GeneralSentencePrediction.ToString())),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.RetrieveACC, ConvAssistWordPredictor.settings.EnableSmallVocabularySentencePrediction.ToString())),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathStatic, staticPath)),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathPersonilized, personalizedPath)),
- JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Path, _pathToFiles))
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.EnableLog, Common.AppPreferences.EnableLogs.ToString())),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathLog, FileUtils.GetLogsDir())),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Suggestions, Common.AppPreferences.WordsSuggestions.ToString())),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.TestGeneralSentencePrediction, ConvAssistWordPredictor.settings.Test_GeneralSentencePrediction.ToString())),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.RetrieveACC, ConvAssistWordPredictor.settings.EnableSmallVocabularySentencePrediction.ToString())),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathStatic, staticPath)),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathPersonilized, personalizedPath)),
+ JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Path, _pathToFiles))
};
@@ -238,8 +238,10 @@ public async Task SendParams()
{
try
{
- var message = JsonSerializer.Serialize(new ConvAssistMessage(WordPredictorMessageTypes.SetParam, WordPredictionModes.None, param));
-
+ var message = JsonSerializer.SerializeForInterop(new ConvAssistMessage(WordPredictorMessageTypes.SetParam, WordPredictionModes.None, param));
+
+ _logger.LogDebug("Sending ConvAssist message: {Message}", message);
+
//TODO: Check result and handle appropriately.
_ = WriteAsync(message, waitDelay).ConfigureAwait(false).GetAwaiter().GetResult();
}
@@ -251,7 +253,7 @@ public async Task SendParams()
// ConvAssist needs some time to get ready. Send a message to check if it is ready
- string msg = JsonSerializer.Serialize(new ConvAssistMessage(WordPredictorMessageTypes.NextSentencePredictionRequest, WordPredictionModes.None, string.Empty));
+ string msg = JsonSerializer.SerializeForInterop(new ConvAssistMessage(WordPredictorMessageTypes.NextSentencePredictionRequest, WordPredictionModes.None, string.Empty));
bool clientReady = false;
var tcs = new TaskCompletionSource();
@@ -260,14 +262,35 @@ await Task.Run(async () =>
{
while (!clientReady)
{
- var result = WriteAsync(msg, waitDelay).ConfigureAwait(false).GetAwaiter().GetResult();
- var resultObject = JsonSerializer.Deserialize(result);
- if (resultObject != null && resultObject.MessageType != WordAndCharacterPredictionResponse.ConvAssistMessageTypes.NotReady)
+ try
{
- clientReady = true;
- tcs.SetResult(true);
- break;
+ var result = WriteAsync(msg, waitDelay).ConfigureAwait(false).GetAwaiter().GetResult();
+
+ // Check if we got a valid response
+ if (string.IsNullOrWhiteSpace(result))
+ {
+ _logger.LogDebug("No response from ConvAssist, retrying...");
+ await Task.Delay(waitDelay);
+ continue;
+ }
+
+ var resultObject = JsonSerializer.Deserialize(result);
+ if (resultObject != null && resultObject.MessageType != WordAndCharacterPredictionResponse.ConvAssistMessageTypes.NotReady)
+ {
+ clientReady = true;
+ tcs.SetResult(true);
+ break;
+ }
+ }
+ catch (System.Text.Json.JsonException jsonEx)
+ {
+ _logger.LogWarning(jsonEx, "Failed to deserialize ConvAssist response, retrying...");
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error checking ConvAssist ready state");
}
+
await Task.Delay(waitDelay);
}
});
@@ -456,7 +479,8 @@ public async Task WriteAsync(string value, int msDelay)
var writeTcs = new TaskCompletionSource