| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 | 
							- using MediaBrowser.Controller.Drawing;
 
- using MediaBrowser.Controller.Entities;
 
- using MediaBrowser.Controller.Entities.Audio;
 
- using MediaBrowser.Controller.Entities.TV;
 
- using MediaBrowser.Controller.Providers;
 
- using MediaBrowser.Model.Entities;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Globalization;
 
- using System.IO;
 
- using System.Linq;
 
- namespace MediaBrowser.Providers.Xbmc
 
- {
 
-     public class XbmcImageSaver : IImageFileSaver
 
-     {
 
-         private readonly CultureInfo _usCulture = new CultureInfo("en-US");
 
-         public IEnumerable<string> GetSavePaths(IHasImages item, ImageType type, ImageFormat format, int index)
 
-         {
 
-             var season = item as Season;
 
-             if (!SupportsItem(item, type, season))
 
-             {
 
-                 return new string[] { };
 
-             }
 
-             var extension = "." + format.ToString().ToLower();
 
-             // Backdrop paths
 
-             if (type == ImageType.Backdrop)
 
-             {
 
-                 if (index == 0)
 
-                 {
 
-                     if (item.IsInMixedFolder)
 
-                     {
 
-                         return new[] { GetSavePathForItemInMixedFolder(item, type, "fanart", extension) };
 
-                     }
 
-                     if (season != null && season.IndexNumber.HasValue)
 
-                     {
 
-                         var seriesFolder = season.SeriesPath;
 
-                         var seasonMarker = season.IndexNumber.Value == 0
 
-                                                ? "-specials"
 
-                                                : season.IndexNumber.Value.ToString("00", _usCulture);
 
-                         var imageFilename = "season" + seasonMarker + "-fanart" + extension;
 
-                         return new[] { Path.Combine(seriesFolder, imageFilename) };
 
-                     }
 
-                     return new[]
 
-                         {
 
-                             Path.Combine(item.ContainingFolderPath, "fanart" + extension)
 
-                         };
 
-                 }
 
-                 if (item.IsInMixedFolder)
 
-                 {
 
-                     return new[] { GetSavePathForItemInMixedFolder(item, type, "fanart" + index.ToString(_usCulture), extension) };
 
-                 }
 
-                 var extraFanartFilename = GetBackdropSaveFilename(item.GetImages(ImageType.Backdrop), "fanart", "fanart", index);
 
-                 return new[]
 
-                     {
 
-                         Path.Combine(item.ContainingFolderPath, "extrafanart", extraFanartFilename + extension),
 
-                         Path.Combine(item.ContainingFolderPath, "extrathumbs", "thumb" + index.ToString(_usCulture) + extension)
 
-                     };
 
-             }
 
-             if (type == ImageType.Primary)
 
-             {
 
-                 if (season != null && season.IndexNumber.HasValue)
 
-                 {
 
-                     var seriesFolder = season.SeriesPath;
 
-                     var seasonMarker = season.IndexNumber.Value == 0
 
-                                            ? "-specials"
 
-                                            : season.IndexNumber.Value.ToString("00", _usCulture);
 
-                     var imageFilename = "season" + seasonMarker + "-poster" + extension;
 
-                     return new[] { Path.Combine(seriesFolder, imageFilename) };
 
-                 }
 
-                 if (item is Episode)
 
-                 {
 
-                     var seasonFolder = Path.GetDirectoryName(item.Path);
 
-                     var imageFilename = Path.GetFileNameWithoutExtension(item.Path) + "-thumb" + extension;
 
-                     return new[] { Path.Combine(seasonFolder, imageFilename) };
 
-                 }
 
-                 if (item.IsInMixedFolder || item is MusicVideo)
 
-                 {
 
-                     return new[] { GetSavePathForItemInMixedFolder(item, type, string.Empty, extension) };
 
-                 }
 
-                 if (item is MusicAlbum || item is MusicArtist)
 
-                 {
 
-                     return new[] { Path.Combine(item.ContainingFolderPath, "folder" + extension) };
 
-                 }
 
-                 return new[] { Path.Combine(item.ContainingFolderPath, "poster" + extension) };
 
-             }
 
-             if (type == ImageType.Banner)
 
-             {
 
-                 if (season != null && season.IndexNumber.HasValue)
 
-                 {
 
-                     var seriesFolder = season.SeriesPath;
 
-                     var seasonMarker = season.IndexNumber.Value == 0
 
-                                            ? "-specials"
 
-                                            : season.IndexNumber.Value.ToString("00", _usCulture);
 
-                     var imageFilename = "season" + seasonMarker + "-banner" + extension;
 
-                     return new[] { Path.Combine(seriesFolder, imageFilename) };
 
-                 }
 
-             }
 
-             if (type == ImageType.Thumb)
 
-             {
 
-                 if (season != null && season.IndexNumber.HasValue)
 
-                 {
 
-                     var seriesFolder = season.SeriesPath;
 
-                     var seasonMarker = season.IndexNumber.Value == 0
 
-                                            ? "-specials"
 
-                                            : season.IndexNumber.Value.ToString("00", _usCulture);
 
-                     var imageFilename = "season" + seasonMarker + "-landscape" + extension;
 
-                     return new[] { Path.Combine(seriesFolder, imageFilename) };
 
-                 }
 
-                 if (item.IsInMixedFolder)
 
-                 {
 
-                     return new[] { GetSavePathForItemInMixedFolder(item, type, "landscape", extension) };
 
-                 }
 
-                 return new[] { Path.Combine(item.ContainingFolderPath, "landscape" + extension) };
 
-             }
 
-             return GetStandardSavePaths(item, type, index, extension);
 
-         }
 
-         private IEnumerable<string> GetStandardSavePaths(IHasImages item, ImageType type, int imageIndex, string extension)
 
-         {
 
-             string filename;
 
-             switch (type)
 
-             {
 
-                 case ImageType.Art:
 
-                     filename = "clearart";
 
-                     break;
 
-                 case ImageType.BoxRear:
 
-                     filename = "back";
 
-                     break;
 
-                 case ImageType.Disc:
 
-                     filename = item is MusicAlbum ? "cdart" : "disc";
 
-                     break;
 
-                 case ImageType.Screenshot:
 
-                     filename = GetBackdropSaveFilename(item.GetImages(type), "screenshot", "screenshot", imageIndex);
 
-                     break;
 
-                 default:
 
-                     filename = type.ToString().ToLower();
 
-                     break;
 
-             }
 
-             string path = null;
 
-             if (item.IsInMixedFolder)
 
-             {
 
-                 path = GetSavePathForItemInMixedFolder(item, type, filename, extension);
 
-             }
 
-             if (string.IsNullOrEmpty(path))
 
-             {
 
-                 path = Path.Combine(item.ContainingFolderPath, filename + extension);
 
-             }
 
-             if (string.IsNullOrEmpty(path))
 
-             {
 
-                 return new string[] { };
 
-             }
 
-             return new[] { path };
 
-         }
 
-         private string GetSavePathForItemInMixedFolder(IHasImages item, ImageType type, string imageFilename, string extension)
 
-         {
 
-             if (type == ImageType.Primary)
 
-             {
 
-                 imageFilename = "poster";
 
-             }
 
-             var folder = Path.GetDirectoryName(item.Path);
 
-             return Path.Combine(folder, Path.GetFileNameWithoutExtension(item.Path) + "-" + imageFilename + extension);
 
-         }
 
-         private bool SupportsItem(IHasImages item, ImageType type, Season season)
 
-         {
 
-             if (item.IsOwnedItem || item is Audio || item is User)
 
-             {
 
-                 return false;
 
-             }
 
-             if (type != ImageType.Primary && item is Episode)
 
-             {
 
-                 return false;
 
-             }
 
-             if (!item.SupportsLocalMetadata)
 
-             {
 
-                 return false;
 
-             }
 
-             var locationType = item.LocationType;
 
-             if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
 
-             {
 
-                 var allowSaving = false;
 
-                 // If season is virtual under a physical series, save locally if using compatible convention
 
-                 if (season != null)
 
-                 {
 
-                     var series = season.Series;
 
-                     if (series != null && series.SupportsLocalMetadata)
 
-                     {
 
-                         allowSaving = true;
 
-                     }
 
-                 }
 
-                 if (!allowSaving)
 
-                 {
 
-                     return false;
 
-                 }
 
-             }
 
-             return true;
 
-         }
 
-         private string GetBackdropSaveFilename(IEnumerable<ItemImageInfo> images, string zeroIndexFilename, string numberedIndexPrefix, int? index)
 
-         {
 
-             if (index.HasValue && index.Value == 0)
 
-             {
 
-                 return zeroIndexFilename;
 
-             }
 
-             var filenames = images.Select(i => Path.GetFileNameWithoutExtension(i.Path)).ToList();
 
-             var current = 1;
 
-             while (filenames.Contains(numberedIndexPrefix + current.ToString(_usCulture), StringComparer.OrdinalIgnoreCase))
 
-             {
 
-                 current++;
 
-             }
 
-             return numberedIndexPrefix + current.ToString(_usCulture);
 
-         }
 
-         public string Name
 
-         {
 
-             get { return "MB3/Plex/Xbmc Images"; }
 
-         }
 
-     }
 
- }
 
 
  |