diff --git a/MediaBrowser.Controller/IO/DirectoryWatchers.cs b/MediaBrowser.Controller/IO/DirectoryWatchers.cs index e2fb09a16..1ca9cf0c8 100644 --- a/MediaBrowser.Controller/IO/DirectoryWatchers.cs +++ b/MediaBrowser.Controller/IO/DirectoryWatchers.cs @@ -83,12 +83,12 @@ namespace MediaBrowser.Controller.IO List paths = affectedPaths; affectedPaths = new List(); - ProcessPathChanges(paths); + //ProcessPathChanges(paths); } - private void ProcessPathChanges(IEnumerable paths) + private async Task ProcessPathChanges(IEnumerable paths) { - /*List itemsToRefresh = new List(); + List itemsToRefresh = new List(); foreach (BaseItem item in paths.Select(p => GetAffectedBaseItem(p))) { @@ -105,15 +105,15 @@ namespace MediaBrowser.Controller.IO return folder != null && folder.IsRoot; })) { - Kernel.Instance.ReloadRoot(); + await Kernel.Instance.ReloadRoot(); } else { - Parallel.For(0, itemsToRefresh.Count, i => + /*Parallel.For(0, itemsToRefresh.Count, i => { Kernel.Instance.ReloadItem(itemsToRefresh[i]); - }); - }*/ + });*/ + } } private BaseItem GetAffectedBaseItem(string path) diff --git a/MediaBrowser.Movies/MediaBrowser.Movies.csproj b/MediaBrowser.Movies/MediaBrowser.Movies.csproj index 598d20a01..588a23e90 100644 --- a/MediaBrowser.Movies/MediaBrowser.Movies.csproj +++ b/MediaBrowser.Movies/MediaBrowser.Movies.csproj @@ -42,6 +42,7 @@ + diff --git a/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs b/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs new file mode 100644 index 000000000..238e1bf76 --- /dev/null +++ b/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.Composition; +using System.Threading.Tasks; +using MediaBrowser.Controller.Events; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Controller.Xml; +using MediaBrowser.Model.Entities; +using MediaBrowser.Movies.Entities; + +namespace MediaBrowser.Movies.Providers +{ + [Export(typeof(BaseMetadataProvider))] + public class MovieProviderFromXml : BaseMetadataProvider + { + public override bool Supports(BaseItem item) + { + return item is Movie; + } + + public override Task Fetch(BaseItem item, ItemResolveEventArgs args) + { + return Task.Run(() => + { + var metadataFile = args.GetFileByName("movie.xml"); + + if (metadataFile.HasValue) + { + new BaseItemXmlParser().Fetch(item as Movie, metadataFile.Value.Key); + } + }); + } + } +} diff --git a/MediaBrowser.Movies/Resolvers/MovieResolver.cs b/MediaBrowser.Movies/Resolvers/MovieResolver.cs index 26b4082f3..36fbecf68 100644 --- a/MediaBrowser.Movies/Resolvers/MovieResolver.cs +++ b/MediaBrowser.Movies/Resolvers/MovieResolver.cs @@ -6,7 +6,6 @@ using System.Linq; using MediaBrowser.Controller; using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Controller.Xml; using MediaBrowser.Model.Entities; using MediaBrowser.Movies.Entities; @@ -93,13 +92,6 @@ namespace MediaBrowser.Movies.Resolvers { base.SetItemValues(item, args); - var metadataFile = args.GetFileByName("movie.xml"); - - if (metadataFile.HasValue) - { - new BaseItemXmlParser().Fetch(item, metadataFile.Value.Key); - } - PopulateBonusFeatures(item, args); } } diff --git a/MediaBrowser.TV/MediaBrowser.TV.csproj b/MediaBrowser.TV/MediaBrowser.TV.csproj index 0476c0408..673488eaf 100644 --- a/MediaBrowser.TV/MediaBrowser.TV.csproj +++ b/MediaBrowser.TV/MediaBrowser.TV.csproj @@ -42,6 +42,9 @@ + + + diff --git a/MediaBrowser.TV/Providers/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.TV/Providers/EpisodeImageFromMediaLocationProvider.cs new file mode 100644 index 000000000..61525dc79 --- /dev/null +++ b/MediaBrowser.TV/Providers/EpisodeImageFromMediaLocationProvider.cs @@ -0,0 +1,53 @@ +using System; +using System.ComponentModel.Composition; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using MediaBrowser.Controller.Events; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using MediaBrowser.TV.Entities; + +namespace MediaBrowser.TV.Providers +{ + [Export(typeof(BaseMetadataProvider))] + public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider + { + public override bool Supports(BaseItem item) + { + return item is Episode; + } + + public override Task Fetch(BaseItem item, ItemResolveEventArgs args) + { + return Task.Run(() => + { + string metadataFolder = Path.Combine(args.Parent.Path, "metadata"); + + string episodeFileName = Path.GetFileName(item.Path); + + Season season = args.Parent as Season; + + SetPrimaryImagePath(item as Episode, season, metadataFolder, episodeFileName); + }); + } + + private void SetPrimaryImagePath(Episode item, Season season, string metadataFolder, string episodeFileName) + { + string[] imageFiles = new string[] { + Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".jpg")), + Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".png")) + }; + + if (season == null) + { + // Gotta do this the slow way + item.PrimaryImagePath = imageFiles.FirstOrDefault(f => File.Exists(f)); + } + else + { + item.PrimaryImagePath = imageFiles.FirstOrDefault(f => season.MetadataFiles.Any(s => s.Equals(f, StringComparison.OrdinalIgnoreCase))); + } + } + } +} diff --git a/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs b/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs new file mode 100644 index 000000000..04fed2349 --- /dev/null +++ b/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs @@ -0,0 +1,58 @@ +using System; +using System.ComponentModel.Composition; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using MediaBrowser.Controller.Events; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using MediaBrowser.TV.Entities; +using MediaBrowser.TV.Metadata; + +namespace MediaBrowser.TV.Providers +{ + [Export(typeof(BaseMetadataProvider))] + public class EpisodeProviderFromXml : BaseMetadataProvider + { + public override bool Supports(BaseItem item) + { + return item is Episode; + } + + public override Task Fetch(BaseItem item, ItemResolveEventArgs args) + { + return Task.Run(() => + { + string metadataFolder = Path.Combine(args.Parent.Path, "metadata"); + + string episodeFileName = Path.GetFileName(item.Path); + + string metadataFile = Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".xml")); + + FetchMetadata(item as Episode, args.Parent as Season, metadataFile); + }); + } + + private void FetchMetadata(Episode item, Season season, string metadataFile) + { + if (season == null) + { + // Episode directly in Series folder + // Need to validate it the slow way + if (!File.Exists(metadataFile)) + { + return; + } + } + else + { + if (!season.MetadataFiles.Any(s => s.Equals(metadataFile, StringComparison.OrdinalIgnoreCase))) + { + return; + } + } + + new EpisodeXmlParser().Fetch(item, metadataFile); + } + } +} diff --git a/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs b/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs new file mode 100644 index 000000000..44a0dbc9f --- /dev/null +++ b/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.Composition; +using System.Threading.Tasks; +using MediaBrowser.Controller.Events; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Controller.Xml; +using MediaBrowser.Model.Entities; +using MediaBrowser.TV.Entities; + +namespace MediaBrowser.TV.Providers +{ + [Export(typeof(BaseMetadataProvider))] + public class SeriesProviderFromXml : BaseMetadataProvider + { + public override bool Supports(BaseItem item) + { + return item is Series; + } + + public override Task Fetch(BaseItem item, ItemResolveEventArgs args) + { + return Task.Run(() => + { + var metadataFile = args.GetFileByName("series.xml"); + + if (metadataFile.HasValue) + { + new BaseItemXmlParser().Fetch(item as Series, metadataFile.Value.Key); + } + }); + } + } +} diff --git a/MediaBrowser.TV/Resolvers/EpisodeResolver.cs b/MediaBrowser.TV/Resolvers/EpisodeResolver.cs index dce0ba7d3..b01a7be9a 100644 --- a/MediaBrowser.TV/Resolvers/EpisodeResolver.cs +++ b/MediaBrowser.TV/Resolvers/EpisodeResolver.cs @@ -1,11 +1,7 @@ -using System; -using System.ComponentModel.Composition; -using System.IO; -using System.Linq; +using System.ComponentModel.Composition; using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Resolvers; using MediaBrowser.TV.Entities; -using MediaBrowser.TV.Metadata; namespace MediaBrowser.TV.Resolvers { @@ -21,65 +17,5 @@ namespace MediaBrowser.TV.Resolvers return null; } - - protected override void SetItemValues(Episode item, ItemResolveEventArgs args) - { - base.SetItemValues(item, args); - - string metadataFolder = Path.Combine(args.Parent.Path, "metadata"); - - string episodeFileName = Path.GetFileName(item.Path); - - string metadataFile = Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".xml")); - - Season season = args.Parent as Season; - - FetchMetadata(item, season, metadataFile); - - if (string.IsNullOrEmpty(item.PrimaryImagePath)) - { - SetPrimaryImagePath(item, season, metadataFolder, episodeFileName); - } - } - - private void FetchMetadata(Episode item, Season season, string metadataFile) - { - if (season == null) - { - // Episode directly in Series folder - // Need to validate it the slow way - if (!File.Exists(metadataFile)) - { - return; - } - } - else - { - if (!season.MetadataFiles.Any(s => s.Equals(metadataFile, StringComparison.OrdinalIgnoreCase))) - { - return; - } - } - - new EpisodeXmlParser().Fetch(item, metadataFile); - } - - private void SetPrimaryImagePath(Episode item, Season season, string metadataFolder, string episodeFileName) - { - string[] imageFiles = new string[] { - Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".jpg")), - Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".png")) - }; - - if (season == null) - { - // Gotta do this the slow way - item.PrimaryImagePath = imageFiles.FirstOrDefault(f => File.Exists(f)); - } - else - { - item.PrimaryImagePath = imageFiles.FirstOrDefault(f => season.MetadataFiles.Any(s => s.Equals(f, StringComparison.OrdinalIgnoreCase))); - } - } } } diff --git a/MediaBrowser.TV/Resolvers/SeriesResolver.cs b/MediaBrowser.TV/Resolvers/SeriesResolver.cs index 3b65796d9..bff69607e 100644 --- a/MediaBrowser.TV/Resolvers/SeriesResolver.cs +++ b/MediaBrowser.TV/Resolvers/SeriesResolver.cs @@ -4,7 +4,6 @@ using System.IO; using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Resolvers; using MediaBrowser.TV.Entities; -using MediaBrowser.TV.Metadata; namespace MediaBrowser.TV.Resolvers { @@ -37,23 +36,5 @@ namespace MediaBrowser.TV.Resolvers return null; } - - protected override void SetItemValues(Series item, ItemResolveEventArgs args) - { - base.SetItemValues(item, args); - - // Read data from series.xml, if it exists - PopulateFolderMetadata(item, args); - } - - private void PopulateFolderMetadata(Series item, ItemResolveEventArgs args) - { - var metadataFile = args.GetFileByName("series.xml"); - - if (metadataFile.HasValue) - { - new SeriesXmlParser().Fetch(item, metadataFile.Value.Key); - } - } } }