Added Movie, Series and Episode providers

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti 2012-08-19 12:41:47 -04:00
parent d794eecec4
commit c658ea7feb
10 changed files with 187 additions and 99 deletions

View File

@ -83,12 +83,12 @@ namespace MediaBrowser.Controller.IO
List<string> paths = affectedPaths; List<string> paths = affectedPaths;
affectedPaths = new List<string>(); affectedPaths = new List<string>();
ProcessPathChanges(paths); //ProcessPathChanges(paths);
} }
private void ProcessPathChanges(IEnumerable<string> paths) private async Task ProcessPathChanges(IEnumerable<string> paths)
{ {
/*List<BaseItem> itemsToRefresh = new List<BaseItem>(); List<BaseItem> itemsToRefresh = new List<BaseItem>();
foreach (BaseItem item in paths.Select(p => GetAffectedBaseItem(p))) foreach (BaseItem item in paths.Select(p => GetAffectedBaseItem(p)))
{ {
@ -105,15 +105,15 @@ namespace MediaBrowser.Controller.IO
return folder != null && folder.IsRoot; return folder != null && folder.IsRoot;
})) }))
{ {
Kernel.Instance.ReloadRoot(); await Kernel.Instance.ReloadRoot();
} }
else else
{ {
Parallel.For(0, itemsToRefresh.Count, i => /*Parallel.For(0, itemsToRefresh.Count, i =>
{ {
Kernel.Instance.ReloadItem(itemsToRefresh[i]); Kernel.Instance.ReloadItem(itemsToRefresh[i]);
}); });*/
}*/ }
} }
private BaseItem GetAffectedBaseItem(string path) private BaseItem GetAffectedBaseItem(string path)

View File

@ -42,6 +42,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Entities\BoxSet.cs" /> <Compile Include="Entities\BoxSet.cs" />
<Compile Include="Providers\MovieProviderFromXml.cs" />
<Compile Include="Resolvers\BoxSetResolver.cs" /> <Compile Include="Resolvers\BoxSetResolver.cs" />
<Compile Include="Entities\Movie.cs" /> <Compile Include="Entities\Movie.cs" />
<Compile Include="Resolvers\MovieResolver.cs" /> <Compile Include="Resolvers\MovieResolver.cs" />

View File

@ -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<Movie>().Fetch(item as Movie, metadataFile.Value.Key);
}
});
}
}
}

View File

@ -6,7 +6,6 @@ using System.Linq;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Controller.Xml;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Movies.Entities; using MediaBrowser.Movies.Entities;
@ -93,13 +92,6 @@ namespace MediaBrowser.Movies.Resolvers
{ {
base.SetItemValues(item, args); base.SetItemValues(item, args);
var metadataFile = args.GetFileByName("movie.xml");
if (metadataFile.HasValue)
{
new BaseItemXmlParser<Movie>().Fetch(item, metadataFile.Value.Key);
}
PopulateBonusFeatures(item, args); PopulateBonusFeatures(item, args);
} }
} }

View File

@ -42,6 +42,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Entities\Episode.cs" /> <Compile Include="Entities\Episode.cs" />
<Compile Include="Providers\EpisodeImageFromMediaLocationProvider.cs" />
<Compile Include="Providers\EpisodeProviderFromXml.cs" />
<Compile Include="Providers\SeriesProviderFromXml.cs" />
<Compile Include="Resolvers\EpisodeResolver.cs" /> <Compile Include="Resolvers\EpisodeResolver.cs" />
<Compile Include="Metadata\EpisodeXmlParser.cs" /> <Compile Include="Metadata\EpisodeXmlParser.cs" />
<Compile Include="Plugin.cs" /> <Compile Include="Plugin.cs" />

View File

@ -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)));
}
}
}
}

View File

@ -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);
}
}
}

View File

@ -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<Series>().Fetch(item as Series, metadataFile.Value.Key);
}
});
}
}
}

View File

@ -1,11 +1,7 @@
using System; using System.ComponentModel.Composition;
using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
using MediaBrowser.TV.Entities; using MediaBrowser.TV.Entities;
using MediaBrowser.TV.Metadata;
namespace MediaBrowser.TV.Resolvers namespace MediaBrowser.TV.Resolvers
{ {
@ -21,65 +17,5 @@ namespace MediaBrowser.TV.Resolvers
return null; 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)));
}
}
} }
} }

View File

@ -4,7 +4,6 @@ using System.IO;
using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
using MediaBrowser.TV.Entities; using MediaBrowser.TV.Entities;
using MediaBrowser.TV.Metadata;
namespace MediaBrowser.TV.Resolvers namespace MediaBrowser.TV.Resolvers
{ {
@ -37,23 +36,5 @@ namespace MediaBrowser.TV.Resolvers
return null; 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);
}
}
} }
} }