Merge pull request #1612 from Bond-009/warn4

Fix warnings
This commit is contained in:
dkanada 2019-08-10 15:12:54 -07:00 committed by GitHub
commit 5c366e4697
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 168 additions and 137 deletions

View File

@ -10,6 +10,8 @@ namespace Emby.Server.Implementations.AppBase
/// </summary> /// </summary>
public abstract class BaseApplicationPaths : IApplicationPaths public abstract class BaseApplicationPaths : IApplicationPaths
{ {
private string _dataPath;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="BaseApplicationPaths"/> class. /// Initializes a new instance of the <see cref="BaseApplicationPaths"/> class.
/// </summary> /// </summary>
@ -30,27 +32,27 @@ namespace Emby.Server.Implementations.AppBase
} }
/// <summary> /// <summary>
/// Gets the path to the program data folder /// Gets the path to the program data folder.
/// </summary> /// </summary>
/// <value>The program data path.</value> /// <value>The program data path.</value>
public string ProgramDataPath { get; private set; } public string ProgramDataPath { get; }
/// <summary> /// <summary>
/// Gets the path to the web UI resources folder /// Gets the path to the web UI resources folder.
/// </summary> /// </summary>
/// <value>The web UI resources path.</value> /// <value>The web UI resources path.</value>
public string WebPath { get; set; } public string WebPath { get; }
/// <summary> /// <summary>
/// Gets the path to the system folder /// Gets the path to the system folder.
/// </summary> /// </summary>
/// <value>The path to the system folder.</value>
public string ProgramSystemPath { get; } = AppContext.BaseDirectory; public string ProgramSystemPath { get; } = AppContext.BaseDirectory;
/// <summary> /// <summary>
/// Gets the folder path to the data directory /// Gets the folder path to the data directory.
/// </summary> /// </summary>
/// <value>The data directory.</value> /// <value>The data directory.</value>
private string _dataPath;
public string DataPath public string DataPath
{ {
get => _dataPath; get => _dataPath;
@ -58,8 +60,9 @@ namespace Emby.Server.Implementations.AppBase
} }
/// <summary> /// <summary>
/// Gets the magic strings used for virtual path manipulation. /// Gets the magic string used for virtual path manipulation.
/// </summary> /// </summary>
/// <value>The magic string used for virtual path manipulation.</value>
public string VirtualDataPath { get; } = "%AppDataPath%"; public string VirtualDataPath { get; } = "%AppDataPath%";
/// <summary> /// <summary>
@ -69,43 +72,43 @@ namespace Emby.Server.Implementations.AppBase
public string ImageCachePath => Path.Combine(CachePath, "images"); public string ImageCachePath => Path.Combine(CachePath, "images");
/// <summary> /// <summary>
/// Gets the path to the plugin directory /// Gets the path to the plugin directory.
/// </summary> /// </summary>
/// <value>The plugins path.</value> /// <value>The plugins path.</value>
public string PluginsPath => Path.Combine(ProgramDataPath, "plugins"); public string PluginsPath => Path.Combine(ProgramDataPath, "plugins");
/// <summary> /// <summary>
/// Gets the path to the plugin configurations directory /// Gets the path to the plugin configurations directory.
/// </summary> /// </summary>
/// <value>The plugin configurations path.</value> /// <value>The plugin configurations path.</value>
public string PluginConfigurationsPath => Path.Combine(PluginsPath, "configurations"); public string PluginConfigurationsPath => Path.Combine(PluginsPath, "configurations");
/// <summary> /// <summary>
/// Gets the path to the log directory /// Gets the path to the log directory.
/// </summary> /// </summary>
/// <value>The log directory path.</value> /// <value>The log directory path.</value>
public string LogDirectoryPath { get; private set; } public string LogDirectoryPath { get; }
/// <summary> /// <summary>
/// Gets the path to the application configuration root directory /// Gets the path to the application configuration root directory.
/// </summary> /// </summary>
/// <value>The configuration directory path.</value> /// <value>The configuration directory path.</value>
public string ConfigurationDirectoryPath { get; private set; } public string ConfigurationDirectoryPath { get; }
/// <summary> /// <summary>
/// Gets the path to the system configuration file /// Gets the path to the system configuration file.
/// </summary> /// </summary>
/// <value>The system configuration file path.</value> /// <value>The system configuration file path.</value>
public string SystemConfigurationFilePath => Path.Combine(ConfigurationDirectoryPath, "system.xml"); public string SystemConfigurationFilePath => Path.Combine(ConfigurationDirectoryPath, "system.xml");
/// <summary> /// <summary>
/// Gets the folder path to the cache directory /// Gets or sets the folder path to the cache directory.
/// </summary> /// </summary>
/// <value>The cache directory.</value> /// <value>The cache directory.</value>
public string CachePath { get; set; } public string CachePath { get; set; }
/// <summary> /// <summary>
/// Gets the folder path to the temp directory within the cache folder /// Gets the folder path to the temp directory within the cache folder.
/// </summary> /// </summary>
/// <value>The temp directory.</value> /// <value>The temp directory.</value>
public string TempDirectory => Path.Combine(CachePath, "temp"); public string TempDirectory => Path.Combine(CachePath, "temp");

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -19,11 +20,44 @@ namespace Emby.Server.Implementations.AppBase
/// </summary> /// </summary>
public abstract class BaseConfigurationManager : IConfigurationManager public abstract class BaseConfigurationManager : IConfigurationManager
{ {
private readonly IFileSystem _fileSystem;
private readonly ConcurrentDictionary<string, object> _configurations = new ConcurrentDictionary<string, object>();
private ConfigurationStore[] _configurationStores = Array.Empty<ConfigurationStore>();
private IConfigurationFactory[] _configurationFactories = Array.Empty<IConfigurationFactory>();
/// <summary> /// <summary>
/// Gets the type of the configuration. /// The _configuration loaded.
/// </summary> /// </summary>
/// <value>The type of the configuration.</value> private bool _configurationLoaded;
protected abstract Type ConfigurationType { get; }
/// <summary>
/// The _configuration sync lock.
/// </summary>
private object _configurationSyncLock = new object();
/// <summary>
/// The _configuration.
/// </summary>
private BaseApplicationConfiguration _configuration;
/// <summary>
/// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class.
/// </summary>
/// <param name="applicationPaths">The application paths.</param>
/// <param name="loggerFactory">The logger factory.</param>
/// <param name="xmlSerializer">The XML serializer.</param>
/// <param name="fileSystem">The file system</param>
protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer, IFileSystem fileSystem)
{
CommonApplicationPaths = applicationPaths;
XmlSerializer = xmlSerializer;
_fileSystem = fileSystem;
Logger = loggerFactory.CreateLogger(GetType().Name);
UpdateCachePath();
}
/// <summary> /// <summary>
/// Occurs when [configuration updated]. /// Occurs when [configuration updated].
@ -40,6 +74,12 @@ namespace Emby.Server.Implementations.AppBase
/// </summary> /// </summary>
public event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdated; public event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdated;
/// <summary>
/// Gets the type of the configuration.
/// </summary>
/// <value>The type of the configuration.</value>
protected abstract Type ConfigurationType { get; }
/// <summary> /// <summary>
/// Gets the logger. /// Gets the logger.
/// </summary> /// </summary>
@ -56,20 +96,7 @@ namespace Emby.Server.Implementations.AppBase
/// </summary> /// </summary>
/// <value>The application paths.</value> /// <value>The application paths.</value>
public IApplicationPaths CommonApplicationPaths { get; private set; } public IApplicationPaths CommonApplicationPaths { get; private set; }
public readonly IFileSystem FileSystem;
/// <summary>
/// The _configuration loaded
/// </summary>
private bool _configurationLoaded;
/// <summary>
/// The _configuration sync lock
/// </summary>
private object _configurationSyncLock = new object();
/// <summary>
/// The _configuration
/// </summary>
private BaseApplicationConfiguration _configuration;
/// <summary> /// <summary>
/// Gets the system configuration /// Gets the system configuration
/// </summary> /// </summary>
@ -90,26 +117,6 @@ namespace Emby.Server.Implementations.AppBase
} }
} }
private ConfigurationStore[] _configurationStores = { };
private IConfigurationFactory[] _configurationFactories = { };
/// <summary>
/// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class.
/// </summary>
/// <param name="applicationPaths">The application paths.</param>
/// <param name="loggerFactory">The logger factory.</param>
/// <param name="xmlSerializer">The XML serializer.</param>
/// <param name="fileSystem">The file system</param>
protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer, IFileSystem fileSystem)
{
CommonApplicationPaths = applicationPaths;
XmlSerializer = xmlSerializer;
FileSystem = fileSystem;
Logger = loggerFactory.CreateLogger(GetType().Name);
UpdateCachePath();
}
public virtual void AddParts(IEnumerable<IConfigurationFactory> factories) public virtual void AddParts(IEnumerable<IConfigurationFactory> factories)
{ {
_configurationFactories = factories.ToArray(); _configurationFactories = factories.ToArray();
@ -171,6 +178,7 @@ namespace Emby.Server.Implementations.AppBase
private void UpdateCachePath() private void UpdateCachePath()
{ {
string cachePath; string cachePath;
// If the configuration file has no entry (i.e. not set in UI) // If the configuration file has no entry (i.e. not set in UI)
if (string.IsNullOrWhiteSpace(CommonConfiguration.CachePath)) if (string.IsNullOrWhiteSpace(CommonConfiguration.CachePath))
{ {
@ -207,12 +215,16 @@ namespace Emby.Server.Implementations.AppBase
var newPath = newConfig.CachePath; var newPath = newConfig.CachePath;
if (!string.IsNullOrWhiteSpace(newPath) if (!string.IsNullOrWhiteSpace(newPath)
&& !string.Equals(CommonConfiguration.CachePath ?? string.Empty, newPath)) && !string.Equals(CommonConfiguration.CachePath ?? string.Empty, newPath, StringComparison.Ordinal))
{ {
// Validate // Validate
if (!Directory.Exists(newPath)) if (!Directory.Exists(newPath))
{ {
throw new FileNotFoundException(string.Format("{0} does not exist.", newPath)); throw new FileNotFoundException(
string.Format(
CultureInfo.InvariantCulture,
"{0} does not exist.",
newPath));
} }
EnsureWriteAccess(newPath); EnsureWriteAccess(newPath);
@ -223,11 +235,9 @@ namespace Emby.Server.Implementations.AppBase
{ {
var file = Path.Combine(path, Guid.NewGuid().ToString()); var file = Path.Combine(path, Guid.NewGuid().ToString());
File.WriteAllText(file, string.Empty); File.WriteAllText(file, string.Empty);
FileSystem.DeleteFile(file); _fileSystem.DeleteFile(file);
} }
private readonly ConcurrentDictionary<string, object> _configurations = new ConcurrentDictionary<string, object>();
private string GetConfigurationFile(string key) private string GetConfigurationFile(string key)
{ {
return Path.Combine(CommonApplicationPaths.ConfigurationDirectoryPath, key.ToLowerInvariant() + ".xml"); return Path.Combine(CommonApplicationPaths.ConfigurationDirectoryPath, key.ToLowerInvariant() + ".xml");

View File

@ -108,9 +108,9 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using ServiceStack; using ServiceStack;
using OperatingSystem = MediaBrowser.Common.System.OperatingSystem; using OperatingSystem = MediaBrowser.Common.System.OperatingSystem;
@ -386,7 +386,7 @@ namespace Emby.Server.Implementations
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem)); fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
NetworkManager.NetworkChanged += NetworkManager_NetworkChanged; NetworkManager.NetworkChanged += OnNetworkChanged;
} }
public string ExpandVirtualPath(string path) public string ExpandVirtualPath(string path)
@ -410,7 +410,7 @@ namespace Emby.Server.Implementations
return ServerConfigurationManager.Configuration.LocalNetworkSubnets; return ServerConfigurationManager.Configuration.LocalNetworkSubnets;
} }
private void NetworkManager_NetworkChanged(object sender, EventArgs e) private void OnNetworkChanged(object sender, EventArgs e)
{ {
_validAddressResults.Clear(); _validAddressResults.Clear();
} }
@ -418,10 +418,10 @@ namespace Emby.Server.Implementations
public string ApplicationVersion { get; } = typeof(ApplicationHost).Assembly.GetName().Version.ToString(3); public string ApplicationVersion { get; } = typeof(ApplicationHost).Assembly.GetName().Version.ToString(3);
/// <summary> /// <summary>
/// Gets the current application user agent /// Gets the current application user agent.
/// </summary> /// </summary>
/// <value>The application user agent.</value> /// <value>The application user agent.</value>
public string ApplicationUserAgent => Name.Replace(' ','-') + '/' + ApplicationVersion; public string ApplicationUserAgent => Name.Replace(' ', '-') + "/" + ApplicationVersion;
/// <summary> /// <summary>
/// Gets the email address for use within a comment section of a user agent field. /// Gets the email address for use within a comment section of a user agent field.
@ -429,14 +429,11 @@ namespace Emby.Server.Implementations
/// </summary> /// </summary>
public string ApplicationUserAgentAddress { get; } = "team@jellyfin.org"; public string ApplicationUserAgentAddress { get; } = "team@jellyfin.org";
private string _productName;
/// <summary> /// <summary>
/// Gets the current application name /// Gets the current application name.
/// </summary> /// </summary>
/// <value>The application name.</value> /// <value>The application name.</value>
public string ApplicationProductName public string ApplicationProductName { get; } = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductName;
=> _productName ?? (_productName = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductName);
private DeviceId _deviceId; private DeviceId _deviceId;
@ -470,8 +467,8 @@ namespace Emby.Server.Implementations
/// <summary> /// <summary>
/// Creates an instance of type and resolves all constructor dependencies /// Creates an instance of type and resolves all constructor dependencies
/// </summary> /// </summary>
/// /// <typeparam name="T">The type</typeparam> /// /// <typeparam name="T">The type.</typeparam>
/// <returns>T</returns> /// <returns>T.</returns>
public T CreateInstance<T>() public T CreateInstance<T>()
=> ActivatorUtilities.CreateInstance<T>(_serviceProvider); => ActivatorUtilities.CreateInstance<T>(_serviceProvider);
@ -604,10 +601,15 @@ namespace Emby.Server.Implementations
foreach (var plugin in Plugins) foreach (var plugin in Plugins)
{ {
pluginBuilder.AppendLine(string.Format("{0} {1}", plugin.Name, plugin.Version)); pluginBuilder.AppendLine(
string.Format(
CultureInfo.InvariantCulture,
"{0} {1}",
plugin.Name,
plugin.Version));
} }
Logger.LogInformation("Plugins: {plugins}", pluginBuilder.ToString()); Logger.LogInformation("Plugins: {Plugins}", pluginBuilder.ToString());
} }
DiscoverTypes(); DiscoverTypes();
@ -629,7 +631,7 @@ namespace Emby.Server.Implementations
if (EnableHttps && Certificate != null) if (EnableHttps && Certificate != null)
{ {
options.ListenAnyIP(HttpsPort, listenOptions => { listenOptions.UseHttps(Certificate); }); options.ListenAnyIP(HttpsPort, listenOptions => listenOptions.UseHttps(Certificate));
} }
}) })
.UseContentRoot(contentRoot) .UseContentRoot(contentRoot)
@ -643,6 +645,7 @@ namespace Emby.Server.Implementations
app.UseWebSockets(); app.UseWebSockets();
app.UseResponseCompression(); app.UseResponseCompression();
// TODO app.UseMiddleware<WebSocketMiddleware>(); // TODO app.UseMiddleware<WebSocketMiddleware>();
app.Use(ExecuteWebsocketHandlerAsync); app.Use(ExecuteWebsocketHandlerAsync);
app.Use(ExecuteHttpHandlerAsync); app.Use(ExecuteHttpHandlerAsync);
@ -1044,8 +1047,8 @@ namespace Emby.Server.Implementations
.Cast<IServerEntryPoint>() .Cast<IServerEntryPoint>()
.ToList(); .ToList();
await Task.WhenAll(StartEntryPoints(entries, true)); await Task.WhenAll(StartEntryPoints(entries, true)).ConfigureAwait(false);
await Task.WhenAll(StartEntryPoints(entries, false)); await Task.WhenAll(StartEntryPoints(entries, false)).ConfigureAwait(false);
} }
/// <summary> /// <summary>
@ -1458,15 +1461,10 @@ namespace Emby.Server.Implementations
}; };
} }
public WakeOnLanInfo[] GetWakeOnLanInfo() public IEnumerable<WakeOnLanInfo> GetWakeOnLanInfo()
{ => NetworkManager.GetMacAddresses()
return NetworkManager.GetMacAddresses() .Select(i => new WakeOnLanInfo(i))
.Select(i => new WakeOnLanInfo .ToList();
{
MacAddress = i
})
.ToArray();
}
public async Task<PublicSystemInfo> GetPublicSystemInfo(CancellationToken cancellationToken) public async Task<PublicSystemInfo> GetPublicSystemInfo(CancellationToken cancellationToken)
{ {
@ -1482,6 +1480,7 @@ namespace Emby.Server.Implementations
{ {
wanAddress = GetWanApiUrl(ServerConfigurationManager.Configuration.WanDdns); wanAddress = GetWanApiUrl(ServerConfigurationManager.Configuration.WanDdns);
} }
return new PublicSystemInfo return new PublicSystemInfo
{ {
Version = ApplicationVersion, Version = ApplicationVersion,

View File

@ -6,8 +6,8 @@ namespace Emby.Server.Implementations
{ {
public static readonly Dictionary<string, string> Configuration = new Dictionary<string, string> public static readonly Dictionary<string, string> Configuration = new Dictionary<string, string>
{ {
{"HttpListenerHost:DefaultRedirectPath", "web/index.html"}, { "HttpListenerHost:DefaultRedirectPath", "web/index.html" },
{"MusicBrainz:BaseUrl", "https://www.musicbrainz.org"} { "MusicBrainz:BaseUrl", "https://www.musicbrainz.org" }
}; };
} }
} }

View File

@ -44,6 +44,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo> <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">

View File

@ -58,6 +58,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
UserAgent = _appHost.ApplicationUserAgent UserAgent = _appHost.ApplicationUserAgent
}); });
} }
return Task.FromResult((Stream)File.OpenRead(url)); return Task.FromResult((Stream)File.OpenRead(url));
} }

View File

@ -425,47 +425,27 @@ namespace Emby.Server.Implementations.Networking
var localEndPoint = new IPEndPoint(IPAddress.Any, 0); var localEndPoint = new IPEndPoint(IPAddress.Any, 0);
using (var udpClient = new UdpClient(localEndPoint)) using (var udpClient = new UdpClient(localEndPoint))
{ {
var port = ((IPEndPoint)(udpClient.Client.LocalEndPoint)).Port; var port = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port;
return port; return port;
} }
} }
private List<string> _macAddresses; private List<PhysicalAddress> _macAddresses;
public List<string> GetMacAddresses() public List<PhysicalAddress> GetMacAddresses()
{ {
if (_macAddresses == null) if (_macAddresses == null)
{ {
_macAddresses = GetMacAddressesInternal(); _macAddresses = GetMacAddressesInternal().ToList();
} }
return _macAddresses; return _macAddresses;
} }
private static List<string> GetMacAddressesInternal() private static IEnumerable<PhysicalAddress> GetMacAddressesInternal()
{ => NetworkInterface.GetAllNetworkInterfaces()
return NetworkInterface.GetAllNetworkInterfaces()
.Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback) .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback)
.Select(i => .Select(x => x.GetPhysicalAddress())
{ .Where(x => x != null && x != PhysicalAddress.None);
try
{
var physicalAddress = i.GetPhysicalAddress();
if (physicalAddress == null)
{
return null;
}
return physicalAddress.ToString();
}
catch (Exception)
{
//TODO Log exception.
return null;
}
})
.Where(i => i != null)
.ToList();
}
/// <summary> /// <summary>
/// Parses the specified endpointstring. /// Parses the specified endpointstring.

View File

@ -10,8 +10,12 @@ namespace Emby.Server.Implementations
/// </summary> /// </summary>
public class ServerApplicationPaths : BaseApplicationPaths, IServerApplicationPaths public class ServerApplicationPaths : BaseApplicationPaths, IServerApplicationPaths
{ {
private string _defaultTranscodingTempPath;
private string _transcodingTempPath;
private string _internalMetadataPath;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="BaseApplicationPaths" /> class. /// Initializes a new instance of the <see cref="ServerApplicationPaths" /> class.
/// </summary> /// </summary>
public ServerApplicationPaths( public ServerApplicationPaths(
string programDataPath, string programDataPath,
@ -30,7 +34,7 @@ namespace Emby.Server.Implementations
public string ApplicationResourcesPath { get; } = AppContext.BaseDirectory; public string ApplicationResourcesPath { get; } = AppContext.BaseDirectory;
/// <summary> /// <summary>
/// Gets the path to the base root media directory /// Gets the path to the base root media directory.
/// </summary> /// </summary>
/// <value>The root folder path.</value> /// <value>The root folder path.</value>
public string RootFolderPath => Path.Combine(ProgramDataPath, "root"); public string RootFolderPath => Path.Combine(ProgramDataPath, "root");
@ -48,7 +52,7 @@ namespace Emby.Server.Implementations
public string LocalizationPath => Path.Combine(ProgramDataPath, "localization"); public string LocalizationPath => Path.Combine(ProgramDataPath, "localization");
/// <summary> /// <summary>
/// Gets the path to the People directory /// Gets the path to the People directory.
/// </summary> /// </summary>
/// <value>The people path.</value> /// <value>The people path.</value>
public string PeoplePath => Path.Combine(InternalMetadataPath, "People"); public string PeoplePath => Path.Combine(InternalMetadataPath, "People");
@ -56,37 +60,37 @@ namespace Emby.Server.Implementations
public string ArtistsPath => Path.Combine(InternalMetadataPath, "artists"); public string ArtistsPath => Path.Combine(InternalMetadataPath, "artists");
/// <summary> /// <summary>
/// Gets the path to the Genre directory /// Gets the path to the Genre directory.
/// </summary> /// </summary>
/// <value>The genre path.</value> /// <value>The genre path.</value>
public string GenrePath => Path.Combine(InternalMetadataPath, "Genre"); public string GenrePath => Path.Combine(InternalMetadataPath, "Genre");
/// <summary> /// <summary>
/// Gets the path to the Genre directory /// Gets the path to the Genre directory.
/// </summary> /// </summary>
/// <value>The genre path.</value> /// <value>The genre path.</value>
public string MusicGenrePath => Path.Combine(InternalMetadataPath, "MusicGenre"); public string MusicGenrePath => Path.Combine(InternalMetadataPath, "MusicGenre");
/// <summary> /// <summary>
/// Gets the path to the Studio directory /// Gets the path to the Studio directory.
/// </summary> /// </summary>
/// <value>The studio path.</value> /// <value>The studio path.</value>
public string StudioPath => Path.Combine(InternalMetadataPath, "Studio"); public string StudioPath => Path.Combine(InternalMetadataPath, "Studio");
/// <summary> /// <summary>
/// Gets the path to the Year directory /// Gets the path to the Year directory.
/// </summary> /// </summary>
/// <value>The year path.</value> /// <value>The year path.</value>
public string YearPath => Path.Combine(InternalMetadataPath, "Year"); public string YearPath => Path.Combine(InternalMetadataPath, "Year");
/// <summary> /// <summary>
/// Gets the path to the General IBN directory /// Gets the path to the General IBN directory.
/// </summary> /// </summary>
/// <value>The general path.</value> /// <value>The general path.</value>
public string GeneralPath => Path.Combine(InternalMetadataPath, "general"); public string GeneralPath => Path.Combine(InternalMetadataPath, "general");
/// <summary> /// <summary>
/// Gets the path to the Ratings IBN directory /// Gets the path to the Ratings IBN directory.
/// </summary> /// </summary>
/// <value>The ratings path.</value> /// <value>The ratings path.</value>
public string RatingsPath => Path.Combine(InternalMetadataPath, "ratings"); public string RatingsPath => Path.Combine(InternalMetadataPath, "ratings");
@ -98,15 +102,13 @@ namespace Emby.Server.Implementations
public string MediaInfoImagesPath => Path.Combine(InternalMetadataPath, "mediainfo"); public string MediaInfoImagesPath => Path.Combine(InternalMetadataPath, "mediainfo");
/// <summary> /// <summary>
/// Gets the path to the user configuration directory /// Gets the path to the user configuration directory.
/// </summary> /// </summary>
/// <value>The user configuration directory path.</value> /// <value>The user configuration directory path.</value>
public string UserConfigurationDirectoryPath => Path.Combine(ConfigurationDirectoryPath, "users"); public string UserConfigurationDirectoryPath => Path.Combine(ConfigurationDirectoryPath, "users");
private string _defaultTranscodingTempPath;
public string DefaultTranscodingTempPath => _defaultTranscodingTempPath ?? (_defaultTranscodingTempPath = Path.Combine(ProgramDataPath, "transcoding-temp")); public string DefaultTranscodingTempPath => _defaultTranscodingTempPath ?? (_defaultTranscodingTempPath = Path.Combine(ProgramDataPath, "transcoding-temp"));
private string _transcodingTempPath;
public string TranscodingTempPath public string TranscodingTempPath
{ {
get => _transcodingTempPath ?? (_transcodingTempPath = DefaultTranscodingTempPath); get => _transcodingTempPath ?? (_transcodingTempPath = DefaultTranscodingTempPath);
@ -139,7 +141,6 @@ namespace Emby.Server.Implementations
return path; return path;
} }
private string _internalMetadataPath;
public string InternalMetadataPath public string InternalMetadataPath
{ {
get => _internalMetadataPath ?? (_internalMetadataPath = Path.Combine(DataPath, "metadata")); get => _internalMetadataPath ?? (_internalMetadataPath = Path.Combine(DataPath, "metadata"));

View File

@ -18,7 +18,6 @@ using Jellyfin.Drawing.Skia;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -41,12 +40,12 @@ namespace Jellyfin.Server
// For backwards compatibility. // For backwards compatibility.
// Modify any input arguments now which start with single-hyphen to POSIX standard // Modify any input arguments now which start with single-hyphen to POSIX standard
// double-hyphen to allow parsing by CommandLineParser package. // double-hyphen to allow parsing by CommandLineParser package.
const string pattern = @"^(-[^-\s]{2})"; // Match -xx, not -x, not --xx, not xx const string Pattern = @"^(-[^-\s]{2})"; // Match -xx, not -x, not --xx, not xx
const string substitution = @"-$1"; // Prepend with additional single-hyphen const string Substitution = @"-$1"; // Prepend with additional single-hyphen
var regex = new Regex(pattern); var regex = new Regex(Pattern);
for (var i = 0; i < args.Length; i++) for (var i = 0; i < args.Length; i++)
{ {
args[i] = regex.Replace(args[i], substitution); args[i] = regex.Replace(args[i], Substitution);
} }
// Parse the command line arguments and either start the app or exit indicating error // Parse the command line arguments and either start the app or exit indicating error
@ -134,7 +133,7 @@ namespace Jellyfin.Server
Batteries_V2.Init(); Batteries_V2.Init();
if (raw.sqlite3_enable_shared_cache(1) != raw.SQLITE_OK) if (raw.sqlite3_enable_shared_cache(1) != raw.SQLITE_OK)
{ {
Console.WriteLine("WARN: Failed to enable shared cache for SQLite"); _logger.LogWarning("Failed to enable shared cache for SQLite");
} }
using (var appHost = new CoreAppHost( using (var appHost = new CoreAppHost(

View File

@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Net.NetworkInformation;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
@ -25,7 +25,7 @@ namespace MediaBrowser.Common.Net
/// Returns MAC Address from first Network Card in Computer /// Returns MAC Address from first Network Card in Computer
/// </summary> /// </summary>
/// <returns>[string] MAC Address</returns> /// <returns>[string] MAC Address</returns>
List<string> GetMacAddresses(); List<PhysicalAddress> GetMacAddresses();
/// <summary> /// <summary>
/// Determines whether [is in private address space] [the specified endpoint]. /// Determines whether [is in private address space] [the specified endpoint].

View File

@ -83,7 +83,7 @@ namespace MediaBrowser.Controller
void EnableLoopback(string appName); void EnableLoopback(string appName);
WakeOnLanInfo[] GetWakeOnLanInfo(); IEnumerable<WakeOnLanInfo> GetWakeOnLanInfo();
string ExpandVirtualPath(string path); string ExpandVirtualPath(string path);
string ReverseVirtualPath(string path); string ReverseVirtualPath(string path);

View File

@ -1,10 +1,47 @@
using System.Net.NetworkInformation;
namespace MediaBrowser.Model.System namespace MediaBrowser.Model.System
{ {
/// <summary>
/// Provides the MAC address and port for wake-on-LAN functionality.
/// </summary>
public class WakeOnLanInfo public class WakeOnLanInfo
{ {
/// <summary>
/// Returns the MAC address of the device.
/// </summary>
/// <value>The MAC address.</value>
public string MacAddress { get; set; } public string MacAddress { get; set; }
/// <summary>
/// Returns the wake-on-LAN port.
/// </summary>
/// <value>The wake-on-LAN port.</value>
public int Port { get; set; } public int Port { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="WakeOnLanInfo" /> class.
/// </summary>
/// <param name="macAddress">The MAC address.</param>
public WakeOnLanInfo(PhysicalAddress macAddress)
{
MacAddress = macAddress.ToString();
Port = 9;
}
/// <summary>
/// Initializes a new instance of the <see cref="WakeOnLanInfo" /> class.
/// </summary>
/// <param name="macAddress">The MAC address.</param>
public WakeOnLanInfo(string macAddress)
{
MacAddress = macAddress;
Port = 9;
}
/// <summary>
/// Initializes a new instance of the <see cref="WakeOnLanInfo" /> class.
/// </summary>
public WakeOnLanInfo() public WakeOnLanInfo()
{ {
Port = 9; Port = 9;