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,44 +409,46 @@ namespace UnityMcpBridge.Editor.Windows
string pythonDir = FindPackagePythonDirectory(); string pythonDir = FindPackagePythonDirectory();
string manualConfigJson; 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)
{ {
// Create VSCode-specific configuration with proper format case McpTypes.VSCode:
var vscodeConfig = new // Create VSCode-specific configuration with proper format
{ var vscodeConfig = new
mcp = new
{ {
servers = new mcp = new
{ {
unityMCP = new servers = new
{ {
command = "uv", unityMCP = new
args = new[] { "--directory", pythonDir, "run", "server.py" } {
command = "uv",
args = new[] { "--directory", pythonDir, "run", "server.py" }
}
} }
} }
} };
}; manualConfigJson = JsonConvert.SerializeObject(vscodeConfig, jsonSettings);
break;
JsonSerializerSettings jsonSettings = new() { Formatting = Formatting.Indented };
manualConfigJson = JsonConvert.SerializeObject(vscodeConfig, jsonSettings); default:
} // Create standard MCP configuration for other clients
else McpConfig jsonConfig = new()
{
// Create standard MCP configuration for other clients
McpConfig jsonConfig = new()
{
mcpServers = new McpConfigServers
{ {
unityMCP = new McpConfigServer mcpServers = new McpConfigServers
{ {
command = "uv", unityMCP = new McpConfigServer
args = new[] { "--directory", pythonDir, "run", "server.py" }, {
command = "uv",
args = new[] { "--directory", pythonDir, "run", "server.py" },
},
}, },
}, };
}; manualConfigJson = JsonConvert.SerializeObject(jsonConfig, jsonSettings);
break;
JsonSerializerSettings jsonSettings = new() { Formatting = Formatting.Indented };
manualConfigJson = JsonConvert.SerializeObject(jsonConfig, jsonSettings);
} }
ManualConfigEditorWindow.ShowWindow(configPath, manualConfigJson, mcpClient); ManualConfigEditorWindow.ShowWindow(configPath, manualConfigJson, mcpClient);
@ -642,7 +644,10 @@ namespace UnityMcpBridge.Editor.Windows
string configJson = File.ReadAllText(configPath); string configJson = File.ReadAllText(configPath);
string pythonDir = ServerInstaller.GetServerPath(); 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) switch (mcpClient.mcpType)
{ {
case McpTypes.VSCode: case McpTypes.VSCode:
@ -651,49 +656,40 @@ namespace UnityMcpBridge.Editor.Windows
if (config?.mcp?.servers?.unityMCP != null) if (config?.mcp?.servers?.unityMCP != null)
{ {
// Extract args from VSCode config format // Extract args from VSCode config format
var args = config.mcp.servers.unityMCP.args.ToObject<string[]>(); args = config.mcp.servers.unityMCP.args.ToObject<string[]>();
configExists = true;
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);
} }
break; break;
default: default:
// Standard MCP configuration check for Claude Desktop, Cursor, etc. // Standard MCP configuration check for Claude Desktop, Cursor, etc.
McpConfig standardConfig = JsonConvert.DeserializeObject<McpConfig>(configJson); McpConfig standardConfig = JsonConvert.DeserializeObject<McpConfig>(configJson);
if (standardConfig?.mcpServers?.unityMCP != null) if (standardConfig?.mcpServers?.unityMCP != null)
{ {
if (pythonDir != null args = standardConfig.mcpServers.unityMCP.args;
&& Array.Exists( configExists = true;
standardConfig.mcpServers.unityMCP.args,
arg => arg.Contains(pythonDir, StringComparison.Ordinal)
))
{
mcpClient.SetStatus(McpStatus.Configured);
}
else
{
mcpClient.SetStatus(McpStatus.IncorrectPath);
}
}
else
{
mcpClient.SetStatus(McpStatus.MissingConfig);
} }
break; 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);
}
else
{
mcpClient.SetStatus(McpStatus.IncorrectPath);
}
}
else
{
mcpClient.SetStatus(McpStatus.MissingConfig);
}
} }
catch (Exception e) catch (Exception e)
{ {