aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-10-15 21:44:23 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-10-15 21:44:23 -0400
commit28bb5c7903425b4dcedcc299609702c534647089 (patch)
tree8b5740e8d8e996ad667d60d298da8964b1a5bfb7
parentd176da1ba9bf3b35e35838796886682a47bee490 (diff)
support more xbmc image conventions
-rw-r--r--MediaBrowser.Providers/ImageFromMediaLocationProvider.cs296
-rw-r--r--MediaBrowser.Providers/TV/RemoteSeriesProvider.cs26
-rw-r--r--MediaBrowser.Server.Implementations/Providers/ImageSaver.cs35
3 files changed, 262 insertions, 95 deletions
diff --git a/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs
index c3546c936..b44bda708 100644
--- a/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs
@@ -173,73 +173,16 @@ namespace MediaBrowser.Providers
/// <param name="args">The args.</param>
private void PopulateBaseItemImages(BaseItem item, ItemResolveArgs args)
{
- // Primary Image
- var image = GetImage(item, args, "folder") ??
- GetImage(item, args, "poster") ??
- GetImage(item, args, "cover") ??
- GetImage(item, args, "default");
-
- // Support plex/xbmc convention
- if (image == null && item is Series)
- {
- image = GetImage(item, args, "show");
- }
-
- // Support plex/xbmc convention
- if (image == null && item is Season && item.IndexNumber.HasValue)
- {
- var num = item.IndexNumber.Value.ToString(_usCulture);
-
- image = GetImage(item, args, string.Format("season-{0}", num));
- }
-
- // Support plex/xbmc convention
- if (image == null && (item is Movie || item is MusicVideo || item is AdultVideo))
- {
- image = GetImage(item, args, "movie");
- }
-
- // Look for a file with the same name as the item
- if (image == null)
- {
- var name = Path.GetFileNameWithoutExtension(item.Path);
-
- if (!string.IsNullOrEmpty(name))
- {
- image = GetImage(item, args, name) ??
- GetImage(item, args, name + "-poster");
- }
- }
-
- if (image != null)
- {
- item.SetImage(ImageType.Primary, image.FullName);
- }
+ PopulatePrimaryImage(item, args);
// Logo Image
- image = GetImage(item, args, "logo");
+ var image = GetImage(item, args, "logo");
if (image != null)
{
item.SetImage(ImageType.Logo, image.FullName);
}
- // Banner Image
- image = GetImage(item, args, "banner");
-
- // Support plex/xbmc convention
- if (image == null && item is Season && item.IndexNumber.HasValue)
- {
- var num = item.IndexNumber.Value.ToString(_usCulture);
-
- image = GetImage(item, args, string.Format("season-{0}-banner", num));
- }
-
- if (image != null)
- {
- item.SetImage(ImageType.Banner, image.FullName);
- }
-
// Clearart
image = GetImage(item, args, "clearart");
@@ -257,14 +200,6 @@ namespace MediaBrowser.Providers
item.SetImage(ImageType.Disc, image.FullName);
}
- // Thumbnail Image
- image = GetImage(item, args, "thumb");
-
- if (image != null)
- {
- item.SetImage(ImageType.Thumb, image.FullName);
- }
-
// Box Image
image = GetImage(item, args, "box");
@@ -289,44 +224,164 @@ namespace MediaBrowser.Providers
item.SetImage(ImageType.Menu, image.FullName);
}
+ PopulateBanner(item, args);
+ PopulateThumb(item, args);
+
// Backdrop Image
PopulateBackdrops(item, args);
+ PopulateScreenshots(item, args);
+ }
- // Screenshot Image
- image = GetImage(item, args, "screenshot");
+ private void PopulatePrimaryImage(BaseItem item, ItemResolveArgs args)
+ {
+ // Primary Image
+ var image = GetImage(item, args, "folder") ??
+ GetImage(item, args, "poster") ??
+ GetImage(item, args, "cover") ??
+ GetImage(item, args, "default");
- var screenshotFiles = new List<string>();
+ // Support plex/xbmc convention
+ if (image == null && item is Series)
+ {
+ image = GetImage(item, args, "show") ??
+ GetImage(item, args, "season-all-poster");
+ }
+
+ // Support plex/xbmc convention
+ if (image == null && item is Season && item.IndexNumber.HasValue)
+ {
+ var seasonMarker = item.IndexNumber.Value == 0
+ ? "-specials"
+ : item.IndexNumber.Value.ToString("00", _usCulture);
+
+ // Get this one directly from the file system since we have to go up a level
+ var filename = "season" + seasonMarker + "-poster";
+
+ var path = Path.GetDirectoryName(item.Path);
+
+ path = Path.Combine(path, filename);
+
+ image = new FileInfo(path);
+
+ if (!image.Exists)
+ {
+ image = null;
+ }
+ }
+
+ // Support plex/xbmc convention
+ if (image == null && (item is Movie || item is MusicVideo || item is AdultVideo))
+ {
+ image = GetImage(item, args, "movie");
+ }
+
+ // Look for a file with the same name as the item
+ if (image == null)
+ {
+ var name = Path.GetFileNameWithoutExtension(item.Path);
+
+ if (!string.IsNullOrEmpty(name))
+ {
+ image = GetImage(item, args, name) ??
+ GetImage(item, args, name + "-poster");
+ }
+ }
if (image != null)
{
- screenshotFiles.Add(image.FullName);
+ item.SetImage(ImageType.Primary, image.FullName);
}
+ }
- var unfound = 0;
- for (var i = 1; i <= 20; i++)
+ /// <summary>
+ /// Populates the banner.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="args">The args.</param>
+ private void PopulateBanner(BaseItem item, ItemResolveArgs args)
+ {
+ // Banner Image
+ var image = GetImage(item, args, "banner");
+
+ if (image == null)
{
- // Screenshot Image
- image = GetImage(item, args, "screenshot" + i);
+ // Supprt xbmc conventions
+ if (item is Series)
+ {
+ image = GetImage(item, args, "season-all-banner");
+ }
+ else if (item is Season && item.IndexNumber.HasValue)
+ {
+ var seasonMarker = item.IndexNumber.Value == 0
+ ? "-specials"
+ : item.IndexNumber.Value.ToString("00", _usCulture);
- if (image != null)
+ // Get this one directly from the file system since we have to go up a level
+ var filename = "season" + seasonMarker + "-banner";
+
+ var path = Path.GetDirectoryName(item.Path);
+
+ path = Path.Combine(path, filename);
+
+ image = new FileInfo(path);
+
+ if (!image.Exists)
+ {
+ image = null;
+ }
+ }
+ }
+
+ if (image != null)
+ {
+ item.SetImage(ImageType.Banner, image.FullName);
+ }
+ }
+
+ /// <summary>
+ /// Populates the thumb.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="args">The args.</param>
+ private void PopulateThumb(BaseItem item, ItemResolveArgs args)
+ {
+ // Thumbnail Image
+ var image = GetImage(item, args, "thumb");
+
+ if (image == null)
+ {
+ // Supprt xbmc conventions
+ if (item is Series)
{
- screenshotFiles.Add(image.FullName);
+ image = GetImage(item, args, "season-all-landscape");
}
- else
+ else if (item is Season && item.IndexNumber.HasValue)
{
- unfound++;
+ var seasonMarker = item.IndexNumber.Value == 0
+ ? "-specials"
+ : item.IndexNumber.Value.ToString("00", _usCulture);
- if (unfound >= 3)
+ // Get this one directly from the file system since we have to go up a level
+ var filename = "season" + seasonMarker + "-landscape";
+
+ var path = Path.GetDirectoryName(item.Path);
+
+ path = Path.Combine(path, filename);
+
+ image = new FileInfo(path);
+
+ if (!image.Exists)
{
- break;
+ image = null;
}
}
}
- if (screenshotFiles.Count > 0)
+ if (image != null)
{
- item.ScreenshotImagePaths = screenshotFiles;
+ item.SetImage(ImageType.Thumb, image.FullName);
}
+
}
/// <summary>
@@ -345,6 +400,37 @@ namespace MediaBrowser.Providers
PopulateBackdrops(item, args, backdropFiles, "background", "background-");
PopulateBackdrops(item, args, backdropFiles, "art", "art-");
+ if (item is Series)
+ {
+ var image = GetImage(item, args, "season-all-fanart");
+
+ if (image != null)
+ {
+ backdropFiles.Add(image.FullName);
+ }
+ }
+
+ if (item is Season && item.IndexNumber.HasValue)
+ {
+ var seasonMarker = item.IndexNumber.Value == 0
+ ? "-specials"
+ : item.IndexNumber.Value.ToString("00", _usCulture);
+
+ // Get this one directly from the file system since we have to go up a level
+ var filename = "season" + seasonMarker + "-fanart";
+
+ var path = Path.GetDirectoryName(item.Path);
+
+ path = Path.Combine(path, filename);
+
+ var image = new FileInfo(path);
+
+ if (image.Exists)
+ {
+ backdropFiles.Add(image.FullName);
+ }
+ }
+
PopulateBackdropsFromExtraFanart(args, backdropFiles);
if (backdropFiles.Count > 0)
@@ -425,5 +511,49 @@ namespace MediaBrowser.Providers
}
}
}
+
+ /// <summary>
+ /// Populates the screenshots.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="args">The args.</param>
+ private void PopulateScreenshots(BaseItem item, ItemResolveArgs args)
+ {
+ // Screenshot Image
+ var image = GetImage(item, args, "screenshot");
+
+ var screenshotFiles = new List<string>();
+
+ if (image != null)
+ {
+ screenshotFiles.Add(image.FullName);
+ }
+
+ var unfound = 0;
+ for (var i = 1; i <= 20; i++)
+ {
+ // Screenshot Image
+ image = GetImage(item, args, "screenshot" + i);
+
+ if (image != null)
+ {
+ screenshotFiles.Add(image.FullName);
+ }
+ else
+ {
+ unfound++;
+
+ if (unfound >= 3)
+ {
+ break;
+ }
+ }
+ }
+
+ if (screenshotFiles.Count > 0)
+ {
+ item.ScreenshotImagePaths = screenshotFiles;
+ }
+ }
}
}
diff --git a/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs
index 161348935..d639c6743 100644
--- a/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs
@@ -218,8 +218,6 @@ namespace MediaBrowser.Providers.TV
if (!string.IsNullOrEmpty(seriesId))
{
- series.SetProviderId(MetadataProviders.Tvdb, seriesId);
-
var seriesDataPath = GetSeriesDataPath(ConfigurationManager.ApplicationPaths, seriesId);
await FetchSeriesData(series, seriesId, seriesDataPath, force, cancellationToken).ConfigureAwait(false);
@@ -255,19 +253,25 @@ namespace MediaBrowser.Providers.TV
await DownloadSeriesZip(seriesId, seriesDataPath, null, cancellationToken).ConfigureAwait(false);
}
- // Examine if there's no local metadata, or save local is on (to get updates)
- if (isForcedRefresh || ConfigurationManager.Configuration.EnableTvDbUpdates || !HasLocalMeta(series))
+ // Have to check this here since we prevent the normal enforcement through ProviderManager
+ if (!series.DontFetchMeta)
{
- var seriesXmlPath = Path.Combine(seriesDataPath, seriesXmlFilename);
- var actorsXmlPath = Path.Combine(seriesDataPath, "actors.xml");
+ // Examine if there's no local metadata, or save local is on (to get updates)
+ if (isForcedRefresh || ConfigurationManager.Configuration.EnableTvDbUpdates || !HasLocalMeta(series))
+ {
+ series.SetProviderId(MetadataProviders.Tvdb, seriesId);
- FetchSeriesInfo(series, seriesXmlPath, cancellationToken);
+ var seriesXmlPath = Path.Combine(seriesDataPath, seriesXmlFilename);
+ var actorsXmlPath = Path.Combine(seriesDataPath, "actors.xml");
- if (!series.LockedFields.Contains(MetadataFields.Cast))
- {
- series.People.Clear();
+ FetchSeriesInfo(series, seriesXmlPath, cancellationToken);
- FetchActors(series, actorsXmlPath, cancellationToken);
+ if (!series.LockedFields.Contains(MetadataFields.Cast))
+ {
+ series.People.Clear();
+
+ FetchActors(series, actorsXmlPath, cancellationToken);
+ }
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs b/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs
index ebafce4dd..0b512839f 100644
--- a/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs
+++ b/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs
@@ -396,6 +396,24 @@ namespace MediaBrowser.Server.Implementations.Providers
if (imageIndex.Value == 0)
{
+ if (item is Series)
+ {
+ return new[] { Path.Combine(item.Path, "season-all-fanart" + extension) };
+ }
+
+ if (item is Season && item.IndexNumber.HasValue)
+ {
+ var seriesFolder = Path.GetDirectoryName(item.Path);
+
+ var seasonMarker = item.IndexNumber.Value == 0
+ ? "-specials"
+ : item.IndexNumber.Value.ToString("00", UsCulture);
+
+ var imageFilename = "season" + seasonMarker + "-fanart" + extension;
+
+ return new[] { Path.Combine(seriesFolder, imageFilename) };
+ }
+
return new[]
{
Path.Combine(item.MetaLocation, "fanart" + extension)
@@ -413,6 +431,11 @@ namespace MediaBrowser.Server.Implementations.Providers
if (type == ImageType.Primary)
{
+ if (item is Series)
+ {
+ return new[] { Path.Combine(item.Path, "season-all-poster" + extension) };
+ }
+
if (item is Season && item.IndexNumber.HasValue)
{
var seriesFolder = Path.GetDirectoryName(item.Path);
@@ -446,6 +469,11 @@ namespace MediaBrowser.Server.Implementations.Providers
if (type == ImageType.Banner)
{
+ if (item is Series)
+ {
+ return new[] { Path.Combine(item.Path, "season-all-banner" + extension) };
+ }
+
if (item is Season && item.IndexNumber.HasValue)
{
var seriesFolder = Path.GetDirectoryName(item.Path);
@@ -462,6 +490,11 @@ namespace MediaBrowser.Server.Implementations.Providers
if (type == ImageType.Thumb)
{
+ if (item is Series)
+ {
+ return new[] { Path.Combine(item.Path, "season-all-landscape" + extension) };
+ }
+
if (item is Season && item.IndexNumber.HasValue)
{
var seriesFolder = Path.GetDirectoryName(item.Path);
@@ -475,7 +508,7 @@ namespace MediaBrowser.Server.Implementations.Providers
return new[] { Path.Combine(seriesFolder, imageFilename) };
}
}
-
+
// All other paths are the same
return new[] { GetLegacySavePath(item, type, imageIndex, mimeType, true) };
}