aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library')
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs19
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs33
2 files changed, 41 insertions, 11 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index b692e97f3..2068ac0da 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -31,6 +31,8 @@ namespace MediaBrowser.Server.Implementations.Library
/// </summary>
public class LibraryManager : ILibraryManager
{
+ private IEnumerable<ILibraryPrescanTask> PrescanTasks { get; set; }
+
/// <summary>
/// Gets the intro providers.
/// </summary>
@@ -161,13 +163,15 @@ namespace MediaBrowser.Server.Implementations.Library
IEnumerable<IVirtualFolderCreator> pluginFolders,
IEnumerable<IItemResolver> resolvers,
IEnumerable<IIntroProvider> introProviders,
- IEnumerable<IBaseItemComparer> itemComparers)
+ IEnumerable<IBaseItemComparer> itemComparers,
+ IEnumerable<ILibraryPrescanTask> prescanTasks)
{
EntityResolutionIgnoreRules = rules;
PluginFolderCreators = pluginFolders;
EntityResolvers = resolvers.OrderBy(i => i.Priority).ToArray();
IntroProviders = introProviders;
Comparers = itemComparers;
+ PrescanTasks = prescanTasks;
}
/// <summary>
@@ -841,6 +845,19 @@ namespace MediaBrowser.Server.Implementations.Library
await ValidateCollectionFolders(folder, cancellationToken).ConfigureAwait(false);
}
+ // Run prescan tasks
+ foreach (var task in PrescanTasks)
+ {
+ try
+ {
+ await task.Run(new Progress<double>(), cancellationToken);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error running prescan task", ex);
+ }
+ }
+
var innerProgress = new ActionableProgress<double>();
innerProgress.RegisterAction(pct => progress.Report(pct * .8));
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs
index 84f7a8522..d6fe5d456 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs
@@ -18,41 +18,54 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
/// <returns>Episode.</returns>
protected override Episode Resolve(ItemResolveArgs args)
{
- var isInSeason = args.Parent is Season;
+ var season = args.Parent as Season;
// If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something
- if (isInSeason || args.Parent is Series)
+ if (season != null || args.Parent is Series)
{
+ Episode episode = null;
+
if (args.IsDirectory)
{
if (args.ContainsFileSystemEntryByName("video_ts"))
{
- return new Episode
+ episode = new Episode
{
- IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, isInSeason),
Path = args.Path,
VideoType = VideoType.Dvd
};
}
if (args.ContainsFileSystemEntryByName("bdmv"))
{
- return new Episode
+ episode = new Episode
{
- IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, isInSeason),
Path = args.Path,
VideoType = VideoType.BluRay
};
}
}
- var episide = base.Resolve(args);
+ if (episode == null)
+ {
+ episode = base.Resolve(args);
+ }
- if (episide != null)
+ if (episode != null)
{
- episide.IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, isInSeason);
+ episode.IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, season != null);
+
+ if (season != null)
+ {
+ episode.ParentIndexNumber = season.IndexNumber;
+ }
+
+ if (episode.ParentIndexNumber == null)
+ {
+ episode.ParentIndexNumber = TVUtils.GetSeasonNumberFromEpisodeFile(args.Path);
+ }
}
- return episide;
+ return episode;
}
return null;