/// <summary> /// Verify that there are inputs, show help otherwise /// </summary> /// <param name="inputs">List of inputs</param> /// <param name="feature">Name of the current feature</param> private static void VerifyInputs(List <string> inputs, string feature) { if (inputs.Count == 0) { logger.Error("This feature requires at least one input"); _help.OutputIndividualFeature(feature); Environment.Exit(0); } }
public override bool ProcessArgs(string[] args, FeatureSet help) { // If we had something else after help if (args.Length > 1) { help.OutputIndividualFeature(args[1]); return(true); } // Otherwise, show generic help else { help.OutputGenericHelp(); return(true); } }
/// <summary> /// Entry class for the RombaSharp application /// </summary> public static void Main(string[] args) { // Perform initial setup and verification LoggerImpl.SetFilename(Path.Combine(PathTool.GetRuntimeDirectory(), "logs", "romba.log"), true); LoggerImpl.AppendPrefix = true; LoggerImpl.LowestLogLevel = LogLevel.VERBOSE; LoggerImpl.ThrowOnError = false; LoggerImpl.Start(); // Create a new Help object for this program _help = RetrieveHelp(); // Credits take precidence over all if ((new List <string>(args)).Contains("--credits")) { _help.OutputCredits(); LoggerImpl.Close(); return; } // If there's no arguments, show help if (args.Length == 0) { _help.OutputGenericHelp(); LoggerImpl.Close(); return; } // Get the first argument as a feature flag string featureName = args[0]; // Verify that the flag is valid if (!_help.TopLevelFlag(featureName)) { logger.User($"'{featureName}' is not valid feature flag"); _help.OutputIndividualFeature(featureName); LoggerImpl.Close(); return; } // Get the proper name for the feature featureName = _help.GetFeatureName(featureName); // Get the associated feature BaseFeature feature = _help[featureName] as BaseFeature; // If we had the help feature first if (featureName == DisplayHelp.Value || featureName == DisplayHelpDetailed.Value) { feature.ProcessArgs(args, _help); LoggerImpl.Close(); return; } // Now verify that all other flags are valid if (!feature.ProcessArgs(args, _help)) { LoggerImpl.Close(); return; } // Set the new log level based on settings LoggerImpl.LowestLogLevel = feature.LogLevel; // If output is being redirected or we are in script mode, don't allow clear screens if (!Console.IsOutputRedirected && feature.ScriptMode) { Console.Clear(); Prepare.SetConsoleHeader("SabreTools"); } // Now process the current feature Dictionary <string, Feature> features = _help.GetEnabledFeatures(); bool success = false; switch (featureName) { case DisplayHelpDetailed.Value: case DisplayHelp.Value: // No-op as this should be caught break; // Require input verification case Archive.Value: case Build.Value: case DatStats.Value: case Fixdat.Value: case Import.Value: case Lookup.Value: case Merge.Value: case Miss.Value: case RescanDepots.Value: VerifyInputs(feature.Inputs, featureName); success = feature.ProcessFeatures(features); break; // Requires no input verification case Cancel.Value: case DbStats.Value: case Diffdat.Value: case Dir2Dat.Value: case EDiffdat.Value: case Export.Value: case Memstats.Value: case Progress.Value: case PurgeBackup.Value: case PurgeDelete.Value: case RefreshDats.Value: case Shutdown.Value: case Features.Version.Value: success = feature.ProcessFeatures(features); break; // If nothing is set, show the help default: _help.OutputGenericHelp(); break; } // If the feature failed, output help if (!success) { logger.Error("An error occurred during processing!"); _help.OutputIndividualFeature(featureName); } LoggerImpl.Close(); return; }
/// <summary> /// Entry point for the SabreTools application /// </summary> /// <param name="args">String array representing command line parameters</param> public static void Main(string[] args) { // Perform initial setup and verification LoggerImpl.SetFilename(Path.Combine(PathTool.GetRuntimeDirectory(), "logs", "sabretools.log"), true); LoggerImpl.AppendPrefix = true; LoggerImpl.LowestLogLevel = LogLevel.VERBOSE; LoggerImpl.ThrowOnError = false; LoggerImpl.Start(); // Create a new Help object for this program _help = RetrieveHelp(); // Credits take precidence over all if ((new List <string>(args)).Contains("--credits")) { _help.OutputCredits(); LoggerImpl.Close(); return; } // If there's no arguments, show help if (args.Length == 0) { _help.OutputGenericHelp(); LoggerImpl.Close(); return; } // Get the first argument as a feature flag string featureName = args[0]; // TODO: Remove this block once trimming is no longer needed // TODO: Update wiki documentation ONLY after this reaches stable // TODO: Re-evaluate feature flags with this change in mind featureName = featureName.TrimStart('-'); if (args[0].StartsWith("-")) { logger.User($"Feature flags no longer require leading '-' characters"); } // Verify that the flag is valid if (!_help.TopLevelFlag(featureName)) { logger.User($"'{featureName}' is not valid feature flag"); _help.OutputIndividualFeature(featureName); LoggerImpl.Close(); return; } // Get the proper name for the feature featureName = _help.GetFeatureName(featureName); // Get the associated feature BaseFeature feature = _help[featureName] as BaseFeature; // If we had the help feature first if (featureName == DisplayHelp.Value || featureName == DisplayHelpDetailed.Value) { feature.ProcessArgs(args, _help); LoggerImpl.Close(); return; } // Now verify that all other flags are valid if (!feature.ProcessArgs(args, _help)) { LoggerImpl.Close(); return; } // Set the new log level based on settings LoggerImpl.LowestLogLevel = feature.LogLevel; // If output is being redirected or we are in script mode, don't allow clear screens if (!Console.IsOutputRedirected && feature.ScriptMode) { Console.Clear(); Prepare.SetConsoleHeader("SabreTools"); } // Now process the current feature Dictionary <string, Feature> features = _help.GetEnabledFeatures(); bool success = false; switch (featureName) { // No-op as these should be caught case DisplayHelp.Value: case DisplayHelpDetailed.Value: break; // Require input verification case Batch.Value: case DatFromDir.Value: case Extract.Value: case Restore.Value: case Split.Value: case Stats.Value: case Update.Value: case Verify.Value: VerifyInputs(feature.Inputs, feature); success = feature.ProcessFeatures(features); break; // Requires no input verification case Sort.Value: success = feature.ProcessFeatures(features); break; // If nothing is set, show the help default: _help.OutputGenericHelp(); break; } // If the feature failed, output help if (!success) { logger.Error("An error occurred during processing!"); _help.OutputIndividualFeature(featureName); } LoggerImpl.Close(); return; }