diff options
Diffstat (limited to 'MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs')
| -rw-r--r-- | MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs new file mode 100644 index 000000000..6ba1912a5 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class MovieXmlProvider : BaseXmlProvider<Movie> + { + private readonly ILogger _logger; + + public MovieXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult<Movie> result, string path, CancellationToken cancellationToken) + { + var chapters = new List<ChapterInfo>(); + + new MovieXmlParser(_logger).Fetch(result.Item, chapters, path, cancellationToken); + + result.Chapters = chapters; + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return GetXmlFileInfo(info, FileSystem); + } + + public static FileInfo GetXmlFileInfo(ItemInfo info, IFileSystem fileSystem) + { + var fileInfo = fileSystem.GetFileSystemInfo(info.Path); + + var directoryInfo = fileInfo as DirectoryInfo; + + if (directoryInfo == null) + { + directoryInfo = new DirectoryInfo(Path.GetDirectoryName(info.Path)); + } + + var directoryPath = directoryInfo.FullName; + + var specificFile = Path.Combine(directoryPath, Path.GetFileNameWithoutExtension(info.Path) + ".xml"); + + var file = new FileInfo(specificFile); + + // In a mixed folder, only {moviename}.xml is supported + if (info.IsInMixedFolder) + { + return file; + } + + // If in it's own folder, prefer movie.xml, but allow the specific file as well + var movieFile = new FileInfo(Path.Combine(directoryPath, "movie.xml")); + + return movieFile.Exists ? movieFile : file; + } + } +} |
