Use CommandLineParser package for handling CLI args

This commit is contained in:
PloughPuff
2019-01-28 13:41:37 +00:00
committed by Bond-009
parent f7a46c7a56
commit fd361421b1
7 changed files with 63 additions and 43 deletions

View File

@@ -141,7 +141,7 @@ namespace Emby.Server.Implementations
return false;
}
if (StartupOptions.ContainsOption("-service"))
if (StartupOptions.Service)
{
return false;
}
@@ -1747,7 +1747,7 @@ namespace Emby.Server.Implementations
EncoderLocationType = MediaEncoder.EncoderLocationType,
SystemArchitecture = EnvironmentInfo.SystemArchitecture,
SystemUpdateLevel = SystemUpdateLevel,
PackageName = StartupOptions.GetOption("-package")
PackageName = StartupOptions.PackageName
};
}

View File

@@ -22,6 +22,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.4.3" />
<PackageReference Include="ServiceStack.Text.Core" Version="5.4.0" />
<PackageReference Include="sharpcompress" Version="0.22.0" />
<PackageReference Include="SimpleInjector" Version="4.4.2" />

View File

@@ -47,7 +47,7 @@ namespace Emby.Server.Implementations.EntryPoints
{
var options = ((ApplicationHost)_appHost).StartupOptions;
if (!options.ContainsOption("-noautorunwebapp"))
if (!options.NoAutoRunWebApp)
{
BrowserLauncher.OpenWebApp(_appHost);
}

View File

@@ -30,8 +30,8 @@ namespace Emby.Server.Implementations.FFMpeg
public FFMpegInfo GetFFMpegInfo(StartupOptions options)
{
var customffMpegPath = options.GetOption("-ffmpeg");
var customffProbePath = options.GetOption("-ffprobe");
var customffMpegPath = options.FFmpeg;
var customffProbePath = options.FFprobe;
if (!string.IsNullOrWhiteSpace(customffMpegPath) && !string.IsNullOrWhiteSpace(customffProbePath))
{

View File

@@ -1,30 +1,43 @@
using System;
using System.Linq;
namespace Emby.Server.Implementations
{
using CommandLine;
/// <summary>
/// Class used by CommandLine package when parsing the command line arguments.
/// </summary>
public class StartupOptions
{
private readonly string[] _options;
[Option('d', "programdata", Required = false, HelpText = "Path to use for program data (databases files etc.).")]
public string PathProgramData { get; set; }
public StartupOptions(string[] commandLineArgs)
{
_options = commandLineArgs;
}
[Option('c', "configdir", Required = false, HelpText = "Path to use for config data (user policies and puctures).")]
public string PathConfig { get; set; }
public bool ContainsOption(string option)
=> _options.Contains(option, StringComparer.OrdinalIgnoreCase);
[Option('l', "logdir", Required = false, HelpText = "Path to use for writing log files.")]
public string PathLog { get; set; }
public string GetOption(string name)
{
int index = Array.IndexOf(_options, name);
if (index == -1)
{
return null;
}
[Option("ffmpeg", Required = false, HelpText = "Path to external FFmpeg exe to use in place of built-in.")]
public string FFmpeg { get; set; }
return _options.ElementAtOrDefault(index + 1);
}
[Option("ffprobe", Required = false, HelpText = "ffmpeg and ffprobe switches must be supplied together.")]
public string FFprobe { get; set; }
[Option("service", Required = false, HelpText = "Run as headless service.")]
public bool Service { get; set; }
[Option("noautorunwebapp", Required = false, HelpText = "Run headless if startup wizard is complete.")]
public bool NoAutoRunWebApp { get; set; }
[Option("package-name", Required = false, HelpText = "Used when packaging Jellyfin (example, synology).")]
public string PackageName { get; set; }
[Option("restartpath", Required = false, HelpText = "Path to reset script.")]
public string RestartPath { get; set; }
[Option("restartargs", Required = false, HelpText = "Arguments for restart script.")]
public string RestartArgs { get; set; }
}
}
}