Fix doc releated warnings

This commit is contained in:
Bond_009 2019-08-09 23:50:40 +02:00
parent 2a58c643d2
commit 25917db07a
6 changed files with 91 additions and 76 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

@ -418,7 +418,7 @@ 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;
@ -467,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);

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

@ -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"));