Prechádzať zdrojové kódy

Add dlna headers to static responses

Luke Pulverenti 11 rokov pred
rodič
commit
4205dcac9d
25 zmenil súbory, kde vykonal 70 pridanie a 58 odobranie
  1. 1 1
      MediaBrowser.Api/Images/ImageService.cs
  2. 2 1
      MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
  3. 2 1
      MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
  4. 1 0
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  5. 15 0
      MediaBrowser.Controller/Providers/IHasChangeMonitor.cs
  6. 0 11
      MediaBrowser.Controller/Providers/IMetadataProvider.cs
  7. 1 2
      MediaBrowser.Controller/Providers/IProviderManager.cs
  8. 3 2
      MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
  9. 2 1
      MediaBrowser.Providers/Games/GameSystemXmlParser.cs
  10. 2 1
      MediaBrowser.Providers/Games/GameXmlParser.cs
  11. 3 5
      MediaBrowser.Providers/Manager/ImageSaver.cs
  12. 5 5
      MediaBrowser.Providers/Manager/ItemImageProvider.cs
  13. 7 9
      MediaBrowser.Providers/Manager/MetadataService.cs
  14. 3 4
      MediaBrowser.Providers/Manager/ProviderManager.cs
  15. 2 1
      MediaBrowser.Providers/Movies/FanArtMovieProvider.cs
  16. 2 2
      MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs
  17. 3 2
      MediaBrowser.Providers/Movies/MovieDbProvider.cs
  18. 2 1
      MediaBrowser.Providers/Music/FanArtArtistProvider.cs
  19. 2 1
      MediaBrowser.Providers/Music/SoundtrackPostScanTask.cs
  20. 2 1
      MediaBrowser.Providers/TV/FanArtTVProvider.cs
  21. 1 1
      MediaBrowser.Providers/TV/TvdbPrescanTask.cs
  22. 1 1
      MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs
  23. 2 1
      MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
  24. 3 2
      MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs
  25. 3 2
      MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs

+ 1 - 1
MediaBrowser.Api/Images/ImageService.cs

@@ -797,7 +797,7 @@ namespace MediaBrowser.Api.Images
                 // Handle image/png; charset=utf-8
                 // Handle image/png; charset=utf-8
                 mimeType = mimeType.Split(';').FirstOrDefault();
                 mimeType = mimeType.Split(';').FirstOrDefault();
 
 
-                await _providerManager.SaveImage(entity, memoryStream, mimeType, imageType, null, null, CancellationToken.None).ConfigureAwait(false);
+                await _providerManager.SaveImage(entity, memoryStream, mimeType, imageType, null, CancellationToken.None).ConfigureAwait(false);
 
 
                 await entity.RefreshMetadata(new MetadataRefreshOptions
                 await entity.RefreshMetadata(new MetadataRefreshOptions
                 {
                 {

+ 2 - 1
MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs

@@ -193,6 +193,8 @@ namespace MediaBrowser.Api.Playback.Progressive
 
 
             if (request.Static && state.IsRemote)
             if (request.Static && state.IsRemote)
             {
             {
+                AddDlnaHeaders(state, responseHeaders, true);
+                
                 return GetStaticRemoteStreamResult(state.MediaPath, responseHeaders, isHeadRequest).Result;
                 return GetStaticRemoteStreamResult(state.MediaPath, responseHeaders, isHeadRequest).Result;
             }
             }
 
 
@@ -257,7 +259,6 @@ namespace MediaBrowser.Api.Playback.Progressive
                 var result = new StaticRemoteStreamWriter(response, httpClient);
                 var result = new StaticRemoteStreamWriter(response, httpClient);
 
 
                 result.Options["Content-Type"] = contentType;
                 result.Options["Content-Type"] = contentType;
-                AddDlnaHeaders(state, responseHeaders, isStatic);
 
 
                 // Add the response headers to the result object
                 // Add the response headers to the result object
                 foreach (var header in responseHeaders)
                 foreach (var header in responseHeaders)

+ 2 - 1
MediaBrowser.Controller/Entities/Audio/MusicArtist.cs

@@ -48,12 +48,13 @@ namespace MediaBrowser.Controller.Entities.Audio
             }
             }
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         protected override Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool? recursive = null, bool forceRefreshMetadata = false)
         protected override Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool? recursive = null, bool forceRefreshMetadata = false)
         {
         {
             if (IsAccessedByName)
             if (IsAccessedByName)
             {
             {
                 // Should never get in here anyway
                 // Should never get in here anyway
-                return Task.FromResult(true);
+                return _cachedTask;
             }
             }
 
 
             return base.ValidateChildrenInternal(progress, cancellationToken, recursive, forceRefreshMetadata);
             return base.ValidateChildrenInternal(progress, cancellationToken, recursive, forceRefreshMetadata);

+ 1 - 0
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -145,6 +145,7 @@
     <Compile Include="Persistence\MediaStreamQuery.cs" />
     <Compile Include="Persistence\MediaStreamQuery.cs" />
     <Compile Include="Providers\ICustomMetadataProvider.cs" />
     <Compile Include="Providers\ICustomMetadataProvider.cs" />
     <Compile Include="Providers\IDynamicInfoProvider.cs" />
     <Compile Include="Providers\IDynamicInfoProvider.cs" />
+    <Compile Include="Providers\IHasChangeMonitor.cs" />
     <Compile Include="Providers\IHasMetadata.cs" />
     <Compile Include="Providers\IHasMetadata.cs" />
     <Compile Include="Providers\IImageProvider.cs" />
     <Compile Include="Providers\IImageProvider.cs" />
     <Compile Include="Providers\ILocalMetadataProvider.cs" />
     <Compile Include="Providers\ILocalMetadataProvider.cs" />

+ 15 - 0
MediaBrowser.Controller/Providers/IHasChangeMonitor.cs

@@ -0,0 +1,15 @@
+using System;
+
+namespace MediaBrowser.Controller.Providers
+{
+    public interface IHasChangeMonitor
+    {
+        /// <summary>
+        /// Determines whether the specified item has changed.
+        /// </summary>
+        /// <param name="item">The item.</param>
+        /// <param name="date">The date.</param>
+        /// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
+        bool HasChanged(IHasMetadata item, DateTime date);
+    }
+}

+ 0 - 11
MediaBrowser.Controller/Providers/IMetadataProvider.cs

@@ -19,17 +19,6 @@ namespace MediaBrowser.Controller.Providers
     {
     {
     }
     }
 
 
-    public interface IHasChangeMonitor
-    {
-        /// <summary>
-        /// Determines whether the specified item has changed.
-        /// </summary>
-        /// <param name="item">The item.</param>
-        /// <param name="date">The date.</param>
-        /// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
-        bool HasChanged(IHasMetadata item, DateTime date);
-    }
-
     public interface IHasOrder
     public interface IHasOrder
     {
     {
         int Order { get; }
         int Order { get; }

+ 1 - 2
MediaBrowser.Controller/Providers/IProviderManager.cs

@@ -53,10 +53,9 @@ namespace MediaBrowser.Controller.Providers
         /// <param name="mimeType">Type of the MIME.</param>
         /// <param name="mimeType">Type of the MIME.</param>
         /// <param name="type">The type.</param>
         /// <param name="type">The type.</param>
         /// <param name="imageIndex">Index of the image.</param>
         /// <param name="imageIndex">Index of the image.</param>
-        /// <param name="sourceUrl">The source URL.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
-        Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, string sourceUrl, CancellationToken cancellationToken);
+        Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
         /// Adds the metadata providers.
         /// Adds the metadata providers.

+ 3 - 2
MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs

@@ -168,7 +168,8 @@ namespace MediaBrowser.Providers.BoxSets
             }
             }
             return mainResult;
             return mainResult;
         }
         }
-        
+
+        private readonly Task _cachedTask = Task.FromResult(true);
         internal Task EnsureInfo(string tmdbId, string preferredMetadataLanguage, CancellationToken cancellationToken)
         internal Task EnsureInfo(string tmdbId, string preferredMetadataLanguage, CancellationToken cancellationToken)
         {
         {
             var path = GetDataFilePath(_config.ApplicationPaths, tmdbId, preferredMetadataLanguage);
             var path = GetDataFilePath(_config.ApplicationPaths, tmdbId, preferredMetadataLanguage);
@@ -180,7 +181,7 @@ namespace MediaBrowser.Providers.BoxSets
                 // If it's recent or automatic updates are enabled, don't re-download
                 // If it's recent or automatic updates are enabled, don't re-download
                 if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 {
                 {
-                    return Task.FromResult(true);
+                    return _cachedTask;
                 }
                 }
             }
             }
 
 

+ 2 - 1
MediaBrowser.Providers/Games/GameSystemXmlParser.cs

@@ -15,13 +15,14 @@ namespace MediaBrowser.Providers.Games
         {
         {
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         public Task FetchAsync(GameSystem item, string metadataFile, CancellationToken cancellationToken)
         public Task FetchAsync(GameSystem item, string metadataFile, CancellationToken cancellationToken)
         {
         {
             Fetch(item, metadataFile, cancellationToken);
             Fetch(item, metadataFile, cancellationToken);
 
 
             cancellationToken.ThrowIfCancellationRequested();
             cancellationToken.ThrowIfCancellationRequested();
 
 
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 2 - 1
MediaBrowser.Providers/Games/GameXmlParser.cs

@@ -21,13 +21,14 @@ namespace MediaBrowser.Providers.Games
         {
         {
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         public Task FetchAsync(Game item, string metadataFile, CancellationToken cancellationToken)
         public Task FetchAsync(Game item, string metadataFile, CancellationToken cancellationToken)
         {
         {
             Fetch(item, metadataFile, cancellationToken);
             Fetch(item, metadataFile, cancellationToken);
 
 
             cancellationToken.ThrowIfCancellationRequested();
             cancellationToken.ThrowIfCancellationRequested();
 
 
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 3 - 5
MediaBrowser.Providers/Manager/ImageSaver.cs

@@ -62,11 +62,10 @@ namespace MediaBrowser.Providers.Manager
         /// <param name="mimeType">Type of the MIME.</param>
         /// <param name="mimeType">Type of the MIME.</param>
         /// <param name="type">The type.</param>
         /// <param name="type">The type.</param>
         /// <param name="imageIndex">Index of the image.</param>
         /// <param name="imageIndex">Index of the image.</param>
-        /// <param name="sourceUrl">The source URL.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
         /// <exception cref="System.ArgumentNullException">mimeType</exception>
         /// <exception cref="System.ArgumentNullException">mimeType</exception>
-        public async Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, string sourceUrl, CancellationToken cancellationToken)
+        public async Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken)
         {
         {
             if (string.IsNullOrEmpty(mimeType))
             if (string.IsNullOrEmpty(mimeType))
             {
             {
@@ -155,7 +154,7 @@ namespace MediaBrowser.Providers.Manager
             }
             }
 
 
             // Set the path into the item
             // Set the path into the item
-            SetImagePath(item, type, imageIndex, paths[0], sourceUrl);
+            SetImagePath(item, type, imageIndex, paths[0]);
 
 
             // Delete the current path
             // Delete the current path
             if (!string.IsNullOrEmpty(currentPath) && !paths.Contains(currentPath, StringComparer.OrdinalIgnoreCase))
             if (!string.IsNullOrEmpty(currentPath) && !paths.Contains(currentPath, StringComparer.OrdinalIgnoreCase))
@@ -271,11 +270,10 @@ namespace MediaBrowser.Providers.Manager
         /// <param name="type">The type.</param>
         /// <param name="type">The type.</param>
         /// <param name="imageIndex">Index of the image.</param>
         /// <param name="imageIndex">Index of the image.</param>
         /// <param name="path">The path.</param>
         /// <param name="path">The path.</param>
-        /// <param name="sourceUrl">The source URL.</param>
         /// <exception cref="System.ArgumentNullException">imageIndex
         /// <exception cref="System.ArgumentNullException">imageIndex
         /// or
         /// or
         /// imageIndex</exception>
         /// imageIndex</exception>
-        private void SetImagePath(BaseItem item, ImageType type, int? imageIndex, string path, string sourceUrl)
+        private void SetImagePath(BaseItem item, ImageType type, int? imageIndex, string path)
         {
         {
             switch (type)
             switch (type)
             {
             {

+ 5 - 5
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -114,13 +114,13 @@ namespace MediaBrowser.Providers.Manager
                                 var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read,
                                 var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read,
                                     FileShare.Read, true);
                                     FileShare.Read, true);
 
 
-                                await _providerManager.SaveImage((BaseItem)item, stream, mimeType, imageType, null, Guid.NewGuid().ToString(), cancellationToken).ConfigureAwait(false);
+                                await _providerManager.SaveImage((BaseItem)item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
                             }
                             }
                             else
                             else
                             {
                             {
                                 var mimeType = "image/" + response.Format.ToString().ToLower();
                                 var mimeType = "image/" + response.Format.ToString().ToLower();
 
 
-                                await _providerManager.SaveImage((BaseItem)item, response.Stream, mimeType, imageType, null, Guid.NewGuid().ToString(), cancellationToken).ConfigureAwait(false);
+                                await _providerManager.SaveImage((BaseItem)item, response.Stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
                             }
                             }
 
 
                             result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                             result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
@@ -337,7 +337,7 @@ namespace MediaBrowser.Providers.Manager
                 {
                 {
                     var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
                     var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
 
 
-                    await _providerManager.SaveImage((BaseItem)item, response.Content, response.ContentType, type, null, url, cancellationToken).ConfigureAwait(false);
+                    await _providerManager.SaveImage((BaseItem)item, response.Content, response.ContentType, type, null, cancellationToken).ConfigureAwait(false);
 
 
                     result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                     result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                     break;
                     break;
@@ -371,7 +371,7 @@ namespace MediaBrowser.Providers.Manager
                 {
                 {
                     var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
                     var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
 
 
-                    await _providerManager.SaveImage((BaseItem)item, response.Content, response.ContentType, imageType, null, url, cancellationToken).ConfigureAwait(false);
+                    await _providerManager.SaveImage((BaseItem)item, response.Content, response.ContentType, imageType, null, cancellationToken).ConfigureAwait(false);
                     result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                     result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                     break;
                     break;
                 }
                 }
@@ -404,7 +404,7 @@ namespace MediaBrowser.Providers.Manager
                 {
                 {
                     var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
                     var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
 
 
-                    await _providerManager.SaveImage((BaseItem)item, response.Content, response.ContentType, imageType, null, url, cancellationToken).ConfigureAwait(false);
+                    await _providerManager.SaveImage((BaseItem)item, response.Content, response.ContentType, imageType, null, cancellationToken).ConfigureAwait(false);
                     result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                     result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                     break;
                     break;
                 }
                 }

+ 7 - 9
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -56,12 +56,10 @@ namespace MediaBrowser.Providers.Manager
         public async Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
         public async Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
         {
         {
             var itemOfType = (TItemType)item;
             var itemOfType = (TItemType)item;
-
             var config = GetMetadataOptions(itemOfType);
             var config = GetMetadataOptions(itemOfType);
 
 
             var updateType = ItemUpdateType.Unspecified;
             var updateType = ItemUpdateType.Unspecified;
-            var lastResult = GetLastResult(item.Id);
-            var refreshResult = lastResult;
+            var refreshResult = GetLastResult(item.Id);
             refreshResult.LastErrorMessage = string.Empty;
             refreshResult.LastErrorMessage = string.Empty;
             refreshResult.LastStatus = ProviderRefreshStatus.Success;
             refreshResult.LastStatus = ProviderRefreshStatus.Success;
 
 
@@ -90,8 +88,8 @@ namespace MediaBrowser.Providers.Manager
             if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
             if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
             {
             {
                 updateType = updateType | BeforeMetadataRefresh(itemOfType);
                 updateType = updateType | BeforeMetadataRefresh(itemOfType);
-                
-                var providers = GetProviders(item, lastResult.DateLastMetadataRefresh.HasValue, refreshOptions).ToList();
+
+                var providers = GetProviders(item, refreshResult.DateLastMetadataRefresh.HasValue, refreshOptions).ToList();
 
 
                 if (providers.Count > 0)
                 if (providers.Count > 0)
                 {
                 {
@@ -109,7 +107,7 @@ namespace MediaBrowser.Providers.Manager
             // Next run remote image providers, but only if local image providers didn't throw an exception
             // Next run remote image providers, but only if local image providers didn't throw an exception
             if (!localImagesFailed && refreshOptions.ImageRefreshMode != ImageRefreshMode.ValidationOnly)
             if (!localImagesFailed && refreshOptions.ImageRefreshMode != ImageRefreshMode.ValidationOnly)
             {
             {
-                var providers = GetNonLocalImageProviders(item, allImageProviders, lastResult.DateLastImagesRefresh.HasValue, refreshOptions).ToList();
+                var providers = GetNonLocalImageProviders(item, allImageProviders, refreshResult.DateLastImagesRefresh, refreshOptions).ToList();
 
 
                 if (providers.Count > 0)
                 if (providers.Count > 0)
                 {
                 {
@@ -205,13 +203,13 @@ namespace MediaBrowser.Providers.Manager
             return providers;
             return providers;
         }
         }
 
 
-        protected virtual IEnumerable<IImageProvider> GetNonLocalImageProviders(IHasMetadata item, IEnumerable<IImageProvider> allImageProviders, bool hasRefreshedImages, ImageRefreshOptions options)
+        protected virtual IEnumerable<IImageProvider> GetNonLocalImageProviders(IHasMetadata item, IEnumerable<IImageProvider> allImageProviders, DateTime? dateLastImageRefresh, ImageRefreshOptions options)
         {
         {
             // Get providers to refresh
             // Get providers to refresh
             var providers = allImageProviders.Where(i => !(i is ILocalImageProvider)).ToList();
             var providers = allImageProviders.Where(i => !(i is ILocalImageProvider)).ToList();
 
 
             // Run all if either of these flags are true
             // Run all if either of these flags are true
-            var runAllProviders = options.ImageRefreshMode == ImageRefreshMode.FullRefresh || !hasRefreshedImages;
+            var runAllProviders = options.ImageRefreshMode == ImageRefreshMode.FullRefresh || !dateLastImageRefresh.HasValue;
 
 
             if (!runAllProviders)
             if (!runAllProviders)
             {
             {
@@ -219,7 +217,7 @@ namespace MediaBrowser.Providers.Manager
                 var currentItem = item;
                 var currentItem = item;
 
 
                 providers = providers.OfType<IHasChangeMonitor>()
                 providers = providers.OfType<IHasChangeMonitor>()
-                    .Where(i => i.HasChanged(currentItem, currentItem.DateLastSaved))
+                    .Where(i => i.HasChanged(currentItem, dateLastImageRefresh.Value))
                     .Cast<IImageProvider>()
                     .Cast<IImageProvider>()
                     .ToList();
                     .ToList();
             }
             }

+ 3 - 4
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -364,7 +364,7 @@ namespace MediaBrowser.Providers.Manager
 
 
             }).ConfigureAwait(false);
             }).ConfigureAwait(false);
 
 
-            await SaveImage(item, response.Content, response.ContentType, type, imageIndex, url, cancellationToken)
+            await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken)
                     .ConfigureAwait(false);
                     .ConfigureAwait(false);
         }
         }
 
 
@@ -376,12 +376,11 @@ namespace MediaBrowser.Providers.Manager
         /// <param name="mimeType">Type of the MIME.</param>
         /// <param name="mimeType">Type of the MIME.</param>
         /// <param name="type">The type.</param>
         /// <param name="type">The type.</param>
         /// <param name="imageIndex">Index of the image.</param>
         /// <param name="imageIndex">Index of the image.</param>
-        /// <param name="sourceUrl">The source URL.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
-        public Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, string sourceUrl, CancellationToken cancellationToken)
+        public Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken)
         {
         {
-            return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, source, mimeType, type, imageIndex, sourceUrl, cancellationToken);
+            return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, source, mimeType, type, imageIndex, cancellationToken);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 2 - 1
MediaBrowser.Providers/Movies/FanArtMovieProvider.cs

@@ -251,6 +251,7 @@ namespace MediaBrowser.Providers.Movies
             }
             }
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         internal Task EnsureMovieXml(string tmdbId, CancellationToken cancellationToken)
         internal Task EnsureMovieXml(string tmdbId, CancellationToken cancellationToken)
         {
         {
             var path = GetFanartXmlPath(tmdbId);
             var path = GetFanartXmlPath(tmdbId);
@@ -261,7 +262,7 @@ namespace MediaBrowser.Providers.Movies
             {
             {
                 if (ConfigurationManager.Configuration.EnableFanArtUpdates || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 if (ConfigurationManager.Configuration.EnableFanArtUpdates || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 {
                 {
-                    return Task.FromResult(true);
+                    return _cachedTask;
                 }
                 }
             }
             }
 
 

+ 2 - 2
MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs

@@ -202,7 +202,7 @@ namespace MediaBrowser.Providers.Movies
 
 
                 }).ConfigureAwait(false);
                 }).ConfigureAwait(false);
 
 
-                await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(url), ImageType.Primary, null, url, cancellationToken)
+                await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(url), ImageType.Primary, null, cancellationToken)
                                     .ConfigureAwait(false);
                                     .ConfigureAwait(false);
             }
             }
 
 
@@ -233,7 +233,7 @@ namespace MediaBrowser.Providers.Movies
 
 
                     }).ConfigureAwait(false);
                     }).ConfigureAwait(false);
 
 
-                    await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(url), ImageType.Backdrop, null, url, cancellationToken)
+                    await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(url), ImageType.Backdrop, null, cancellationToken)
                       .ConfigureAwait(false);
                       .ConfigureAwait(false);
 
 
                     if (item.BackdropImagePaths.Count >= backdropLimit)
                     if (item.BackdropImagePaths.Count >= backdropLimit)

+ 3 - 2
MediaBrowser.Providers/Movies/MovieDbProvider.cs

@@ -366,6 +366,7 @@ namespace MediaBrowser.Providers.Movies
             JsonSerializer.SerializeToFile(mainResult, dataFilePath);
             JsonSerializer.SerializeToFile(mainResult, dataFilePath);
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         internal Task EnsureMovieInfo(BaseItem item, CancellationToken cancellationToken)
         internal Task EnsureMovieInfo(BaseItem item, CancellationToken cancellationToken)
         {
         {
             var path = GetDataFilePath(item);
             var path = GetDataFilePath(item);
@@ -377,7 +378,7 @@ namespace MediaBrowser.Providers.Movies
                 // If it's recent or automatic updates are enabled, don't re-download
                 // If it's recent or automatic updates are enabled, don't re-download
                 if ((ConfigurationManager.Configuration.EnableTmdbUpdates) || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 if ((ConfigurationManager.Configuration.EnableTmdbUpdates) || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 {
                 {
-                    return Task.FromResult(true);
+                    return _cachedTask;
                 }
                 }
             }
             }
 
 
@@ -385,7 +386,7 @@ namespace MediaBrowser.Providers.Movies
 
 
             if (string.IsNullOrEmpty(id))
             if (string.IsNullOrEmpty(id))
             {
             {
-                return Task.FromResult(true);
+                return _cachedTask;
             }
             }
 
 
             return DownloadMovieInfo(id, item.GetPreferredMetadataLanguage(), cancellationToken);
             return DownloadMovieInfo(id, item.GetPreferredMetadataLanguage(), cancellationToken);

+ 2 - 1
MediaBrowser.Providers/Music/FanArtArtistProvider.cs

@@ -391,6 +391,7 @@ namespace MediaBrowser.Providers.Music
             return false;
             return false;
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         internal Task EnsureMovieXml(string musicBrainzId, CancellationToken cancellationToken)
         internal Task EnsureMovieXml(string musicBrainzId, CancellationToken cancellationToken)
         {
         {
             var xmlPath = GetArtistXmlPath(_config.ApplicationPaths, musicBrainzId);
             var xmlPath = GetArtistXmlPath(_config.ApplicationPaths, musicBrainzId);
@@ -401,7 +402,7 @@ namespace MediaBrowser.Providers.Music
             {
             {
                 if (_config.Configuration.EnableFanArtUpdates || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 if (_config.Configuration.EnableFanArtUpdates || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 {
                 {
-                    return Task.FromResult(true);
+                    return _cachedTask;
                 }
                 }
             }
             }
 
 

+ 2 - 1
MediaBrowser.Providers/Music/SoundtrackPostScanTask.cs

@@ -21,11 +21,12 @@ namespace MediaBrowser.Providers.Music
             _libraryManager = libraryManager;
             _libraryManager = libraryManager;
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
         public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
         {
         {
             RunInternal(progress, cancellationToken);
             RunInternal(progress, cancellationToken);
 
 
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         private void RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
         private void RunInternal(IProgress<double> progress, CancellationToken cancellationToken)

+ 2 - 1
MediaBrowser.Providers/TV/FanArtTVProvider.cs

@@ -278,6 +278,7 @@ namespace MediaBrowser.Providers.TV
             }
             }
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         internal Task EnsureSeriesXml(string tvdbId, CancellationToken cancellationToken)
         internal Task EnsureSeriesXml(string tvdbId, CancellationToken cancellationToken)
         {
         {
             var xmlPath = GetSeriesDataPath(ConfigurationManager.ApplicationPaths, tvdbId);
             var xmlPath = GetSeriesDataPath(ConfigurationManager.ApplicationPaths, tvdbId);
@@ -288,7 +289,7 @@ namespace MediaBrowser.Providers.TV
             {
             {
                 if (ConfigurationManager.Configuration.EnableFanArtUpdates || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 if (ConfigurationManager.Configuration.EnableFanArtUpdates || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
                 {
                 {
-                    return Task.FromResult(true);
+                    return _cachedTask;
                 }
                 }
             }
             }
 
 

+ 1 - 1
MediaBrowser.Providers/TV/TvdbPrescanTask.cs

@@ -329,7 +329,7 @@ namespace MediaBrowser.Providers.TV
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
         private Task UpdateSeries(string id, string seriesDataPath, long? lastTvDbUpdateTime, string preferredMetadataLanguage, CancellationToken cancellationToken)
         private Task UpdateSeries(string id, string seriesDataPath, long? lastTvDbUpdateTime, string preferredMetadataLanguage, CancellationToken cancellationToken)
         {
         {
-            _logger.Info("Updating movie from tmdb " + id + ", language " + preferredMetadataLanguage);
+            _logger.Info("Updating series from tvdb " + id + ", language " + preferredMetadataLanguage);
 
 
             seriesDataPath = Path.Combine(seriesDataPath, id);
             seriesDataPath = Path.Combine(seriesDataPath, id);
 
 

+ 1 - 1
MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs

@@ -133,7 +133,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
                 // Dummy up the original url
                 // Dummy up the original url
                 var url = item.ServiceName + recordingInfo.Id;
                 var url = item.ServiceName + recordingInfo.Id;
 
 
-                await _providerManager.SaveImage((BaseItem)item, imageStream, contentType, ImageType.Primary, null, url, cancellationToken).ConfigureAwait(false);
+                await _providerManager.SaveImage((BaseItem)item, imageStream, contentType, ImageType.Primary, null, cancellationToken).ConfigureAwait(false);
                 return true;
                 return true;
             }
             }
 
 

+ 2 - 1
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -320,6 +320,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
             }
             }
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         /// <summary>
         /// <summary>
         /// Saves the critic reviews.
         /// Saves the critic reviews.
         /// </summary>
         /// </summary>
@@ -334,7 +335,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
 
 
             _jsonSerializer.SerializeToFile(criticReviews.ToList(), path);
             _jsonSerializer.SerializeToFile(criticReviews.ToList(), path);
 
 
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 3 - 2
MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs

@@ -91,10 +91,11 @@ namespace MediaBrowser.Server.Implementations.Roku
             }, cancellationToken);
             }, cancellationToken);
         }
         }
 
 
+        private readonly Task _cachedTask = Task.FromResult(true);
         public Task SendLibraryUpdateInfo(LibraryUpdateInfo info, CancellationToken cancellationToken)
         public Task SendLibraryUpdateInfo(LibraryUpdateInfo info, CancellationToken cancellationToken)
         {
         {
             // Roku probably won't care about this
             // Roku probably won't care about this
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         public Task SendRestartRequiredNotification(CancellationToken cancellationToken)
         public Task SendRestartRequiredNotification(CancellationToken cancellationToken)
@@ -110,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.Roku
         public Task SendUserDataChangeInfo(UserDataChangeInfo info, CancellationToken cancellationToken)
         public Task SendUserDataChangeInfo(UserDataChangeInfo info, CancellationToken cancellationToken)
         {
         {
             // Roku probably won't care about this
             // Roku probably won't care about this
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         public Task SendServerShutdownNotification(CancellationToken cancellationToken)
         public Task SendServerShutdownNotification(CancellationToken cancellationToken)

+ 3 - 2
MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs

@@ -81,7 +81,8 @@ namespace MediaBrowser.Server.Implementations.WebSocket
                 OnReceive(json);
                 OnReceive(json);
             }
             }
         }
         }
-        
+
+        private readonly Task _cachedTask = Task.FromResult(true);
         /// <summary>
         /// <summary>
         /// Sends the async.
         /// Sends the async.
         /// </summary>
         /// </summary>
@@ -94,7 +95,7 @@ namespace MediaBrowser.Server.Implementations.WebSocket
         {
         {
             UserContext.Send(bytes);
             UserContext.Send(bytes);
 
 
-            return Task.FromResult(true);
+            return _cachedTask;
         }
         }
 
 
         /// <summary>
         /// <summary>