Refactor configuration handling in UnityMcpEditorWindow to streamline JSON serialization and improve client type management

main
xsodus 2025-05-12 15:05:56 +07:00
parent 48a865d386
commit a880bf485b
1 changed files with 58 additions and 62 deletions

View File

@ -409,8 +409,13 @@ namespace UnityMcpBridge.Editor.Windows
string pythonDir = FindPackagePythonDirectory();
string manualConfigJson;
if (mcpClient.mcpType == McpTypes.VSCode)
// Create common JsonSerializerSettings
JsonSerializerSettings jsonSettings = new() { Formatting = Formatting.Indented };
// Use switch statement to handle different client types
switch (mcpClient.mcpType)
{
case McpTypes.VSCode:
// Create VSCode-specific configuration with proper format
var vscodeConfig = new
{
@ -426,12 +431,10 @@ namespace UnityMcpBridge.Editor.Windows
}
}
};
JsonSerializerSettings jsonSettings = new() { Formatting = Formatting.Indented };
manualConfigJson = JsonConvert.SerializeObject(vscodeConfig, jsonSettings);
}
else
{
break;
default:
// Create standard MCP configuration for other clients
McpConfig jsonConfig = new()
{
@ -444,9 +447,8 @@ namespace UnityMcpBridge.Editor.Windows
},
},
};
JsonSerializerSettings jsonSettings = new() { Formatting = Formatting.Indented };
manualConfigJson = JsonConvert.SerializeObject(jsonConfig, jsonSettings);
break;
}
ManualConfigEditorWindow.ShowWindow(configPath, manualConfigJson, mcpClient);
@ -642,7 +644,10 @@ namespace UnityMcpBridge.Editor.Windows
string configJson = File.ReadAllText(configPath);
string pythonDir = ServerInstaller.GetServerPath();
// Use switch statement to handle different client types
// Use switch statement to handle different client types, extracting common logic
string[] args = null;
bool configExists = false;
switch (mcpClient.mcpType)
{
case McpTypes.VSCode:
@ -651,21 +656,8 @@ namespace UnityMcpBridge.Editor.Windows
if (config?.mcp?.servers?.unityMCP != null)
{
// Extract args from VSCode config format
var args = config.mcp.servers.unityMCP.args.ToObject<string[]>();
if (pythonDir != null &&
Array.Exists(args, new Predicate<string>(arg => arg.Contains(pythonDir, StringComparison.Ordinal))))
{
mcpClient.SetStatus(McpStatus.Configured);
}
else
{
mcpClient.SetStatus(McpStatus.IncorrectPath);
}
}
else
{
mcpClient.SetStatus(McpStatus.MissingConfig);
args = config.mcp.servers.unityMCP.args.ToObject<string[]>();
configExists = true;
}
break;
@ -675,11 +667,17 @@ namespace UnityMcpBridge.Editor.Windows
if (standardConfig?.mcpServers?.unityMCP != null)
{
if (pythonDir != null
&& Array.Exists(
standardConfig.mcpServers.unityMCP.args,
arg => arg.Contains(pythonDir, StringComparison.Ordinal)
))
args = standardConfig.mcpServers.unityMCP.args;
configExists = true;
}
break;
}
// Common logic for checking configuration status
if (configExists)
{
if (pythonDir != null &&
Array.Exists(args, arg => arg.Contains(pythonDir, StringComparison.Ordinal)))
{
mcpClient.SetStatus(McpStatus.Configured);
}
@ -692,8 +690,6 @@ namespace UnityMcpBridge.Editor.Windows
{
mcpClient.SetStatus(McpStatus.MissingConfig);
}
break;
}
}
catch (Exception e)
{