From f4ad65196a255457bdd4fed645a50ed009669549 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 15 Oct 2015 11:51:00 -0400 Subject: [PATCH] update playlist drag and drop --- .../HttpClientManager/HttpClientManager.cs | 89 ++++++++----------- .../Entities/ItemImageInfo.cs | 10 +++ .../Dto/DtoService.cs | 2 - .../Photos/BaseDynamicImageProvider.cs | 10 +++ .../Playlists/PlaylistManager.cs | 14 ++- .../Savers/BaseNfoSaver.cs | 5 +- 6 files changed, 73 insertions(+), 57 deletions(-) diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index 2578602a14..c54c0a8737 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -356,7 +356,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager private async Task CacheResponse(HttpResponseInfo response, string responseCachePath) { - _fileSystem.CreateDirectory(Path.GetDirectoryName(responseCachePath)); + _fileSystem.CreateDirectory(Path.GetDirectoryName(responseCachePath)); using (var responseStream = response.Content) { @@ -465,20 +465,11 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager } catch (OperationCanceledException ex) { - var exception = GetCancellationException(options, options.CancellationToken, ex); - - var httpException = exception as HttpException; - - if (httpException != null && httpException.IsTimedOut) - { - client.LastTimeout = DateTime.UtcNow; - } - - throw exception; + throw GetCancellationException(options, client, options.CancellationToken, ex); } catch (Exception ex) { - throw GetException(ex, options); + throw GetException(ex, options, client); } finally { @@ -489,30 +480,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager } } - /// - /// Gets the exception. - /// - /// The ex. - /// The options. - /// HttpException. - private HttpException GetException(WebException ex, HttpRequestOptions options) - { - if (options.LogErrors) - { - _logger.ErrorException("Error getting response from " + options.Url, ex); - } - - var exception = new HttpException(ex.Message, ex); - - var response = ex.Response as HttpWebResponse; - if (response != null) - { - exception.StatusCode = response.StatusCode; - } - - return exception; - } - private HttpResponseInfo GetResponseInfo(HttpWebResponse httpResponse, Stream content, long? contentLength, IDisposable disposable) { return new HttpResponseInfo(disposable) @@ -603,7 +570,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager { ValidateParams(options); - _fileSystem.CreateDirectory(_appPaths.TempDirectory); + _fileSystem.CreateDirectory(_appPaths.TempDirectory); var tempFile = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid() + ".tmp"); @@ -628,6 +595,8 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager _logger.Info("HttpClientManager.GetTempFileResponse url: {0}", options.Url); } + var client = GetHttpClient(GetHostFromUrl(options.Url), options.EnableHttpCompression); + try { options.CancellationToken.ThrowIfCancellationRequested(); @@ -636,7 +605,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager { var httpResponse = (HttpWebResponse)response; - var client = GetHttpClient(GetHostFromUrl(options.Url), options.EnableHttpCompression); EnsureSuccessStatusCode(client, httpResponse, options); options.CancellationToken.ThrowIfCancellationRequested(); @@ -673,7 +641,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager catch (Exception ex) { DeleteTempFile(tempFile); - throw GetException(ex, options); + throw GetException(ex, options, client); } finally { @@ -698,14 +666,37 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager protected static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - private Exception GetException(Exception ex, HttpRequestOptions options) + private Exception GetException(Exception ex, HttpRequestOptions options, HttpClientInfo client) { + if (ex is HttpException) + { + return ex; + } + var webException = ex as WebException ?? ex.InnerException as WebException; if (webException != null) { - return GetException(webException, options); + if (options.LogErrors) + { + _logger.ErrorException("Error getting response from " + options.Url, ex); + } + + var exception = new HttpException(ex.Message, ex); + + var response = webException.Response as HttpWebResponse; + if (response != null) + { + exception.StatusCode = response.StatusCode; + + if ((int)response.StatusCode == 429) + { + client.LastTimeout = DateTime.UtcNow; + } + } + + return exception; } var operationCanceledException = ex as OperationCanceledException @@ -713,7 +704,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager if (operationCanceledException != null) { - return GetCancellationException(options, options.CancellationToken, operationCanceledException); + return GetCancellationException(options, client, options.CancellationToken, operationCanceledException); } if (options.LogErrors) @@ -792,10 +783,11 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager /// Throws the cancellation exception. /// /// The options. + /// The client. /// The cancellation token. /// The exception. /// Exception. - private Exception GetCancellationException(HttpRequestOptions options, CancellationToken cancellationToken, OperationCanceledException exception) + private Exception GetCancellationException(HttpRequestOptions options, HttpClientInfo client, CancellationToken cancellationToken, OperationCanceledException exception) { // If the HttpClient's timeout is reached, it will cancel the Task internally if (!cancellationToken.IsCancellationRequested) @@ -807,6 +799,8 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager _logger.Error(msg); } + client.LastTimeout = DateTime.UtcNow; + // Throw an HttpException so that the caller doesn't think it was cancelled by user code return new HttpException(msg, exception) { @@ -825,15 +819,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager if (!isSuccessful) { - if ((int) statusCode == 429) - { - throw new HttpException(response.StatusDescription) - { - IsTimedOut = true - }; - } - - if (statusCode == HttpStatusCode.RequestEntityTooLarge) if (options.LogErrorResponseBody) { try diff --git a/MediaBrowser.Controller/Entities/ItemImageInfo.cs b/MediaBrowser.Controller/Entities/ItemImageInfo.cs index b36b818ffe..9f3074c5e6 100644 --- a/MediaBrowser.Controller/Entities/ItemImageInfo.cs +++ b/MediaBrowser.Controller/Entities/ItemImageInfo.cs @@ -1,5 +1,6 @@ using MediaBrowser.Model.Entities; using System; +using System.Runtime.Serialization; namespace MediaBrowser.Controller.Entities { @@ -22,5 +23,14 @@ namespace MediaBrowser.Controller.Entities /// /// The date modified. public DateTime DateModified { get; set; } + + [IgnoreDataMember] + public bool IsLocalFile + { + get + { + return true; + } + } } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index a880914a3e..5c0b5e5b24 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1748,8 +1748,6 @@ namespace MediaBrowser.Server.Implementations.Dto return; } - var path = imageInfo.Path; - ImageSize size; try diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs index 47ec47f8f6..37ee2b3190 100644 --- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs @@ -248,6 +248,11 @@ namespace MediaBrowser.Server.Implementations.Photos if (image != null) { + if (!image.IsLocalFile) + { + return false; + } + if (!FileSystem.ContainsSubPath(item.GetInternalMetadataPath(), image.Path)) { return false; @@ -269,6 +274,11 @@ namespace MediaBrowser.Server.Implementations.Photos if (image != null) { + if (!image.IsLocalFile) + { + return false; + } + if (!FileSystem.ContainsSubPath(item.GetInternalMetadataPath(), image.Path)) { return false; diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs index e43978fa0a..d9b3ed7551 100644 --- a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs +++ b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs @@ -111,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.Playlists try { - _fileSystem.CreateDirectory(path); + _fileSystem.CreateDirectory(path); var playlist = new Playlist { @@ -151,7 +151,7 @@ namespace MediaBrowser.Server.Implementations.Playlists private string GetTargetPath(string path) { - while (_fileSystem.DirectoryExists(path)) + while (_fileSystem.DirectoryExists(path)) { path += "1"; } @@ -243,6 +243,16 @@ namespace MediaBrowser.Server.Implementations.Playlists var oldIndex = children.FindIndex(i => string.Equals(entryId, i.Item1.Id, StringComparison.OrdinalIgnoreCase)); + if (oldIndex == newIndex) + { + return; + } + + if (newIndex > oldIndex) + { + newIndex--; + } + var item = playlist.LinkedChildren[oldIndex]; playlist.LinkedChildren.Remove(item); diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index a49b17b342..0e5a74a9a0 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -893,7 +893,10 @@ namespace MediaBrowser.XbmcMetadata.Savers foreach (var backdrop in item.GetImages(ImageType.Backdrop)) { - writer.WriteElementString("fanart", GetPathToSave(backdrop.Path, libraryManager, config)); + if (backdrop.IsLocalFile) + { + writer.WriteElementString("fanart", GetPathToSave(backdrop.Path, libraryManager, config)); + } } writer.WriteEndElement();