From 3d47b495a96fce84c03d9f3177dc6dbc8a4afa3c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 29 Jun 2014 23:04:50 -0400 Subject: fixes #795 - Support reading Xbmc nfo's --- .../Providers/AdultVideoXmlProvider.cs | 37 ++++++++++++ .../Providers/AlbumXmlProvider.cs | 30 ++++++++++ .../Providers/ArtistXmlProvider.cs | 30 ++++++++++ .../Providers/BoxSetXmlProvider.cs | 34 +++++++++++ .../Providers/ChannelXmlProvider.cs | 30 ++++++++++ .../Providers/EpisodeXmlProvider.cs | 53 +++++++++++++++++ .../Providers/FolderXmlProvider.cs | 33 +++++++++++ .../Providers/GameSystemXmlProvider.cs | 31 ++++++++++ .../Providers/GameXmlProvider.cs | 46 +++++++++++++++ .../Providers/MovieXmlProvider.cs | 66 ++++++++++++++++++++++ .../Providers/MusicVideoXmlProvider.cs | 31 ++++++++++ .../Providers/PersonXmlProvider.cs | 30 ++++++++++ .../Providers/SeasonXmlProvider.cs | 44 +++++++++++++++ .../Providers/SeriesXmlProvider.cs | 43 ++++++++++++++ .../Providers/TrailerXmlProvider.cs | 37 ++++++++++++ .../Providers/VideoXmlProvider.cs | 37 ++++++++++++ 16 files changed, 612 insertions(+) create mode 100644 MediaBrowser.LocalMetadata/Providers/AdultVideoXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/AlbumXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/ArtistXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/ChannelXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs (limited to 'MediaBrowser.LocalMetadata/Providers') diff --git a/MediaBrowser.LocalMetadata/Providers/AdultVideoXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/AdultVideoXmlProvider.cs new file mode 100644 index 000000000..fa17d597d --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/AdultVideoXmlProvider.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + class AdultVideoXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public AdultVideoXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + var chapters = new List(); + + new MovieXmlParser(_logger).Fetch(result.Item, chapters, path, cancellationToken); + + result.Chapters = chapters; + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return MovieXmlProvider.GetXmlFileInfo(info, FileSystem); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/AlbumXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/AlbumXmlProvider.cs new file mode 100644 index 000000000..646922769 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/AlbumXmlProvider.cs @@ -0,0 +1,30 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class AlbumXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public AlbumXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "album.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/ArtistXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/ArtistXmlProvider.cs new file mode 100644 index 000000000..0b5ebfb11 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/ArtistXmlProvider.cs @@ -0,0 +1,30 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + class ArtistXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public ArtistXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "artist.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs new file mode 100644 index 000000000..871c2bd92 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs @@ -0,0 +1,34 @@ +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.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + /// + /// Class BoxSetXmlProvider. + /// + public class BoxSetXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public BoxSetXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new BoxSetXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "collection.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/ChannelXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/ChannelXmlProvider.cs new file mode 100644 index 000000000..78845487a --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/ChannelXmlProvider.cs @@ -0,0 +1,30 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.LiveTv; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class ChannelXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public ChannelXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "channel.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs new file mode 100644 index 000000000..dff3c1c07 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class EpisodeXmlProvider : BaseXmlProvider, IHasOrder + { + private readonly ILogger _logger; + + public EpisodeXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + var images = new List(); + var chapters = new List(); + + new EpisodeXmlParser(_logger).Fetch(result.Item, images, chapters, path, cancellationToken); + + result.Images = images; + result.Chapters = chapters; + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + var metadataPath = Path.GetDirectoryName(info.Path); + metadataPath = Path.Combine(metadataPath, "metadata"); + + var metadataFile = Path.Combine(metadataPath, Path.ChangeExtension(Path.GetFileName(info.Path), ".xml")); + + return directoryService.GetFile(metadataFile); + } + + public int Order + { + get + { + // After Xbmc + return 1; + } + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs new file mode 100644 index 000000000..0a2b33744 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs @@ -0,0 +1,33 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + /// + /// Provides metadata for Folders and all subclasses by parsing folder.xml + /// + public class FolderXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public FolderXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return new FileInfo(Path.Combine(info.Path, "folder.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs new file mode 100644 index 000000000..dd486da1d --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs @@ -0,0 +1,31 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class GameSystemXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public GameSystemXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new GameSystemXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "gamesystem.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs new file mode 100644 index 000000000..681706321 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs @@ -0,0 +1,46 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class GameXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public GameXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new GameXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + 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); + + return info.IsInMixedFolder || file.Exists ? file : new FileInfo(Path.Combine(directoryPath, "game.xml")); + } + } +} 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 + { + private readonly ILogger _logger; + + public MovieXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + var chapters = new List(); + + 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; + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs new file mode 100644 index 000000000..6289dcb56 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs @@ -0,0 +1,31 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + class MusicVideoXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public MusicVideoXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new MusicVideoXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return MovieXmlProvider.GetXmlFileInfo(info, FileSystem); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs new file mode 100644 index 000000000..9f27d6c7d --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs @@ -0,0 +1,30 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class PersonXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public PersonXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "person.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs new file mode 100644 index 000000000..2320982c3 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs @@ -0,0 +1,44 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + /// + /// Class SeriesProviderFromXml + /// + public class SeasonXmlProvider : BaseXmlProvider, IHasOrder + { + private readonly ILogger _logger; + + public SeasonXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new SeasonXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "season.xml")); + } + + public int Order + { + get + { + // After Xbmc + return 1; + } + } + } +} + diff --git a/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs new file mode 100644 index 000000000..311c10287 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs @@ -0,0 +1,43 @@ +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + /// + /// Class SeriesProviderFromXml + /// + public class SeriesXmlProvider : BaseXmlProvider, IHasOrder + { + private readonly ILogger _logger; + + public SeriesXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new SeriesXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "series.xml")); + } + + public int Order + { + get + { + // After Xbmc + return 1; + } + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs new file mode 100644 index 000000000..db3b2fcf0 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + public class TrailerXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public TrailerXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + var chapters = new List(); + + new MovieXmlParser(_logger).Fetch(result.Item, chapters, path, cancellationToken); + + result.Chapters = chapters; + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return MovieXmlProvider.GetXmlFileInfo(info, FileSystem); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs new file mode 100644 index 000000000..25aa61baf --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.LocalMetadata.Providers +{ + class VideoXmlProvider : BaseXmlProvider