mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-27 01:50:53 +01:00
Add comments, minor cleanup, add tests
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
#nullable disable
|
||||
|
||||
#pragma warning disable CA1002, CS1591
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@@ -25,6 +23,9 @@ using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
/// <summary>
|
||||
/// Utilities for managing images attached to items.
|
||||
/// </summary>
|
||||
public class ItemImageProvider
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
@@ -47,6 +48,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
ImageType.Thumb
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ItemImageProvider"/> class.
|
||||
/// </summary>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="providerManager">The provider manager for interacting with provider image references.</param>
|
||||
/// <param name="fileSystem">The filesystem.</param>
|
||||
public ItemImageProvider(ILogger logger, IProviderManager providerManager, IFileSystem fileSystem)
|
||||
{
|
||||
_logger = logger;
|
||||
@@ -54,6 +61,13 @@ namespace MediaBrowser.Providers.Manager
|
||||
_fileSystem = fileSystem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies existing images have valid paths and adds any new local images provided.
|
||||
/// </summary>
|
||||
/// <param name="item">The <see cref="BaseItem"/> to validate images for.</param>
|
||||
/// <param name="providers">The providers to use, must include <see cref="ILocalImageProvider"/>(s) for local scanning.</param>
|
||||
/// <param name="directoryService">The directory service for <see cref="ILocalImageProvider"/>s to use.</param>
|
||||
/// <returns><c>true</c> if changes were made to the item; otherwise <c>false</c>.</returns>
|
||||
public bool ValidateImages(BaseItem item, IEnumerable<IImageProvider> providers, IDirectoryService directoryService)
|
||||
{
|
||||
var hasChanges = false;
|
||||
@@ -73,6 +87,15 @@ namespace MediaBrowser.Providers.Manager
|
||||
return hasChanges;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Refreshes from the providers according to the given options.
|
||||
/// </summary>
|
||||
/// <param name="item">The <see cref="BaseItem"/> to gather images for.</param>
|
||||
/// <param name="libraryOptions">The library options.</param>
|
||||
/// <param name="providers">The providers to query for images.</param>
|
||||
/// <param name="refreshOptions">The refresh options.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>The refresh result.</returns>
|
||||
public async Task<RefreshResult> RefreshImages(
|
||||
BaseItem item,
|
||||
LibraryOptions libraryOptions,
|
||||
@@ -118,7 +141,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Refreshes from provider.
|
||||
/// Refreshes from a dynamic provider.
|
||||
/// </summary>
|
||||
private async Task RefreshFromProvider(
|
||||
BaseItem item,
|
||||
@@ -234,7 +257,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Refreshes from provider.
|
||||
/// Refreshes from a remote provider.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="provider">The provider.</param>
|
||||
@@ -305,12 +328,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
|
||||
minWidth = savedOptions.GetMinWidth(ImageType.Backdrop);
|
||||
await DownloadBackdrops(item, ImageType.Backdrop, backdropLimit, provider, result, list, minWidth, cancellationToken).ConfigureAwait(false);
|
||||
await DownloadMultiImages(item, ImageType.Backdrop, backdropLimit, provider, result, list, minWidth, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (item is IHasScreenshots hasScreenshots)
|
||||
if (item is IHasScreenshots)
|
||||
{
|
||||
minWidth = savedOptions.GetMinWidth(ImageType.Screenshot);
|
||||
await DownloadBackdrops(item, ImageType.Screenshot, screenshotLimit, provider, result, list, minWidth, cancellationToken).ConfigureAwait(false);
|
||||
await DownloadMultiImages(item, ImageType.Screenshot, screenshotLimit, provider, result, list, minWidth, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
@@ -360,6 +383,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Merges a list of images into the provided item, validating existing images and replacing them or adding new images as necessary.
|
||||
/// </summary>
|
||||
/// <param name="item">The <see cref="BaseItem"/> to modify.</param>
|
||||
/// <param name="images">The new images to place in <c>item</c>.</param>
|
||||
/// <returns><c>true</c> if changes were made to the item; otherwise <c>false</c>.</returns>
|
||||
public bool MergeImages(BaseItem item, IReadOnlyList<LocalImageInfo> images)
|
||||
{
|
||||
var changed = false;
|
||||
@@ -417,8 +446,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
changed = true;
|
||||
}
|
||||
|
||||
var hasScreenshots = item as IHasScreenshots;
|
||||
if (hasScreenshots != null)
|
||||
if (item is IHasScreenshots)
|
||||
{
|
||||
if (UpdateMultiImages(item, images, ImageType.Screenshot))
|
||||
{
|
||||
@@ -536,7 +564,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
return true;
|
||||
}
|
||||
|
||||
if (item is IItemByName && item is not MusicArtist)
|
||||
if (item is IItemByName and not MusicArtist)
|
||||
{
|
||||
var hasDualAccess = item as IHasDualAccess;
|
||||
if (hasDualAccess == null || hasDualAccess.IsAccessedByName)
|
||||
@@ -569,7 +597,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
newIndex);
|
||||
}
|
||||
|
||||
private async Task DownloadBackdrops(BaseItem item, ImageType imageType, int limit, IRemoteImageProvider provider, RefreshResult result, IEnumerable<RemoteImageInfo> images, int minWidth, CancellationToken cancellationToken)
|
||||
private async Task DownloadMultiImages(BaseItem item, ImageType imageType, int limit, IRemoteImageProvider provider, RefreshResult result, IEnumerable<RemoteImageInfo> images, int minWidth, CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (var image in images.Where(i => i.Type == imageType))
|
||||
{
|
||||
@@ -609,7 +637,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
break;
|
||||
}
|
||||
|
||||
// If there's already an image of the same size, skip it
|
||||
// If there's already an image of the same file size, skip it
|
||||
if (response.Content.Headers.ContentLength.HasValue)
|
||||
{
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user