added a virtual season image provider

This commit is contained in:
Luke Pulverenti 2014-01-05 00:15:38 -05:00
parent 9ec12eb0fc
commit be0f683e62
2 changed files with 60 additions and 25 deletions

View file

@ -54,6 +54,20 @@ namespace MediaBrowser.Providers
return item.IsInMixedFolder && item.Parent != null && !(item is Episode); return item.IsInMixedFolder && item.Parent != null && !(item is Episode);
} }
if (item.LocationType == LocationType.Virtual)
{
var season = item as Season;
if (season != null)
{
var series = season.Series;
if (series != null && series.LocationType == LocationType.FileSystem)
{
return true;
}
}
}
return false; return false;
} }
@ -63,11 +77,20 @@ namespace MediaBrowser.Providers
var season = item as Season; var season = item as Season;
if (season != null) if (season != null)
{ {
var series = season.Series; var list = new List<BaseItem>();
if (series != null)
if (season.LocationType == LocationType.FileSystem)
{ {
return new[] { item, series }; list.Add(season);
} }
var series = season.Series;
if (series != null && series.LocationType == LocationType.FileSystem)
{
list.Add(series);
}
return list;
} }
return base.GetItemsForFileStampComparison(item); return base.GetItemsForFileStampComparison(item);
@ -143,6 +166,11 @@ namespace MediaBrowser.Providers
private ItemResolveArgs GetResolveArgsContainingImages(BaseItem item) private ItemResolveArgs GetResolveArgsContainingImages(BaseItem item)
{ {
if (item.LocationType != LocationType.FileSystem)
{
return null;
}
if (item.IsInMixedFolder) if (item.IsInMixedFolder)
{ {
if (item.Parent == null) if (item.Parent == null)
@ -164,18 +192,16 @@ namespace MediaBrowser.Providers
/// <returns>FileSystemInfo.</returns> /// <returns>FileSystemInfo.</returns>
protected virtual FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension) protected virtual FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension)
{ {
if (string.IsNullOrEmpty(item.MetaLocation))
{
return null;
}
return BaseItem.SupportedImageExtensions return BaseItem.SupportedImageExtensions
.Select(i => args.GetMetaFileByPath(GetFullImagePath(item, args, filenameWithoutExtension, i))) .Select(i => args.GetMetaFileByPath(GetFullImagePath(item, args, filenameWithoutExtension, i)))
.FirstOrDefault(i => i != null); .FirstOrDefault(i => i != null);
} }
protected virtual FileSystemInfo GetImage(List<FileSystemInfo> files, string filenameWithoutExtension)
{
return BaseItem.SupportedImageExtensions
.Select(i => files.FirstOrDefault(f => string.Equals(f.Extension, i, StringComparison.OrdinalIgnoreCase) && string.Equals(filenameWithoutExtension, Path.GetFileNameWithoutExtension(f.Name), StringComparison.OrdinalIgnoreCase)))
.FirstOrDefault(i => i != null);
}
protected virtual string GetFullImagePath(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension, string extension) protected virtual string GetFullImagePath(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension, string extension)
{ {
var path = item.MetaLocation; var path = item.MetaLocation;
@ -278,14 +304,12 @@ namespace MediaBrowser.Providers
image = GetImage(item, args, "show"); image = GetImage(item, args, "show");
} }
var isFileSystemItem = item.LocationType == LocationType.FileSystem;
// Support plex/xbmc convention // Support plex/xbmc convention
if (image == null) if (image == null)
{ {
// Supprt xbmc conventions // Supprt xbmc conventions
var season = item as Season; var season = item as Season;
if (season != null && item.IndexNumber.HasValue && isFileSystemItem) if (season != null && item.IndexNumber.HasValue && season.Series.LocationType == LocationType.FileSystem)
{ {
image = GetSeasonImageFromSeriesFolder(season, "-poster"); image = GetSeasonImageFromSeriesFolder(season, "-poster");
} }
@ -298,7 +322,7 @@ namespace MediaBrowser.Providers
} }
// Look for a file with the same name as the item // Look for a file with the same name as the item
if (image == null && isFileSystemItem) if (image == null && !string.IsNullOrEmpty(item.Path))
{ {
var name = Path.GetFileNameWithoutExtension(item.Path); var name = Path.GetFileNameWithoutExtension(item.Path);
@ -327,11 +351,9 @@ namespace MediaBrowser.Providers
if (image == null) if (image == null)
{ {
var isFileSystemItem = item.LocationType == LocationType.FileSystem;
// Supprt xbmc conventions // Supprt xbmc conventions
var season = item as Season; var season = item as Season;
if (season != null && item.IndexNumber.HasValue && isFileSystemItem) if (season != null && item.IndexNumber.HasValue && season.Series.LocationType == LocationType.FileSystem)
{ {
image = GetSeasonImageFromSeriesFolder(season, "-banner"); image = GetSeasonImageFromSeriesFolder(season, "-banner");
} }
@ -356,11 +378,9 @@ namespace MediaBrowser.Providers
if (image == null) if (image == null)
{ {
var isFileSystemItem = item.LocationType == LocationType.FileSystem;
// Supprt xbmc conventions // Supprt xbmc conventions
var season = item as Season; var season = item as Season;
if (season != null && item.IndexNumber.HasValue && isFileSystemItem) if (season != null && item.IndexNumber.HasValue && season.Series.LocationType == LocationType.FileSystem)
{ {
image = GetSeasonImageFromSeriesFolder(season, "-landscape"); image = GetSeasonImageFromSeriesFolder(season, "-landscape");
} }
@ -380,14 +400,12 @@ namespace MediaBrowser.Providers
/// <param name="args">The args.</param> /// <param name="args">The args.</param>
private void PopulateBackdrops(BaseItem item, ItemResolveArgs args) private void PopulateBackdrops(BaseItem item, ItemResolveArgs args)
{ {
var isFileSystemItem = item.LocationType == LocationType.FileSystem;
var backdropFiles = new List<string>(); var backdropFiles = new List<string>();
PopulateBackdrops(item, args, backdropFiles, "backdrop", "backdrop"); PopulateBackdrops(item, args, backdropFiles, "backdrop", "backdrop");
// Support {name}-fanart.ext // Support {name}-fanart.ext
if (isFileSystemItem) if (!string.IsNullOrEmpty(item.Path))
{ {
var name = Path.GetFileNameWithoutExtension(item.Path); var name = Path.GetFileNameWithoutExtension(item.Path);
@ -408,7 +426,7 @@ namespace MediaBrowser.Providers
PopulateBackdrops(item, args, backdropFiles, "art", "art-"); PopulateBackdrops(item, args, backdropFiles, "art", "art-");
var season = item as Season; var season = item as Season;
if (season != null && item.IndexNumber.HasValue && isFileSystemItem) if (season != null && item.IndexNumber.HasValue && season.Series.LocationType == LocationType.FileSystem)
{ {
var image = GetSeasonImageFromSeriesFolder(season, "-fanart"); var image = GetSeasonImageFromSeriesFolder(season, "-fanart");
@ -418,7 +436,7 @@ namespace MediaBrowser.Providers
} }
} }
if (isFileSystemItem) if (item.LocationType == LocationType.FileSystem)
{ {
PopulateBackdropsFromExtraFanart(args, backdropFiles); PopulateBackdropsFromExtraFanart(args, backdropFiles);
} }

View file

@ -1,5 +1,6 @@
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -20,6 +21,22 @@ namespace MediaBrowser.Providers
{ {
var locationType = item.LocationType; var locationType = item.LocationType;
// The regular provider will get virtual seasons
if (item.LocationType == LocationType.Virtual)
{
var season = item as Season;
if (season != null)
{
var series = season.Series;
if (series != null && series.LocationType == LocationType.FileSystem)
{
return false;
}
}
}
return locationType == LocationType.Virtual || return locationType == LocationType.Virtual ||
locationType == LocationType.Remote; locationType == LocationType.Remote;
} }