mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
Moving to using a ProfileRespository will make it easier when moving to a WPF style app, and it will allow some freedom if I want to change the storage to a database or soemthing different.
122 lines
5.5 KiB
C#
122 lines
5.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using McMaster.Extensions.CommandLineUtils;
|
|
using McMaster.Extensions.CommandLineUtils.Validation;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using HeliosPlus.Shared;
|
|
using HeliosPlus.GameLibraries;
|
|
using System.Text.RegularExpressions;
|
|
using System.ServiceModel.Dispatcher;
|
|
|
|
namespace HeliosPlus
|
|
{
|
|
class ProfileMustExistValidator : IOptionValidator
|
|
{
|
|
public ValidationResult GetValidationResult(CommandOption optionProfile, ValidationContext context)
|
|
{
|
|
// This validator only runs if there is a value
|
|
if (!optionProfile.HasValue()) return ValidationResult.Success;
|
|
var profile = optionProfile.Value();
|
|
|
|
// Create an array of display profiles we have
|
|
var profiles = ProfileRepository.AllProfiles.ToArray();
|
|
// Check if the user supplied a --profile option using the profiles' ID
|
|
var profileIndex = profiles.Length > 0 ? Array.FindIndex(profiles, p => p.UUID.Equals(profile, StringComparison.InvariantCultureIgnoreCase)) : -1;
|
|
// If the profileID wasn't there, maybe they used the profile name?
|
|
if (profileIndex == -1)
|
|
{
|
|
// Try and lookup the profile in the profiles' Name fields
|
|
profileIndex = profiles.Length > 0 ? Array.FindIndex(profiles, p => p.Name.StartsWith(profile, StringComparison.InvariantCultureIgnoreCase)) : -1;
|
|
}
|
|
// If the profileID still isn't there, then raise the alarm
|
|
if (profileIndex == -1)
|
|
{
|
|
return new ValidationResult($"Couldn't find Profile Name or ID supplied via command line: '{optionProfile.LongName}'. Please check the Profile Name or ID you supplied on the command line is correct.");
|
|
}
|
|
|
|
Console.WriteLine($"Using Profile: '{profiles[profileIndex].Name}' (ID:{profiles[profileIndex].UUID})");
|
|
return ValidationResult.Success;
|
|
}
|
|
}
|
|
|
|
class ShortcutMustExistValidator : IArgumentValidator
|
|
{
|
|
public ValidationResult GetValidationResult(CommandArgument argumentShortcutName, ValidationContext context)
|
|
{
|
|
// This validator only runs if there is a string provided
|
|
if (argumentShortcutName.Value == "") return ValidationResult.Success;
|
|
string shortcutNameProvided = (string) argumentShortcutName.Value;
|
|
string shortcutName = "";
|
|
|
|
// check if the shortcut name is surrounded by speech marks
|
|
int shortcutNameIndexLeft = shortcutNameProvided.IndexOf('"');
|
|
int shortcutNameIndexRight = shortcutNameProvided.LastIndexOf('"');
|
|
if (shortcutNameIndexLeft != -1 && shortcutNameIndexRight != -1 && shortcutNameIndexLeft != shortcutNameIndexRight)
|
|
{
|
|
MatchCollection matches = Regex.Matches(shortcutNameProvided, @"'(.*?)'");
|
|
shortcutName = matches[0].Groups[1].Value; // (Index 1 is the first group)
|
|
}
|
|
else
|
|
{
|
|
shortcutName = shortcutNameProvided;
|
|
}
|
|
|
|
// Create an array of shortcuts we have
|
|
var shortcuts = ShortcutRepository.AllShortcuts.ToArray();
|
|
// Check if the user supplied a valid shortcut name
|
|
int profileIndex = shortcuts.Length > 0 ? Array.FindIndex(shortcuts, p => p.Name.Contains(shortcutName)) : -1;
|
|
|
|
// If the profileID still isn't there, then raise the alarm
|
|
if (profileIndex == -1)
|
|
{
|
|
return new ValidationResult($"Couldn't find Shortcut Name supplied via command line: '{shortcutName}'. Please check the Shortcut Name you supplied on the command line is correct.");
|
|
}
|
|
|
|
Console.WriteLine($"Using Shortcut: '{shortcuts[profileIndex].Name}'");
|
|
return ValidationResult.Success;
|
|
}
|
|
}
|
|
|
|
|
|
class FileOptionMustExistValidator : IOptionValidator
|
|
{
|
|
public ValidationResult GetValidationResult(CommandOption optionFullFileName, ValidationContext context)
|
|
{
|
|
// This validator only runs if there is a string provided
|
|
if (optionFullFileName.Value() == "") return ValidationResult.Success;
|
|
var fileNameAndPath = optionFullFileName.Value();
|
|
|
|
// Check that the file exists
|
|
if (!File.Exists(fileNameAndPath))
|
|
{
|
|
return new ValidationResult($"Couldn't find the file '{optionFullFileName.Value()}' supplied to '{optionFullFileName.LongName}'. Please check you specified the full path to the file on the command line.");
|
|
}
|
|
|
|
return ValidationResult.Success;
|
|
}
|
|
}
|
|
|
|
class FileArgumentMustExistValidator : IArgumentValidator
|
|
{
|
|
public ValidationResult GetValidationResult(CommandArgument argumentFullFileName, ValidationContext context)
|
|
{
|
|
// This validator only runs if there is a string provided
|
|
if (argumentFullFileName.Value == "") return ValidationResult.Success;
|
|
var fileNameAndPath = argumentFullFileName.Value;
|
|
|
|
// Check that the file exists
|
|
if (!File.Exists(fileNameAndPath))
|
|
{
|
|
return new ValidationResult($"Couldn't find the file '{argumentFullFileName.Value}' supplied to '{argumentFullFileName.Name}'. Please check you specified the full path to the file on the command line.");
|
|
}
|
|
|
|
return ValidationResult.Success;
|
|
}
|
|
}
|
|
|
|
}
|