aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/ImageSaver.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/ImageSaver.cs')
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs93
1 files changed, 20 insertions, 73 deletions
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index 2a4ef7597..bac90ae37 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -30,10 +30,6 @@ namespace MediaBrowser.Providers.Manager
private readonly IServerConfigurationManager _config;
/// <summary>
- /// The remote image cache
- /// </summary>
- private readonly FileSystemRepository _remoteImageCache;
- /// <summary>
/// The _directory watchers
/// </summary>
private readonly ILibraryMonitor _libraryMonitor;
@@ -41,17 +37,18 @@ namespace MediaBrowser.Providers.Manager
private readonly ILogger _logger;
/// <summary>
- /// Initializes a new instance of the <see cref="ImageSaver"/> class.
+ /// Initializes a new instance of the <see cref="ImageSaver" /> class.
/// </summary>
/// <param name="config">The config.</param>
/// <param name="libraryMonitor">The directory watchers.</param>
+ /// <param name="fileSystem">The file system.</param>
+ /// <param name="logger">The logger.</param>
public ImageSaver(IServerConfigurationManager config, ILibraryMonitor libraryMonitor, IFileSystem fileSystem, ILogger logger)
{
_config = config;
_libraryMonitor = libraryMonitor;
_fileSystem = fileSystem;
_logger = logger;
- _remoteImageCache = new FileSystemRepository(config.ApplicationPaths.DownloadedImagesDataPath);
}
/// <summary>
@@ -96,25 +93,16 @@ namespace MediaBrowser.Providers.Manager
{
var series = season.Series;
- if (series != null)
+ if (series != null && series.SupportsLocalMetadata)
{
- var seriesLocationType = series.LocationType;
- if (seriesLocationType == LocationType.FileSystem || seriesLocationType == LocationType.Offline)
- {
- saveLocally = true;
- }
+ saveLocally = true;
}
}
}
- if (type == ImageType.Backdrop && imageIndex == null)
+ if (!imageIndex.HasValue && item.AllowsMultipleImages(type))
{
- imageIndex = item.BackdropImagePaths.Count;
- }
- else if (type == ImageType.Screenshot && imageIndex == null)
- {
- var hasScreenshots = (IHasScreenshots)item;
- imageIndex = hasScreenshots.ScreenshotImagePaths.Count;
+ imageIndex = item.GetImages(type).Count();
}
var index = imageIndex ?? 0;
@@ -275,43 +263,7 @@ namespace MediaBrowser.Providers.Manager
/// imageIndex</exception>
private void SetImagePath(BaseItem item, ImageType type, int? imageIndex, string path)
{
- switch (type)
- {
- case ImageType.Screenshot:
-
- if (!imageIndex.HasValue)
- {
- throw new ArgumentNullException("imageIndex");
- }
-
- var hasScreenshots = (IHasScreenshots)item;
- if (hasScreenshots.ScreenshotImagePaths.Count > imageIndex.Value)
- {
- hasScreenshots.ScreenshotImagePaths[imageIndex.Value] = path;
- }
- else if (!hasScreenshots.ScreenshotImagePaths.Contains(path, StringComparer.OrdinalIgnoreCase))
- {
- hasScreenshots.ScreenshotImagePaths.Add(path);
- }
- break;
- case ImageType.Backdrop:
- if (!imageIndex.HasValue)
- {
- throw new ArgumentNullException("imageIndex");
- }
- if (item.BackdropImagePaths.Count > imageIndex.Value)
- {
- item.BackdropImagePaths[imageIndex.Value] = path;
- }
- else if (!item.BackdropImagePaths.Contains(path, StringComparer.OrdinalIgnoreCase))
- {
- item.BackdropImagePaths.Add(path);
- }
- break;
- default:
- item.SetImagePath(type, path);
- break;
- }
+ item.SetImagePath(type, imageIndex ?? 0, new FileInfo(path));
}
/// <summary>
@@ -347,19 +299,10 @@ namespace MediaBrowser.Providers.Manager
filename = item is Episode ? Path.GetFileNameWithoutExtension(item.Path) : "folder";
break;
case ImageType.Backdrop:
- if (!imageIndex.HasValue)
- {
- throw new ArgumentNullException("imageIndex");
- }
- filename = GetBackdropSaveFilename(item.BackdropImagePaths, "backdrop", "backdrop", imageIndex.Value);
+ filename = GetBackdropSaveFilename(item.GetImages(type), "backdrop", "backdrop", imageIndex);
break;
case ImageType.Screenshot:
- if (!imageIndex.HasValue)
- {
- throw new ArgumentNullException("imageIndex");
- }
- var hasScreenshots = (IHasScreenshots)item;
- filename = GetBackdropSaveFilename(hasScreenshots.ScreenshotImagePaths, "screenshot", "screenshot", imageIndex.Value);
+ filename = GetBackdropSaveFilename(item.GetImages(type), "screenshot", "screenshot", imageIndex);
break;
default:
filename = type.ToString().ToLower();
@@ -398,22 +341,26 @@ namespace MediaBrowser.Providers.Manager
// None of the save local conditions passed, so store it in our internal folders
if (string.IsNullOrEmpty(path))
{
- path = _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Id, filename + extension);
+ if (string.IsNullOrEmpty(filename))
+ {
+ filename = "folder";
+ }
+ path = Path.Combine(_config.ApplicationPaths.GetInternalMetadataPath(item.Id), filename + extension);
}
return path;
}
- private string GetBackdropSaveFilename(IEnumerable<string> images, string zeroIndexFilename, string numberedIndexPrefix, int index)
+ private string GetBackdropSaveFilename(IEnumerable<ItemImageInfo> images, string zeroIndexFilename, string numberedIndexPrefix, int? index)
{
- if (index == 0)
+ if (index.HasValue && index.Value == 0)
{
return zeroIndexFilename;
}
- var filenames = images.Select(Path.GetFileNameWithoutExtension).ToList();
+ var filenames = images.Select(i => Path.GetFileNameWithoutExtension(i.Path)).ToList();
- var current = index;
+ var current = 1;
while (filenames.Contains(numberedIndexPrefix + current.ToString(UsCulture), StringComparer.OrdinalIgnoreCase))
{
current++;
@@ -484,7 +431,7 @@ namespace MediaBrowser.Providers.Manager
return new[] { GetSavePathForItemInMixedFolder(item, type, "fanart" + outputIndex.ToString(UsCulture), extension) };
}
- var extraFanartFilename = GetBackdropSaveFilename(item.BackdropImagePaths, "fanart", "fanart", outputIndex);
+ var extraFanartFilename = GetBackdropSaveFilename(item.GetImages(ImageType.Backdrop), "fanart", "fanart", outputIndex);
return new[]
{