diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-03 01:58:04 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-03 01:58:04 -0500 |
| commit | ac3a94f5a1dbb94b374e0160c344fcf99af9b696 (patch) | |
| tree | f8b109c3bb5ebce964363e9df874bf3235259616 /MediaBrowser.Server.Implementations/Library/Resolvers/TV | |
| parent | 627b8370a89cbf9826898c2edfc46767dfb5272a (diff) | |
moved resolvers to implementations, trimmed nuget package a bit
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/Resolvers/TV')
3 files changed, 219 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs new file mode 100644 index 0000000000..6fa9711cc6 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs @@ -0,0 +1,76 @@ +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Entities; +using System; + +namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV +{ + /// <summary> + /// Class EpisodeResolver + /// </summary> + public class EpisodeResolver : VideoResolver<Episode> + { + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>Episode.</returns> + protected override Episode Resolve(ItemResolveArgs args) + { + // If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something + if (args.Parent is Season || args.Parent is Series) + { + if (args.IsDirectory) + { + if (args.ContainsFileSystemEntryByName("video_ts")) + { + return new Episode + { + Path = args.Path, + VideoType = VideoType.Dvd + }; + } + if (args.ContainsFileSystemEntryByName("bdmv")) + { + return new Episode + { + Path = args.Path, + VideoType = VideoType.BluRay + }; + } + } + + return base.Resolve(args); + } + + return null; + } + + /// <summary> + /// Sets the initial item values. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="args">The args.</param> + protected override void SetInitialItemValues(Episode item, ItemResolveArgs args) + { + base.SetInitialItemValues(item, args); + + //fill in our season and series ids + var season = args.Parent as Season; + if (season != null) + { + item.SeasonItemId = season.Id; + var series = season.Parent as Series; + if (series != null) + { + item.SeriesItemId = series.Id; + } + } + else + { + var series = args.Parent as Series; + item.SeriesItemId = series != null ? series.Id : Guid.Empty; + } + } + } +} diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs new file mode 100644 index 0000000000..07fb2f4864 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs @@ -0,0 +1,45 @@ +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using System; + +namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV +{ + /// <summary> + /// Class SeasonResolver + /// </summary> + public class SeasonResolver : FolderResolver<Season> + { + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>Season.</returns> + protected override Season Resolve(ItemResolveArgs args) + { + if (args.Parent is Series && args.IsDirectory) + { + return new Season + { + IndexNumber = TVUtils.GetSeasonNumberFromPath(args.Path) + }; + } + + return null; + } + + /// <summary> + /// Sets the initial item values. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="args">The args.</param> + protected override void SetInitialItemValues(Season item, ItemResolveArgs args) + { + base.SetInitialItemValues(item, args); + + var series = args.Parent as Series; + item.SeriesItemId = series != null ? series.Id : Guid.Empty; + + Season.AddMetadataFiles(args); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs new file mode 100644 index 0000000000..642e523638 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs @@ -0,0 +1,98 @@ +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Entities; +using System; +using System.IO; + +namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV +{ + /// <summary> + /// Class SeriesResolver + /// </summary> + public class SeriesResolver : FolderResolver<Series> + { + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> + public override ResolverPriority Priority + { + get + { + return ResolverPriority.Second; + } + } + + /// <summary> + /// Resolves the specified args. + /// </summary> + /// <param name="args">The args.</param> + /// <returns>Series.</returns> + protected override Series Resolve(ItemResolveArgs args) + { + if (args.IsDirectory) + { + // Avoid expensive tests against VF's and all their children by not allowing this + if (args.Parent == null || args.Parent.IsRoot) + { + return null; + } + + // Optimization to avoid running these tests against Seasons + if (args.Parent is Series) + { + return null; + } + + // It's a Series if any of the following conditions are met: + // series.xml exists + // [tvdbid= is present in the path + // TVUtils.IsSeriesFolder returns true + var filename = Path.GetFileName(args.Path); + + if (string.IsNullOrEmpty(filename)) + { + return null; + } + + if (args.ContainsMetaFileByName("series.xml") || filename.IndexOf("[tvdbid=", StringComparison.OrdinalIgnoreCase) != -1 || TVUtils.IsSeriesFolder(args.Path, args.FileSystemChildren)) + { + return new Series(); + } + } + + return null; + } + + /// <summary> + /// Sets the initial item values. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="args">The args.</param> + protected override void SetInitialItemValues(Series item, ItemResolveArgs args) + { + base.SetInitialItemValues(item, args); + + Season.AddMetadataFiles(args); + + SetProviderIdFromPath(item, args.Path); + } + + /// <summary> + /// Sets the provider id from path. + /// </summary> + /// <param name="item">The item.</param> + private void SetProviderIdFromPath(Series item, string path) + { + var justName = Path.GetFileName(path); + + var id = justName.GetAttributeValue("tvdbid"); + + if (!string.IsNullOrEmpty(id)) + { + item.SetProviderId(MetadataProviders.Tvdb, id); + } + } + } +} |
