[CLI] Improve help message

This commit is contained in:
VaDiM 2023-09-24 16:14:26 +03:00
parent cb84c137e5
commit a2bc935850

View File

@ -418,7 +418,7 @@ namespace AssetStudioCLI.Options
if (workModeOptionIndex + 1 >= resplittedArgs.Count) if (workModeOptionIndex + 1 >= resplittedArgs.Count)
{ {
Console.WriteLine($"{"Error during parsing options:".Color(brightRed)} Value for [{option.Color(brightRed)}] option was not found.\n"); Console.WriteLine($"{"Error during parsing options:".Color(brightRed)} Value for [{option.Color(brightRed)}] option was not found.\n");
TryShowOptionDescription(option, optionsDict); TryFindOptionDescription(option, optionsDict);
return; return;
} }
var value = resplittedArgs[workModeOptionIndex + 1]; var value = resplittedArgs[workModeOptionIndex + 1];
@ -463,7 +463,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported working mode: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported working mode: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_workMode.Description); ShowOptionDescription(o_workMode.Description);
return; return;
} }
resplittedArgs.RemoveRange(workModeOptionIndex, 2); resplittedArgs.RemoveRange(workModeOptionIndex, 2);
@ -491,7 +491,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{flag}] flag. This flag is not suitable for the current working mode [{o_workMode.Value}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{flag}] flag. This flag is not suitable for the current working mode [{o_workMode.Value}].\n");
Console.WriteLine(f_loadAllAssets.Description); ShowOptionDescription(f_loadAllAssets.Description, isFlag: true);
return; return;
} }
break; break;
@ -546,11 +546,11 @@ namespace AssetStudioCLI.Options
else else
{ {
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unknown asset type specified [{type.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unknown asset type specified [{type.Color(brightRed)}].\n");
Console.WriteLine(o_exportAssetTypes.Description); ShowOptionDescription(o_exportAssetTypes.Description);
return; return;
} }
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Asset type [{type.Color(brightRed)}] is not supported for exporting.\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Asset type [{type.Color(brightRed)}] is not supported for exporting.\n");
Console.WriteLine(o_exportAssetTypes.Description); ShowOptionDescription(o_exportAssetTypes.Description);
return; return;
} }
} }
@ -576,7 +576,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported grouping option: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported grouping option: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_groupAssetsBy.Description); ShowOptionDescription(o_groupAssetsBy.Description);
return; return;
} }
break; break;
@ -627,7 +627,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported log level value: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported log level value: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_logLevel.Description); ShowOptionDescription(o_logLevel.Description);
return; return;
} }
break; break;
@ -645,7 +645,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported log output mode: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported log output mode: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_logOutput.Description); ShowOptionDescription(o_logOutput.Description);
return; return;
} }
break; break;
@ -673,7 +673,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported image format: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported image format: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_imageFormat.Description); ShowOptionDescription(o_imageFormat.Description);
return; return;
} }
break; break;
@ -689,7 +689,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported audio format: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported audio format: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_audioFormat.Description); ShowOptionDescription(o_audioFormat.Description);
return; return;
} }
break; break;
@ -702,7 +702,7 @@ namespace AssetStudioCLI.Options
else else
{ {
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported scale factor value: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported scale factor value: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_fbxScaleFactor.Description); ShowOptionDescription(o_fbxScaleFactor.Description);
return; return;
} }
break; break;
@ -715,7 +715,7 @@ namespace AssetStudioCLI.Options
else else
{ {
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported bone size value: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported bone size value: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_fbxBoneSize.Description); ShowOptionDescription(o_fbxBoneSize.Description);
return; return;
} }
break; break;
@ -730,7 +730,7 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported asset list export option: [{value.Color(brightRed)}].\n"); Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option}] option. Unsupported asset list export option: [{value.Color(brightRed)}].\n");
Console.WriteLine(o_exportAssetList.Description); ShowOptionDescription(o_exportAssetList.Description);
return; return;
} }
break; break;
@ -767,9 +767,9 @@ namespace AssetStudioCLI.Options
break; break;
default: default:
Console.WriteLine($"{"Error:".Color(brightRed)} Unknown option [{option.Color(brightRed)}].\n"); Console.WriteLine($"{"Error:".Color(brightRed)} Unknown option [{option.Color(brightRed)}].\n");
if (!TryShowOptionDescription(option, optionsDict)) if (!TryFindOptionDescription(option, optionsDict))
{ {
TryShowOptionDescription(option, flagsDict); TryFindOptionDescription(option, flagsDict, isFlag: true);
} }
return; return;
} }
@ -780,12 +780,12 @@ namespace AssetStudioCLI.Options
if (optionsDict.Any(x => x.Key.Contains(option))) if (optionsDict.Any(x => x.Key.Contains(option)))
{ {
Console.WriteLine($"{"Error during parsing options:".Color(brightRed)} Value for [{option.Color(brightRed)}] option was not found.\n"); Console.WriteLine($"{"Error during parsing options:".Color(brightRed)} Value for [{option.Color(brightRed)}] option was not found.\n");
TryShowOptionDescription(option, optionsDict); TryFindOptionDescription(option, optionsDict);
} }
else if (flagsDict.Any(x => x.Key.Contains(option))) else if (flagsDict.Any(x => x.Key.Contains(option)))
{ {
Console.WriteLine($"{"Error:".Color(brightRed)} Unknown flag [{option.Color(brightRed)}].\n"); Console.WriteLine($"{"Error:".Color(brightRed)} Unknown flag [{option.Color(brightRed)}].\n");
TryShowOptionDescription(option, flagsDict); TryFindOptionDescription(option, flagsDict, isFlag: true);
} }
else else
{ {
@ -824,14 +824,21 @@ namespace AssetStudioCLI.Options
return value.Split(separator); return value.Split(separator);
} }
private static bool TryShowOptionDescription(string option, Dictionary<string, string> descDict) private static void ShowOptionDescription(string desc, bool isFlag = false)
{ {
var optionDesc = descDict.Where(x => x.Key.Contains(option)); var arg = isFlag ? "Flag" : "Option";
Console.WriteLine($"{arg} description:\n{desc}");
}
private static bool TryFindOptionDescription(string option, Dictionary<string, string> dict, bool isFlag = false)
{
var optionDesc = dict.Where(x => x.Key.Contains(option));
if (optionDesc.Any()) if (optionDesc.Any())
{ {
var arg = isFlag ? "flag" : "option";
var rand = new Random(); var rand = new Random();
var rndOption = optionDesc.ElementAt(rand.Next(0, optionDesc.Count())); var rndOption = optionDesc.ElementAt(rand.Next(0, optionDesc.Count()));
Console.WriteLine($"Did you mean [{ $"{rndOption.Key}".Color(CLIAnsiColors.BrightYellow) }] option?"); Console.WriteLine($"Did you mean [{$"{rndOption.Key}".Color(CLIAnsiColors.BrightYellow)}] {arg}?");
Console.WriteLine($"Here's a description of it: \n\n{rndOption.Value}"); Console.WriteLine($"Here's a description of it: \n\n{rndOption.Value}");
return true; return true;