From b1859d41e861630a95357bf21bb46af6c4fb5686 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 7 Oct 2015 17:42:29 -0400 Subject: [PATCH] update collection menus --- .../Configuration/BaseConfigurationManager.cs | 15 +++++++++- .../HttpClientManager/HttpClientManager.cs | 25 +++++++++++----- MediaBrowser.Common/Net/HttpRequestOptions.cs | 2 ++ .../Collections/CollectionManager.cs | 29 ++++++++++--------- .../ServerConfigurationManager.cs | 18 +++--------- .../Connect/ConnectEntryPoint.cs | 19 +++++++++--- 6 files changed, 67 insertions(+), 41 deletions(-) diff --git a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs index 1b9146644a..0bcc5c711e 100644 --- a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs +++ b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; +using CommonIO; namespace MediaBrowser.Common.Implementations.Configuration { @@ -54,6 +55,7 @@ namespace MediaBrowser.Common.Implementations.Configuration /// /// The application paths. public IApplicationPaths CommonApplicationPaths { get; private set; } + public readonly IFileSystem FileSystem; /// /// The _configuration loaded @@ -96,10 +98,11 @@ namespace MediaBrowser.Common.Implementations.Configuration /// The application paths. /// The log manager. /// The XML serializer. - protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer) + protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer, IFileSystem fileSystem) { CommonApplicationPaths = applicationPaths; XmlSerializer = xmlSerializer; + FileSystem = fileSystem; Logger = logManager.GetLogger(GetType().Name); UpdateCachePath(); @@ -199,9 +202,19 @@ namespace MediaBrowser.Common.Implementations.Configuration { throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newPath)); } + + EnsureWriteAccess(newPath); } } + protected void EnsureWriteAccess(string path) + { + var file = Path.Combine(path, Guid.NewGuid().ToString()); + + FileSystem.WriteAllText(file, string.Empty); + FileSystem.DeleteFile(file); + } + private readonly ConcurrentDictionary _configurations = new ConcurrentDictionary(); private string GetConfigurationFile(string key) diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index 86aae959d7..2578602a14 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -465,7 +465,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager } catch (OperationCanceledException ex) { - var exception = GetCancellationException(options.Url, options.CancellationToken, ex); + var exception = GetCancellationException(options, options.CancellationToken, ex); var httpException = exception as HttpException; @@ -497,7 +497,10 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager /// HttpException. private HttpException GetException(WebException ex, HttpRequestOptions options) { - _logger.ErrorException("Error getting response from " + options.Url, ex); + if (options.LogErrors) + { + _logger.ErrorException("Error getting response from " + options.Url, ex); + } var exception = new HttpException(ex.Message, ex); @@ -710,10 +713,13 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager if (operationCanceledException != null) { - return GetCancellationException(options.Url, options.CancellationToken, operationCanceledException); + return GetCancellationException(options, options.CancellationToken, operationCanceledException); } - _logger.ErrorException("Error getting response from " + options.Url, ex); + if (options.LogErrors) + { + _logger.ErrorException("Error getting response from " + options.Url, ex); + } return ex; } @@ -785,18 +791,21 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager /// /// Throws the cancellation exception. /// - /// The URL. + /// The options. /// The cancellation token. /// The exception. /// Exception. - private Exception GetCancellationException(string url, CancellationToken cancellationToken, OperationCanceledException exception) + private Exception GetCancellationException(HttpRequestOptions options, CancellationToken cancellationToken, OperationCanceledException exception) { // If the HttpClient's timeout is reached, it will cancel the Task internally if (!cancellationToken.IsCancellationRequested) { - var msg = string.Format("Connection to {0} timed out", url); + var msg = string.Format("Connection to {0} timed out", options.Url); - _logger.Error(msg); + if (options.LogErrors) + { + _logger.Error(msg); + } // Throw an HttpException so that the caller doesn't think it was cancelled by user code return new HttpException(msg, exception) diff --git a/MediaBrowser.Common/Net/HttpRequestOptions.cs b/MediaBrowser.Common/Net/HttpRequestOptions.cs index 81f1d70d39..8c1f63e534 100644 --- a/MediaBrowser.Common/Net/HttpRequestOptions.cs +++ b/MediaBrowser.Common/Net/HttpRequestOptions.cs @@ -87,6 +87,7 @@ namespace MediaBrowser.Common.Net public bool BufferContent { get; set; } public bool LogRequest { get; set; } + public bool LogErrors { get; set; } public bool LogErrorResponseBody { get; set; } public bool EnableKeepAlive { get; set; } @@ -116,6 +117,7 @@ namespace MediaBrowser.Common.Net RequestHeaders = new Dictionary(StringComparer.OrdinalIgnoreCase); LogRequest = true; + LogErrors = true; CacheMode = CacheMode.None; TimeoutMs = 20000; diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs index ac27a0ab4e..8a19ee4316 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs +++ b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs @@ -172,30 +172,31 @@ namespace MediaBrowser.Server.Implementations.Collections itemList.Add(item); - if (currentLinkedChildren.Any(i => i.Id == itemId)) + if (currentLinkedChildren.All(i => i.Id != itemId)) { - throw new ArgumentException("Item already exists in collection"); + list.Add(LinkedChild.Create(item)); } - - list.Add(LinkedChild.Create(item)); } - collection.LinkedChildren.AddRange(list); + if (list.Count > 0) + { + collection.LinkedChildren.AddRange(list); - collection.UpdateRatingToContent(); + collection.UpdateRatingToContent(); - await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); + await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); - _providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(_fileSystem)); + _providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(_fileSystem)); - if (fireEvent) - { - EventHelper.FireEventIfNotNull(ItemsAddedToCollection, this, new CollectionModifiedEventArgs + if (fireEvent) { - Collection = collection, - ItemsChanged = itemList + EventHelper.FireEventIfNotNull(ItemsAddedToCollection, this, new CollectionModifiedEventArgs + { + Collection = collection, + ItemsChanged = itemList - }, _logger); + }, _logger); + } } } diff --git a/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs b/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs index 45b1595742..a7d3854e71 100644 --- a/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs +++ b/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs @@ -16,7 +16,6 @@ using System; using System.IO; using System.Linq; using CommonIO; -using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Configuration { @@ -25,7 +24,6 @@ namespace MediaBrowser.Server.Implementations.Configuration /// public class ServerConfigurationManager : BaseConfigurationManager, IServerConfigurationManager { - private readonly IFileSystem _fileSystem; /// /// Initializes a new instance of the class. @@ -33,10 +31,10 @@ namespace MediaBrowser.Server.Implementations.Configuration /// The application paths. /// The log manager. /// The XML serializer. + /// The file system. public ServerConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer, IFileSystem fileSystem) - : base(applicationPaths, logManager, xmlSerializer) + : base(applicationPaths, logManager, xmlSerializer, fileSystem) { - _fileSystem = fileSystem; UpdateItemsByNamePath(); UpdateMetadataPath(); } @@ -203,7 +201,7 @@ namespace MediaBrowser.Server.Implementations.Configuration && !string.Equals(Configuration.ItemsByNamePath ?? string.Empty, newPath)) { // Validate - if (!_fileSystem.DirectoryExists(newPath)) + if (!FileSystem.DirectoryExists(newPath)) { throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newPath)); } @@ -225,7 +223,7 @@ namespace MediaBrowser.Server.Implementations.Configuration && !string.Equals(Configuration.MetadataPath ?? string.Empty, newPath)) { // Validate - if (!_fileSystem.DirectoryExists(newPath)) + if (!FileSystem.DirectoryExists(newPath)) { throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newPath)); } @@ -234,14 +232,6 @@ namespace MediaBrowser.Server.Implementations.Configuration } } - private void EnsureWriteAccess(string path) - { - var file = Path.Combine(path, Guid.NewGuid().ToString()); - - _fileSystem.WriteAllText(file, string.Empty); - _fileSystem.DeleteFile(file); - } - public void DisableMetadataService(string service) { DisableMetadataService(typeof(Movie), Configuration, service); diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index c7e4379318..9622afb970 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -49,14 +49,23 @@ namespace MediaBrowser.Server.Implementations.Connect private async void TimerCallback(object state) { + var index = 0; + foreach (var ipLookupUrl in _ipLookups) { try { + // Sometimes whatismyipaddress might fail, but it won't do us any good having users raise alarms over it. + var logErrors = index > 0; + +#if DEBUG + logErrors = true; +#endif using (var stream = await _httpClient.Get(new HttpRequestOptions { Url = ipLookupUrl, - UserAgent = "Emby Server/" + _appHost.ApplicationVersion + UserAgent = "Emby Server/" + _appHost.ApplicationVersion, + LogErrors = logErrors }).ConfigureAwait(false)) { @@ -80,6 +89,8 @@ namespace MediaBrowser.Server.Implementations.Connect { _logger.ErrorException("Error getting connection info", ex); } + + index++; } } @@ -94,8 +105,8 @@ namespace MediaBrowser.Server.Implementations.Connect try { - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); - _fileSystem.WriteAllText(path, address, Encoding.UTF8); + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.WriteAllText(path, address, Encoding.UTF8); } catch (Exception ex) { @@ -109,7 +120,7 @@ namespace MediaBrowser.Server.Implementations.Connect try { - var endpoint = _fileSystem.ReadAllText(path, Encoding.UTF8); + var endpoint = _fileSystem.ReadAllText(path, Encoding.UTF8); if (IsValid(endpoint)) {