aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-06-29 23:04:50 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-06-29 23:04:50 -0400
commit3d47b495a96fce84c03d9f3177dc6dbc8a4afa3c (patch)
tree9d03bc06b30fec5695bb7a89094387ecbdd8e3e9 /MediaBrowser.Providers
parent1a5a75854bd3ec4cdd771c9afdaefe0acb62c03c (diff)
fixes #795 - Support reading Xbmc nfo's
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs37
-rw-r--r--MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs68
-rw-r--r--MediaBrowser.Providers/All/LocalImageProvider.cs327
-rw-r--r--MediaBrowser.Providers/BaseXmlProvider.cs89
-rw-r--r--MediaBrowser.Providers/BoxSets/BoxSetXmlParser.cs129
-rw-r--r--MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs33
-rw-r--r--MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs (renamed from MediaBrowser.Providers/GameGenres/AudioChannelItemMetadataService.cs)6
-rw-r--r--MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs (renamed from MediaBrowser.Providers/GameGenres/VideoChannelItemMetadataService.cs)6
-rw-r--r--MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs37
-rw-r--r--MediaBrowser.Providers/Folders/FolderXmlProvider.cs33
-rw-r--r--MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs57
-rw-r--r--MediaBrowser.Providers/Games/GameSystemXmlParser.cs64
-rw-r--r--MediaBrowser.Providers/Games/GameSystemXmlProvider.cs30
-rw-r--r--MediaBrowser.Providers/Games/GameXmlParser.cs105
-rw-r--r--MediaBrowser.Providers/Games/GameXmlProvider.cs45
-rw-r--r--MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs30
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj49
-rw-r--r--MediaBrowser.Providers/Movies/MovieXmlParser.cs67
-rw-r--r--MediaBrowser.Providers/Movies/MovieXmlProvider.cs65
-rw-r--r--MediaBrowser.Providers/Movies/TrailerXmlProvider.cs36
-rw-r--r--MediaBrowser.Providers/Music/AlbumXmlProvider.cs30
-rw-r--r--MediaBrowser.Providers/Music/ArtistXmlProvider.cs30
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoXmlParser.cs43
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs32
-rw-r--r--MediaBrowser.Providers/People/PersonXmlProvider.cs30
-rw-r--r--MediaBrowser.Providers/Savers/AlbumXmlSaver.cs68
-rw-r--r--MediaBrowser.Providers/Savers/ArtistXmlSaver.cs68
-rw-r--r--MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs69
-rw-r--r--MediaBrowser.Providers/Savers/ChannelXmlSaver.cs74
-rw-r--r--MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs151
-rw-r--r--MediaBrowser.Providers/Savers/FolderXmlSaver.cs81
-rw-r--r--MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs75
-rw-r--r--MediaBrowser.Providers/Savers/GameXmlSaver.cs112
-rw-r--r--MediaBrowser.Providers/Savers/MovieXmlSaver.cs134
-rw-r--r--MediaBrowser.Providers/Savers/PersonXmlSaver.cs83
-rw-r--r--MediaBrowser.Providers/Savers/SeasonXmlSaver.cs87
-rw-r--r--MediaBrowser.Providers/Savers/SeriesXmlSaver.cs135
-rw-r--r--MediaBrowser.Providers/Savers/XmlSaverHelpers.cs718
-rw-r--r--MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs81
-rw-r--r--MediaBrowser.Providers/TV/EpisodeXmlParser.cs271
-rw-r--r--MediaBrowser.Providers/TV/EpisodeXmlProvider.cs43
-rw-r--r--MediaBrowser.Providers/TV/SeasonXmlParser.cs46
-rw-r--r--MediaBrowser.Providers/TV/SeasonXmlProvider.cs34
-rw-r--r--MediaBrowser.Providers/TV/SeriesXmlParser.cs118
-rw-r--r--MediaBrowser.Providers/TV/SeriesXmlProvider.cs33
-rw-r--r--MediaBrowser.Providers/Videos/VideoXmlProvider.cs37
-rw-r--r--MediaBrowser.Providers/Xbmc/XbmcImageSaver.cs272
47 files changed, 9 insertions, 4259 deletions
diff --git a/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs b/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs
deleted file mode 100644
index 07b24c57d6..0000000000
--- a/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Providers.Movies;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.AdultVideos
-{
- class AdultVideoXmlProvider : BaseXmlProvider<AdultVideo>
- {
- private readonly ILogger _logger;
-
- public AdultVideoXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<AdultVideo> 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 MovieXmlProvider.GetXmlFileInfo(info, FileSystem);
- }
- }
-}
diff --git a/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs
deleted file mode 100644
index edaa5edafd..0000000000
--- a/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Providers;
-using System.Collections.Generic;
-using System.IO;
-
-namespace MediaBrowser.Providers.All
-{
- public class InternalMetadataFolderImageProvider : ILocalImageFileProvider, IHasOrder
- {
- private readonly IServerConfigurationManager _config;
-
- public InternalMetadataFolderImageProvider(IServerConfigurationManager config)
- {
- _config = config;
- }
-
- public string Name
- {
- get { return "Internal Images"; }
- }
-
- public bool Supports(IHasImages item)
- {
- if (!item.IsSaveLocalMetadataEnabled())
- {
- return true;
- }
-
- // Extracted images will be saved in here
- if (item is Audio)
- {
- return true;
- }
-
- if (item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return true;
- }
-
- public int Order
- {
- get
- {
- // Make sure this is last so that all other locations are scanned first
- return 1000;
- }
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService)
- {
- var path = _config.ApplicationPaths.GetInternalMetadataPath(item.Id);
-
- try
- {
- return new LocalImageProvider().GetImages(item, path, directoryService);
- }
- catch (DirectoryNotFoundException)
- {
- return new List<LocalImageInfo>();
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/All/LocalImageProvider.cs b/MediaBrowser.Providers/All/LocalImageProvider.cs
deleted file mode 100644
index 1d10fcfa35..0000000000
--- a/MediaBrowser.Providers/All/LocalImageProvider.cs
+++ /dev/null
@@ -1,327 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-
-namespace MediaBrowser.Providers.All
-{
- public class LocalImageProvider : ILocalImageFileProvider
- {
- public string Name
- {
- get { return "Local Images"; }
- }
-
- public int Order
- {
- get { return 0; }
- }
-
- public bool Supports(IHasImages item)
- {
- if (item.SupportsLocalMetadata)
- {
- // Episode has it's own provider
- if (item.IsOwnedItem || item is Episode || item is Audio)
- {
- return false;
- }
-
- return true;
- }
-
- if (item.LocationType == LocationType.Virtual)
- {
- var season = item as Season;
-
- if (season != null)
- {
- var series = season.Series;
-
- if (series != null && series.LocationType == LocationType.FileSystem)
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
- private IEnumerable<FileSystemInfo> GetFiles(IHasImages item, bool includeDirectories, IDirectoryService directoryService)
- {
- if (item.LocationType != LocationType.FileSystem)
- {
- return new List<FileSystemInfo>();
- }
-
- var path = item.ContainingFolderPath;
-
- if (includeDirectories)
- {
- return directoryService.GetFileSystemEntries(path)
- .Where(i => BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase) ||
- (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory);
- }
-
- return directoryService.GetFiles(path)
- .Where(i => BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase));
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService)
- {
- var files = GetFiles(item, true, directoryService).ToList();
-
- var list = new List<LocalImageInfo>();
-
- PopulateImages(item, list, files, true, directoryService);
-
- return list;
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, string path, IDirectoryService directoryService)
- {
- return GetImages(item, new[] { path }, directoryService);
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, IEnumerable<string> paths, IDirectoryService directoryService)
- {
- var files = paths.SelectMany(directoryService.GetFiles)
- .Where(i =>
- {
- var ext = i.Extension;
-
- return !string.IsNullOrEmpty(ext) &&
- BaseItem.SupportedImageExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase);
- })
- .ToList();
-
- var list = new List<LocalImageInfo>();
-
- PopulateImages(item, list, files, false, directoryService);
-
- return list;
- }
-
- private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, bool supportParentSeriesFiles, IDirectoryService directoryService)
- {
- var imagePrefix = string.Empty;
-
- var baseItem = item as BaseItem;
- if (baseItem != null && baseItem.IsInMixedFolder)
- {
- imagePrefix = Path.GetFileNameWithoutExtension(item.Path) + "-";
- }
-
- PopulatePrimaryImages(item, images, files, imagePrefix);
- PopulateBackdrops(item, images, files, imagePrefix, directoryService);
- PopulateScreenshots(images, files, imagePrefix);
-
- AddImage(files, images, imagePrefix + "logo", ImageType.Logo);
- AddImage(files, images, imagePrefix + "clearart", ImageType.Art);
- AddImage(files, images, imagePrefix + "disc", ImageType.Disc);
- AddImage(files, images, imagePrefix + "cdart", ImageType.Disc);
- AddImage(files, images, imagePrefix + "box", ImageType.Box);
- AddImage(files, images, imagePrefix + "back", ImageType.BoxRear);
- AddImage(files, images, imagePrefix + "boxrear", ImageType.BoxRear);
- AddImage(files, images, imagePrefix + "menu", ImageType.Menu);
-
- // Banner
- AddImage(files, images, imagePrefix + "banner", ImageType.Banner);
-
- // Thumb
- AddImage(files, images, imagePrefix + "thumb", ImageType.Thumb);
- AddImage(files, images, imagePrefix + "landscape", ImageType.Thumb);
-
- if (supportParentSeriesFiles)
- {
- var season = item as Season;
-
- if (season != null)
- {
- PopulateSeasonImagesFromSeriesFolder(season, images, directoryService);
- }
- }
- }
-
- private void PopulatePrimaryImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, string imagePrefix)
- {
- AddImage(files, images, imagePrefix + "folder", ImageType.Primary);
- AddImage(files, images, imagePrefix + "cover", ImageType.Primary);
- AddImage(files, images, imagePrefix + "poster", ImageType.Primary);
- AddImage(files, images, imagePrefix + "default", ImageType.Primary);
-
- // Support plex/xbmc convention
- if (item is Series)
- {
- AddImage(files, images, imagePrefix + "show", ImageType.Primary);
- }
-
- // Support plex/xbmc convention
- if (item is Movie || item is MusicVideo || item is AdultVideo)
- {
- AddImage(files, images, imagePrefix + "movie", ImageType.Primary);
- }
-
- if (!string.IsNullOrEmpty(item.Path))
- {
- var name = Path.GetFileNameWithoutExtension(item.Path);
-
- if (!string.IsNullOrEmpty(name))
- {
- AddImage(files, images, name, ImageType.Primary);
- AddImage(files, images, name + "-poster", ImageType.Primary);
- }
- }
- }
-
- private void PopulateBackdrops(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, string imagePrefix, IDirectoryService directoryService)
- {
- PopulateBackdrops(images, files, imagePrefix, "backdrop", "backdrop", ImageType.Backdrop);
-
- if (!string.IsNullOrEmpty(item.Path))
- {
- var name = Path.GetFileNameWithoutExtension(item.Path);
-
- if (!string.IsNullOrEmpty(name))
- {
- AddImage(files, images, imagePrefix + name + "-fanart", ImageType.Backdrop);
- }
- }
-
- PopulateBackdrops(images, files, imagePrefix, "fanart", "fanart-", ImageType.Backdrop);
- PopulateBackdrops(images, files, imagePrefix, "background", "background-", ImageType.Backdrop);
- PopulateBackdrops(images, files, imagePrefix, "art", "art-", ImageType.Backdrop);
-
- var extraFanartFolder = files
- .FirstOrDefault(i => string.Equals(i.Name, "extrafanart", StringComparison.OrdinalIgnoreCase));
-
- if (extraFanartFolder != null)
- {
- PopulateBackdropsFromExtraFanart(extraFanartFolder.FullName, images, directoryService);
- }
- }
-
- private void PopulateBackdropsFromExtraFanart(string path, List<LocalImageInfo> images, IDirectoryService directoryService)
- {
- var imageFiles = directoryService.GetFiles(path)
- .Where(i =>
- {
- var extension = i.Extension;
-
- if (string.IsNullOrEmpty(extension))
- {
- return false;
- }
-
- return BaseItem.SupportedImageExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase);
- });
-
- images.AddRange(imageFiles.Select(i => new LocalImageInfo
- {
- FileInfo = i,
- Type = ImageType.Backdrop
- }));
- }
-
- private void PopulateScreenshots(List<LocalImageInfo> images, List<FileSystemInfo> files, string imagePrefix)
- {
- PopulateBackdrops(images, files, imagePrefix, "screenshot", "screenshot", ImageType.Screenshot);
- }
-
- private void PopulateBackdrops(List<LocalImageInfo> images, List<FileSystemInfo> files, string imagePrefix, string firstFileName, string subsequentFileNamePrefix, ImageType type)
- {
- AddImage(files, images, imagePrefix + firstFileName, type);
-
- var unfound = 0;
- for (var i = 1; i <= 20; i++)
- {
- // Screenshot Image
- var found = AddImage(files, images, imagePrefix + subsequentFileNamePrefix + i, type);
-
- if (!found)
- {
- unfound++;
-
- if (unfound >= 3)
- {
- break;
- }
- }
- }
- }
-
- private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- private void PopulateSeasonImagesFromSeriesFolder(Season season, List<LocalImageInfo> images, IDirectoryService directoryService)
- {
- var seasonNumber = season.IndexNumber;
-
- var series = season.Series;
- if (!seasonNumber.HasValue || series.LocationType != LocationType.FileSystem)
- {
- return;
- }
-
- var seriesFiles = GetFiles(series, false, directoryService).ToList();
-
- // Try using the season name
- var prefix = season.Name.ToLower().Replace(" ", string.Empty);
-
- var filenamePrefixes = new List<string> { prefix };
-
- var seasonMarker = seasonNumber.Value == 0
- ? "-specials"
- : seasonNumber.Value.ToString("00", _usCulture);
-
- // Get this one directly from the file system since we have to go up a level
- if (!string.Equals(prefix, seasonMarker, StringComparison.OrdinalIgnoreCase))
- {
- filenamePrefixes.Add("season" + seasonMarker);
- }
-
- foreach (var filename in filenamePrefixes)
- {
- AddImage(seriesFiles, images, filename + "-poster", ImageType.Primary);
- AddImage(seriesFiles, images, filename + "-fanart", ImageType.Backdrop);
- AddImage(seriesFiles, images, filename + "-banner", ImageType.Banner);
- AddImage(seriesFiles, images, filename + "-landscape", ImageType.Thumb);
- }
- }
-
- private bool AddImage(IEnumerable<FileSystemInfo> files, List<LocalImageInfo> images, string name, ImageType type)
- {
- var image = GetImage(files, name) as FileInfo;
-
- if (image != null)
- {
- images.Add(new LocalImageInfo
- {
- FileInfo = image,
- Type = type
- });
-
- return true;
- }
-
- return false;
- }
-
- private FileSystemInfo GetImage(IEnumerable<FileSystemInfo> files, string name)
- {
- var candidates = files
- .Where(i => string.Equals(name, Path.GetFileNameWithoutExtension(i.Name), StringComparison.OrdinalIgnoreCase))
- .ToList();
-
- return BaseItem.SupportedImageExtensions
- .Select(i => candidates.FirstOrDefault(c => string.Equals(c.Extension, i, StringComparison.OrdinalIgnoreCase)))
- .FirstOrDefault(i => i != null);
- }
- }
-}
diff --git a/MediaBrowser.Providers/BaseXmlProvider.cs b/MediaBrowser.Providers/BaseXmlProvider.cs
deleted file mode 100644
index a5a3ba146a..0000000000
--- a/MediaBrowser.Providers/BaseXmlProvider.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Providers
-{
- public abstract class BaseXmlProvider<T> : ILocalMetadataProvider<T>, IHasChangeMonitor
- where T : IHasMetadata, new()
- {
- protected IFileSystem FileSystem;
-
- public async Task<LocalMetadataResult<T>> GetMetadata(ItemInfo info, CancellationToken cancellationToken)
- {
- var result = new LocalMetadataResult<T>();
-
- var file = GetXmlFile(info, new DirectoryService(new NullLogger()));
-
- if (file == null)
- {
- return result;
- }
-
- var path = file.FullName;
-
- await XmlProviderUtils.XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
-
- try
- {
- result.Item = new T();
-
- Fetch(result, path, cancellationToken);
- result.HasMetadata = true;
- }
- catch (FileNotFoundException)
- {
- result.HasMetadata = false;
- }
- catch (DirectoryNotFoundException)
- {
- result.HasMetadata = false;
- }
- finally
- {
- XmlProviderUtils.XmlParsingResourcePool.Release();
- }
-
- return result;
- }
-
- protected abstract void Fetch(LocalMetadataResult<T> result, string path, CancellationToken cancellationToken);
-
- protected BaseXmlProvider(IFileSystem fileSystem)
- {
- FileSystem = fileSystem;
- }
-
- protected abstract FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService);
-
- public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
- {
- var file = GetXmlFile(new ItemInfo { IsInMixedFolder = item.IsInMixedFolder, Path = item.Path }, directoryService);
-
- if (file == null)
- {
- return false;
- }
-
- return file.Exists && FileSystem.GetLastWriteTimeUtc(file) > date;
- }
-
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
- }
-
- static class XmlProviderUtils
- {
- internal static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(4, 4);
- }
-}
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetXmlParser.cs b/MediaBrowser.Providers/BoxSets/BoxSetXmlParser.cs
deleted file mode 100644
index eb3c99cef5..0000000000
--- a/MediaBrowser.Providers/BoxSets/BoxSetXmlParser.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Xml;
-
-namespace MediaBrowser.Providers.BoxSets
-{
- public class BoxSetXmlParser : BaseItemXmlParser<BoxSet>
- {
- private readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- public BoxSetXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- protected override void FetchDataFromXmlNode(XmlReader reader, BoxSet item)
- {
- switch (reader.Name)
- {
- case "CollectionItems":
-
- using (var subReader = reader.ReadSubtree())
- {
- FetchFromCollectionItemsNode(subReader, item);
- }
- break;
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
-
- private void FetchFromCollectionItemsNode(XmlReader reader, BoxSet item)
- {
- reader.MoveToContent();
-
- var list = new List<LinkedChild>();
-
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element)
- {
- switch (reader.Name)
- {
- case "CollectionItem":
- {
- using (var subReader = reader.ReadSubtree())
- {
- var child = GetLinkedChild(subReader);
-
- if (child != null)
- {
- list.Add(child);
- }
- }
-
- break;
- }
-
- default:
- reader.Skip();
- break;
- }
- }
- }
-
- item.LinkedChildren = list;
- }
-
- private LinkedChild GetLinkedChild(XmlReader reader)
- {
- reader.MoveToContent();
-
- var linkedItem = new LinkedChild
- {
- Type = LinkedChildType.Manual
- };
-
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element)
- {
- switch (reader.Name)
- {
- case "Name":
- {
- linkedItem.ItemName = reader.ReadElementContentAsString();
- break;
- }
-
- case "Type":
- {
- linkedItem.ItemType = reader.ReadElementContentAsString();
- break;
- }
-
- case "Year":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
- {
- linkedItem.ItemYear = rval;
- }
- }
-
- break;
- }
-
- default:
- reader.Skip();
- break;
- }
- }
- }
-
- return string.IsNullOrWhiteSpace(linkedItem.ItemName) || string.IsNullOrWhiteSpace(linkedItem.ItemType) ? null : linkedItem;
- }
- }
-}
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs b/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs
deleted file mode 100644
index 1d4d893ed7..0000000000
--- a/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.BoxSets
-{
- /// <summary>
- /// Class BoxSetXmlProvider.
- /// </summary>
- public class BoxSetXmlProvider : BaseXmlProvider<BoxSet>
- {
- private readonly ILogger _logger;
-
- public BoxSetXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<BoxSet> 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.Providers/GameGenres/AudioChannelItemMetadataService.cs b/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs
index c8e496b710..42b1ea4ded 100644
--- a/MediaBrowser.Providers/GameGenres/AudioChannelItemMetadataService.cs
+++ b/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs
@@ -1,13 +1,13 @@
-using MediaBrowser.Common.IO;
+using System.Collections.Generic;
+using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
-using System.Collections.Generic;
-namespace MediaBrowser.Providers.GameGenres
+namespace MediaBrowser.Providers.Channels
{
public class AudioChannelItemMetadataService : MetadataService<ChannelAudioItem, ItemLookupInfo>
{
diff --git a/MediaBrowser.Providers/GameGenres/VideoChannelItemMetadataService.cs b/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs
index 9dd37c9595..ddd1122073 100644
--- a/MediaBrowser.Providers/GameGenres/VideoChannelItemMetadataService.cs
+++ b/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs
@@ -1,13 +1,13 @@
-using MediaBrowser.Common.IO;
+using System.Collections.Generic;
+using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
-using System.Collections.Generic;
-namespace MediaBrowser.Providers.GameGenres
+namespace MediaBrowser.Providers.Channels
{
public class VideoChannelItemMetadataService : MetadataService<ChannelVideoItem, ItemLookupInfo>
{
diff --git a/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs
deleted file mode 100644
index fa5946bd5c..0000000000
--- a/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Providers.All;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Providers.Folders
-{
- public class CollectionFolderLocalImageProvider : ILocalImageFileProvider, IHasOrder
- {
- public string Name
- {
- get { return "Collection Folder Images"; }
- }
-
- public bool Supports(IHasImages item)
- {
- return item is CollectionFolder && item.SupportsLocalMetadata;
- }
-
- public int Order
- {
- get
- {
- // Run after LocalImageProvider
- return 1;
- }
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService)
- {
- var collectionFolder = (CollectionFolder)item;
-
- return new LocalImageProvider().GetImages(item, collectionFolder.PhysicalLocations, directoryService);
- }
- }
-}
diff --git a/MediaBrowser.Providers/Folders/FolderXmlProvider.cs b/MediaBrowser.Providers/Folders/FolderXmlProvider.cs
deleted file mode 100644
index 144d1b752e..0000000000
--- a/MediaBrowser.Providers/Folders/FolderXmlProvider.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Folders
-{
- /// <summary>
- /// Provides metadata for Folders and all subclasses by parsing folder.xml
- /// </summary>
- public class FolderXmlProvider : BaseXmlProvider<Folder>
- {
- private readonly ILogger _logger;
-
- public FolderXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Folder> result, string path, CancellationToken cancellationToken)
- {
- new BaseItemXmlParser<Folder>(_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.Providers/Folders/ImagesByNameImageProvider.cs b/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs
deleted file mode 100644
index 5dcf3bc596..0000000000
--- a/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Providers.All;
-using System.Collections.Generic;
-using System.IO;
-
-namespace MediaBrowser.Providers.Folders
-{
- public class ImagesByNameImageProvider : ILocalImageFileProvider, IHasOrder
- {
- private readonly IFileSystem _fileSystem;
- private readonly IServerConfigurationManager _config;
-
- public ImagesByNameImageProvider(IFileSystem fileSystem, IServerConfigurationManager config)
- {
- _fileSystem = fileSystem;
- _config = config;
- }
-
- public string Name
- {
- get { return "Images By Name"; }
- }
-
- public bool Supports(IHasImages item)
- {
- return item is CollectionFolder;
- }
-
- public int Order
- {
- get
- {
- // Run after LocalImageProvider, and after CollectionFolderImageProvider
- return 2;
- }
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService)
- {
- var name = _fileSystem.GetValidFilename(item.Name);
-
- var path = Path.Combine(_config.ApplicationPaths.GeneralPath, name);
-
- try
- {
- return new LocalImageProvider().GetImages(item, path, directoryService);
- }
- catch (DirectoryNotFoundException)
- {
- return new List<LocalImageInfo>();
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/Games/GameSystemXmlParser.cs b/MediaBrowser.Providers/Games/GameSystemXmlParser.cs
deleted file mode 100644
index 85ee509ca1..0000000000
--- a/MediaBrowser.Providers/Games/GameSystemXmlParser.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Xml;
-
-namespace MediaBrowser.Providers.Games
-{
- public class GameSystemXmlParser : BaseItemXmlParser<GameSystem>
- {
- public GameSystemXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- private readonly Task _cachedTask = Task.FromResult(true);
- public Task FetchAsync(GameSystem item, string metadataFile, CancellationToken cancellationToken)
- {
- Fetch(item, metadataFile, cancellationToken);
-
- cancellationToken.ThrowIfCancellationRequested();
-
- return _cachedTask;
- }
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, GameSystem item)
- {
- switch (reader.Name)
- {
- case "GameSystem":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.GameSystemName = val;
- }
- break;
- }
-
- case "GamesDbId":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.SetProviderId(MetadataProviders.Gamesdb, val);
- }
- break;
- }
-
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs b/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs
deleted file mode 100644
index db9c8f063c..0000000000
--- a/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Games
-{
- public class GameSystemXmlProvider : BaseXmlProvider<GameSystem>
- {
- private readonly ILogger _logger;
-
- public GameSystemXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<GameSystem> 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.Providers/Games/GameXmlParser.cs b/MediaBrowser.Providers/Games/GameXmlParser.cs
deleted file mode 100644
index dfa71e5f44..0000000000
--- a/MediaBrowser.Providers/Games/GameXmlParser.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System.Globalization;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Xml;
-
-namespace MediaBrowser.Providers.Games
-{
- /// <summary>
- /// Class EpisodeXmlParser
- /// </summary>
- public class GameXmlParser : BaseItemXmlParser<Game>
- {
- private readonly CultureInfo _usCulture = new CultureInfo("en-US");
-
- public GameXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- private readonly Task _cachedTask = Task.FromResult(true);
- public Task FetchAsync(Game item, string metadataFile, CancellationToken cancellationToken)
- {
- Fetch(item, metadataFile, cancellationToken);
-
- cancellationToken.ThrowIfCancellationRequested();
-
- return _cachedTask;
- }
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Game item)
- {
- switch (reader.Name)
- {
- case "GameSystem":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.GameSystem = val;
- }
- break;
- }
-
- case "GamesDbId":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.SetProviderId(MetadataProviders.Gamesdb, val);
- }
- break;
- }
-
- case "NesBox":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.SetProviderId(MetadataProviders.NesBox, val);
- }
- break;
- }
-
- case "NesBoxRom":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.SetProviderId(MetadataProviders.NesBoxRom, val);
- }
- break;
- }
-
- case "Players":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- int num;
-
- if (int.TryParse(val, NumberStyles.Integer, _usCulture, out num))
- {
- item.PlayersSupported = num;
- }
- }
- break;
- }
-
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/Games/GameXmlProvider.cs b/MediaBrowser.Providers/Games/GameXmlProvider.cs
deleted file mode 100644
index 6609f9d5e7..0000000000
--- a/MediaBrowser.Providers/Games/GameXmlProvider.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Games
-{
- public class GameXmlProvider : BaseXmlProvider<Game>
- {
- private readonly ILogger _logger;
-
- public GameXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Game> 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.Providers/LiveTv/ChannelXmlProvider.cs b/MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs
deleted file mode 100644
index 44a312e24c..0000000000
--- a/MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.LiveTv;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.LiveTv
-{
- public class ChannelXmlProvider : BaseXmlProvider<LiveTvChannel>
- {
- private readonly ILogger _logger;
-
- public ChannelXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<LiveTvChannel> result, string path, CancellationToken cancellationToken)
- {
- new BaseItemXmlParser<LiveTvChannel>(_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.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 3234a8ae04..4c9d2416f0 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -70,41 +70,28 @@
<Link>Properties\SharedVersion.cs</Link>
</Compile>
<Compile Include="AdultVideos\AdultVideoMetadataService.cs" />
- <Compile Include="AdultVideos\AdultVideoXmlProvider.cs" />
- <Compile Include="All\InternalMetadataFolderImageProvider.cs" />
- <Compile Include="All\LocalImageProvider.cs" />
<Compile Include="Books\BookMetadataService.cs" />
<Compile Include="BoxSets\BoxSetMetadataService.cs" />
- <Compile Include="BoxSets\BoxSetXmlParser.cs" />
<Compile Include="BoxSets\MovieDbBoxSetImageProvider.cs" />
<Compile Include="BoxSets\MovieDbBoxSetProvider.cs" />
<Compile Include="Channels\ChannelMetadataService.cs" />
<Compile Include="Chapters\ChapterManager.cs" />
<Compile Include="FolderImages\DefaultImageProvider.cs" />
- <Compile Include="Folders\CollectionFolderImageProvider.cs" />
<Compile Include="Folders\FolderMetadataService.cs" />
- <Compile Include="Folders\ImagesByNameImageProvider.cs" />
- <Compile Include="GameGenres\AudioChannelItemMetadataService.cs" />
+ <Compile Include="Channels\AudioChannelItemMetadataService.cs" />
<Compile Include="GameGenres\GameGenreMetadataService.cs" />
- <Compile Include="GameGenres\VideoChannelItemMetadataService.cs" />
+ <Compile Include="Channels\VideoChannelItemMetadataService.cs" />
<Compile Include="Games\GameMetadataService.cs" />
<Compile Include="Games\GameSystemMetadataService.cs" />
- <Compile Include="Games\GameSystemXmlParser.cs" />
<Compile Include="Genres\GenreMetadataService.cs" />
<Compile Include="LiveTv\AudioRecordingService.cs" />
<Compile Include="LiveTv\ChannelMetadataService.cs" />
- <Compile Include="LiveTv\ChannelXmlProvider.cs" />
<Compile Include="LiveTv\ProgramMetadataService.cs" />
<Compile Include="LiveTv\VideoRecordingService.cs" />
<Compile Include="Manager\ImageSaver.cs" />
<Compile Include="Manager\ItemImageProvider.cs" />
<Compile Include="Manager\ProviderManager.cs" />
<Compile Include="Manager\MetadataService.cs" />
- <Compile Include="BaseXmlProvider.cs" />
- <Compile Include="Folders\FolderXmlProvider.cs" />
- <Compile Include="Games\GameXmlParser.cs" />
- <Compile Include="Games\GameXmlProvider.cs" />
- <Compile Include="Games\GameSystemXmlProvider.cs" />
<Compile Include="Manager\SeriesOrderManager.cs" />
<Compile Include="MediaInfo\FFProbeAudioInfo.cs" />
<Compile Include="MediaInfo\FFProbeHelpers.cs" />
@@ -118,16 +105,13 @@
<Compile Include="Movies\GenericMovieDbInfo.cs" />
<Compile Include="Movies\MovieDbSearch.cs" />
<Compile Include="Movies\MovieMetadataService.cs" />
- <Compile Include="Movies\MovieXmlProvider.cs" />
<Compile Include="Movies\TmdbSettings.cs" />
- <Compile Include="Movies\TrailerXmlProvider.cs" />
<Compile Include="MusicGenres\MusicGenreImageProvider.cs" />
<Compile Include="GameGenres\GameGenreImageProvider.cs" />
<Compile Include="Genres\GenreImageProvider.cs" />
<Compile Include="ImagesByName\ImageUtils.cs" />
<Compile Include="MediaInfo\AudioImageProvider.cs" />
<Compile Include="MediaInfo\VideoImageProvider.cs" />
- <Compile Include="BoxSets\BoxSetXmlProvider.cs" />
<Compile Include="Movies\MovieDbImageProvider.cs" />
<Compile Include="Movies\FanartMovieImageProvider.cs" />
<Compile Include="MusicGenres\MusicGenreMetadataService.cs" />
@@ -146,16 +130,12 @@
<Compile Include="Music\MusicBrainzArtistProvider.cs" />
<Compile Include="Music\MusicExternalIds.cs" />
<Compile Include="Music\MusicVideoMetadataService.cs" />
- <Compile Include="Music\MusicVideoXmlProvider.cs" />
<Compile Include="Omdb\OmdbProvider.cs" />
<Compile Include="Omdb\OmdbItemProvider.cs" />
<Compile Include="People\MovieDbPersonImageProvider.cs" />
<Compile Include="Movies\MovieUpdatesPrescanTask.cs" />
- <Compile Include="Movies\MovieXmlParser.cs" />
<Compile Include="Movies\FanArtMovieUpdatesPostScanTask.cs" />
<Compile Include="Movies\MovieDbProvider.cs" />
- <Compile Include="Music\AlbumXmlProvider.cs" />
- <Compile Include="Music\ArtistXmlProvider.cs" />
<Compile Include="Music\FanArtUpdatesPostScanTask.cs" />
<Compile Include="Music\LastfmAlbumProvider.cs" />
<Compile Include="Music\LastfmHelper.cs" />
@@ -163,10 +143,8 @@
<Compile Include="Music\FanArtArtistProvider.cs" />
<Compile Include="Music\LastFmImageProvider.cs" />
<Compile Include="Music\MusicBrainzAlbumProvider.cs" />
- <Compile Include="Music\MusicVideoXmlParser.cs" />
<Compile Include="Music\SoundtrackPostScanTask.cs" />
<Compile Include="People\PersonMetadataService.cs" />
- <Compile Include="People\PersonXmlProvider.cs" />
<Compile Include="People\MovieDbPersonProvider.cs" />
<Compile Include="Photos\ExifReader.cs" />
<Compile Include="Photos\ExifTags.cs" />
@@ -175,34 +153,17 @@
<Compile Include="Photos\PhotoProvider.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Manager\ProviderUtils.cs" />
- <Compile Include="Savers\AlbumXmlSaver.cs" />
- <Compile Include="Savers\ArtistXmlSaver.cs" />
- <Compile Include="Savers\BoxSetXmlSaver.cs" />
- <Compile Include="Savers\ChannelXmlSaver.cs" />
- <Compile Include="Savers\EpisodeXmlSaver.cs" />
- <Compile Include="Savers\FolderXmlSaver.cs" />
- <Compile Include="Savers\GameSystemXmlSaver.cs" />
- <Compile Include="Savers\GameXmlSaver.cs" />
- <Compile Include="Savers\MovieXmlSaver.cs" />
- <Compile Include="Savers\PersonXmlSaver.cs" />
- <Compile Include="Savers\SeasonXmlSaver.cs" />
- <Compile Include="Savers\SeriesXmlSaver.cs" />
- <Compile Include="Savers\XmlSaverHelpers.cs" />
<Compile Include="Studios\StudiosImageProvider.cs" />
<Compile Include="Studios\StudioMetadataService.cs" />
<Compile Include="Subtitles\OpenSubtitleDownloader.cs" />
<Compile Include="Subtitles\SubtitleManager.cs" />
- <Compile Include="TV\EpisodeLocalImageProvider.cs" />
<Compile Include="TV\EpisodeMetadataService.cs" />
- <Compile Include="TV\EpisodeXmlProvider.cs" />
- <Compile Include="TV\EpisodeXmlParser.cs" />
<Compile Include="TV\FanArtTvUpdatesPostScanTask.cs" />
<Compile Include="TV\FanArtSeasonProvider.cs" />
<Compile Include="TV\FanartSeriesProvider.cs" />
<Compile Include="TV\MissingEpisodeProvider.cs" />
<Compile Include="TV\MovieDbSeriesImageProvider.cs" />
<Compile Include="TV\MovieDbSeriesProvider.cs" />
- <Compile Include="TV\SeasonXmlParser.cs" />
<Compile Include="TV\SeriesMetadataService.cs" />
<Compile Include="TV\TvdbEpisodeImageProvider.cs" />
<Compile Include="People\TvdbPersonImageProvider.cs" />
@@ -212,16 +173,11 @@
<Compile Include="TV\SeasonMetadataService.cs" />
<Compile Include="TV\TvdbEpisodeProvider.cs" />
<Compile Include="TV\TvdbSeriesProvider.cs" />
- <Compile Include="TV\SeasonXmlProvider.cs" />
<Compile Include="TV\SeriesPostScanTask.cs" />
- <Compile Include="TV\SeriesXmlProvider.cs" />
- <Compile Include="TV\SeriesXmlParser.cs" />
<Compile Include="TV\TvdbPrescanTask.cs" />
<Compile Include="TV\TvExternalIds.cs" />
<Compile Include="Users\UserMetadataService.cs" />
<Compile Include="Videos\VideoMetadataService.cs" />
- <Compile Include="Videos\VideoXmlProvider.cs" />
- <Compile Include="Xbmc\XbmcImageSaver.cs" />
<Compile Include="Years\YearMetadataService.cs" />
</ItemGroup>
<ItemGroup>
@@ -248,6 +204,7 @@
<ItemGroup>
<EmbeddedResource Include="MediaInfo\whitelist.txt" />
</ItemGroup>
+ <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition=" '$(ConfigurationName)' != 'Release Mono' " />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
diff --git a/MediaBrowser.Providers/Movies/MovieXmlParser.cs b/MediaBrowser.Providers/Movies/MovieXmlParser.cs
deleted file mode 100644
index 52795ac2d7..0000000000
--- a/MediaBrowser.Providers/Movies/MovieXmlParser.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
-using System.Threading;
-using System.Xml;
-
-namespace MediaBrowser.Providers.Movies
-{
- /// <summary>
- /// Class EpisodeXmlParser
- /// </summary>
- public class MovieXmlParser : BaseItemXmlParser<Video>
- {
- private List<ChapterInfo> _chaptersFound;
-
- public MovieXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- public void Fetch(Video item,
- List<ChapterInfo> chapters,
- string metadataFile,
- CancellationToken cancellationToken)
- {
- _chaptersFound = chapters;
-
- Fetch(item, metadataFile, cancellationToken);
- }
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Video item)
- {
- switch (reader.Name)
- {
- case "TmdbCollectionName":
- {
- var val = reader.ReadElementContentAsString();
- var movie = item as Movie;
-
- if (!string.IsNullOrWhiteSpace(val) && movie != null)
- {
- movie.TmdbCollectionName = val;
- }
-
- break;
- }
-
- case "Chapters":
-
- _chaptersFound.AddRange(FetchChaptersFromXmlNode(item, reader.ReadSubtree()));
- break;
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/Movies/MovieXmlProvider.cs b/MediaBrowser.Providers/Movies/MovieXmlProvider.cs
deleted file mode 100644
index cc7293f533..0000000000
--- a/MediaBrowser.Providers/Movies/MovieXmlProvider.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Movies
-{
- 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;
- }
- }
-}
diff --git a/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs b/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs
deleted file mode 100644
index d24bdb431b..0000000000
--- a/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Movies
-{
- public class TrailerXmlProvider : BaseXmlProvider<Trailer>
- {
- private readonly ILogger _logger;
-
- public TrailerXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Trailer> 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 MovieXmlProvider.GetXmlFileInfo(info, FileSystem);
- }
- }
-}
diff --git a/MediaBrowser.Providers/Music/AlbumXmlProvider.cs b/MediaBrowser.Providers/Music/AlbumXmlProvider.cs
deleted file mode 100644
index 73b9140902..0000000000
--- a/MediaBrowser.Providers/Music/AlbumXmlProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Music
-{
- class AlbumXmlProvider : BaseXmlProvider<MusicAlbum>
- {
- private readonly ILogger _logger;
-
- public AlbumXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<MusicAlbum> result, string path, CancellationToken cancellationToken)
- {
- new BaseItemXmlParser<MusicAlbum>(_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.Providers/Music/ArtistXmlProvider.cs b/MediaBrowser.Providers/Music/ArtistXmlProvider.cs
deleted file mode 100644
index b221fde1e6..0000000000
--- a/MediaBrowser.Providers/Music/ArtistXmlProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Music
-{
- class ArtistXmlProvider : BaseXmlProvider<MusicArtist>
- {
- private readonly ILogger _logger;
-
- public ArtistXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<MusicArtist> result, string path, CancellationToken cancellationToken)
- {
- new BaseItemXmlParser<MusicArtist>(_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.Providers/Music/MusicVideoXmlParser.cs b/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
deleted file mode 100644
index 0c160ff665..0000000000
--- a/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.Xml;
-
-namespace MediaBrowser.Providers.Music
-{
- public class MusicVideoXmlParser : BaseItemXmlParser<MusicVideo>
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="BaseItemXmlParser{T}" /> class.
- /// </summary>
- /// <param name="logger">The logger.</param>
- public MusicVideoXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, MusicVideo item)
- {
- switch (reader.Name)
- {
- case "Artist":
- item.Artist = reader.ReadElementContentAsString();
- break;
-
- case "Album":
- item.Album = reader.ReadElementContentAsString();
- break;
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
deleted file mode 100644
index 93d9031c3d..0000000000
--- a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Providers.Movies;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Music
-{
- class MusicVideoXmlProvider : BaseXmlProvider<MusicVideo>
- {
- private readonly ILogger _logger;
-
- public MusicVideoXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<MusicVideo> 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.Providers/People/PersonXmlProvider.cs b/MediaBrowser.Providers/People/PersonXmlProvider.cs
deleted file mode 100644
index b120c4830b..0000000000
--- a/MediaBrowser.Providers/People/PersonXmlProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.People
-{
- public class PersonXmlProvider : BaseXmlProvider<Person>
- {
- private readonly ILogger _logger;
-
- public PersonXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Person> result, string path, CancellationToken cancellationToken)
- {
- new BaseItemXmlParser<Person>(_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.Providers/Savers/AlbumXmlSaver.cs b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
deleted file mode 100644
index 4f08f0d823..0000000000
--- a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Library;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- class AlbumXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is MusicAlbum && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- XmlSaverHelpers.AddCommonNodes((MusicAlbum)item, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "album.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
deleted file mode 100644
index 5f9c06d257..0000000000
--- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Library;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- class ArtistXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is MusicArtist && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- XmlSaverHelpers.AddCommonNodes((MusicArtist)item, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "artist.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
deleted file mode 100644
index dcf789b300..0000000000
--- a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Entities;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- public class BoxSetXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is BoxSet && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- XmlSaverHelpers.AddCommonNodes((BoxSet)item, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "collection.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
deleted file mode 100644
index 2d4221bda3..0000000000
--- a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.LiveTv;
-using MediaBrowser.Model.Entities;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- /// <summary>
- /// Class PersonXmlSaver
- /// </summary>
- public class ChannelXmlSaver : IMetadataFileSaver
- {
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is LiveTvChannel && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- XmlSaverHelpers.AddCommonNodes((LiveTvChannel)item, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "channel.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
deleted file mode 100644
index 98a2986202..0000000000
--- a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Persistence;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- public class EpisodeXmlSaver : IMetadataFileSaver
- {
- private readonly IItemRepository _itemRepository;
-
- private readonly CultureInfo _usCulture = new CultureInfo("en-US");
-
- public EpisodeXmlSaver(IItemRepository itemRepository)
- {
- _itemRepository = itemRepository;
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is Episode && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var episode = (Episode)item;
-
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- if (!string.IsNullOrEmpty(item.Name))
- {
- builder.Append("<EpisodeName>" + SecurityElement.Escape(episode.Name) + "</EpisodeName>");
- }
-
- if (episode.IndexNumber.HasValue)
- {
- builder.Append("<EpisodeNumber>" + SecurityElement.Escape(episode.IndexNumber.Value.ToString(_usCulture)) + "</EpisodeNumber>");
- }
-
- if (episode.IndexNumberEnd.HasValue)
- {
- builder.Append("<EpisodeNumberEnd>" + SecurityElement.Escape(episode.IndexNumberEnd.Value.ToString(_usCulture)) + "</EpisodeNumberEnd>");
- }
-
- if (episode.AirsAfterSeasonNumber.HasValue)
- {
- builder.Append("<airsafter_season>" + SecurityElement.Escape(episode.AirsAfterSeasonNumber.Value.ToString(_usCulture)) + "</airsafter_season>");
- }
- if (episode.AirsBeforeEpisodeNumber.HasValue)
- {
- builder.Append("<airsbefore_episode>" + SecurityElement.Escape(episode.AirsBeforeEpisodeNumber.Value.ToString(_usCulture)) + "</airsbefore_episode>");
- }
- if (episode.AirsBeforeSeasonNumber.HasValue)
- {
- builder.Append("<airsbefore_season>" + SecurityElement.Escape(episode.AirsBeforeSeasonNumber.Value.ToString(_usCulture)) + "</airsbefore_season>");
- }
-
- if (episode.ParentIndexNumber.HasValue)
- {
- builder.Append("<SeasonNumber>" + SecurityElement.Escape(episode.ParentIndexNumber.Value.ToString(_usCulture)) + "</SeasonNumber>");
- }
-
- if (episode.AbsoluteEpisodeNumber.HasValue)
- {
- builder.Append("<absolute_number>" + SecurityElement.Escape(episode.AbsoluteEpisodeNumber.Value.ToString(_usCulture)) + "</absolute_number>");
- }
-
- if (episode.DvdEpisodeNumber.HasValue)
- {
- builder.Append("<DVD_episodenumber>" + SecurityElement.Escape(episode.DvdEpisodeNumber.Value.ToString(_usCulture)) + "</DVD_episodenumber>");
- }
-
- if (episode.DvdSeasonNumber.HasValue)
- {
- builder.Append("<DVD_season>" + SecurityElement.Escape(episode.DvdSeasonNumber.Value.ToString(_usCulture)) + "</DVD_season>");
- }
-
- if (episode.PremiereDate.HasValue)
- {
- builder.Append("<FirstAired>" + SecurityElement.Escape(episode.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd")) + "</FirstAired>");
- }
-
- XmlSaverHelpers.AddCommonNodes(episode, builder);
- XmlSaverHelpers.AddMediaInfo(episode, builder, _itemRepository);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- "FirstAired",
- "SeasonNumber",
- "EpisodeNumber",
- "EpisodeName",
- "EpisodeNumberEnd",
- "airsafter_season",
- "airsbefore_episode",
- "airsbefore_season",
- "DVD_episodenumber",
- "DVD_season",
- "absolute_number"
- });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- var filename = Path.ChangeExtension(Path.GetFileName(item.Path), ".xml");
-
- return Path.Combine(Path.GetDirectoryName(item.Path), "metadata", filename);
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
deleted file mode 100644
index db08eafe3f..0000000000
--- a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Entities;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- public class FolderXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- if (item is Folder)
- {
- if (!(item is Series) && !(item is BoxSet) && !(item is MusicArtist) && !(item is MusicAlbum) &&
- !(item is Season) &&
- !(item is GameSystem))
- {
- return updateType >= ItemUpdateType.MetadataDownload;
- }
- }
-
- return false;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- XmlSaverHelpers.AddCommonNodes((Folder)item, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "folder.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
deleted file mode 100644
index 98a2d03beb..0000000000
--- a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using System.Collections.Generic;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- public class GameSystemXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is GameSystem && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var gameSystem = (GameSystem)item;
-
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- if (!string.IsNullOrEmpty(gameSystem.GameSystemName))
- {
- builder.Append("<GameSystem>" + SecurityElement.Escape(gameSystem.GameSystemName) + "</GameSystem>");
- }
-
- XmlSaverHelpers.AddCommonNodes(gameSystem, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "gamesystem.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/GameXmlSaver.cs b/MediaBrowser.Providers/Savers/GameXmlSaver.cs
deleted file mode 100644
index 959041a8c4..0000000000
--- a/MediaBrowser.Providers/Savers/GameXmlSaver.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Entities;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- /// <summary>
- /// Saves game.xml for games
- /// </summary>
- public class GameXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is Game && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- var game = (Game)item;
-
- if (game.PlayersSupported.HasValue)
- {
- builder.Append("<Players>" + SecurityElement.Escape(game.PlayersSupported.Value.ToString(UsCulture)) + "</Players>");
- }
-
- if (!string.IsNullOrEmpty(game.GameSystem))
- {
- builder.Append("<GameSystem>" + SecurityElement.Escape(game.GameSystem) + "</GameSystem>");
- }
-
- var val = game.GetProviderId(MetadataProviders.NesBox);
-
- if (!string.IsNullOrEmpty(val))
- {
- builder.Append("<NesBox>" + SecurityElement.Escape(val) + "</NesBox>");
- }
-
- val = game.GetProviderId(MetadataProviders.NesBoxRom);
-
- if (!string.IsNullOrEmpty(val))
- {
- builder.Append("<NesBoxRom>" + SecurityElement.Escape(val) + "</NesBoxRom>");
- }
-
- XmlSaverHelpers.AddCommonNodes(game, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- "Players",
- "GameSystem",
- "NesBox",
- "NesBoxRom"
- });
- }
-
- public string GetSavePath(IHasMetadata item)
- {
- return GetGameSavePath((Game)item);
- }
-
- public static string GetGameSavePath(Game item)
- {
- if (item.IsInMixedFolder)
- {
- return Path.ChangeExtension(item.Path, ".xml");
- }
-
- return Path.Combine(item.ContainingFolderPath, "game.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
deleted file mode 100644
index cd5f2faec3..0000000000
--- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Persistence;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- /// <summary>
- /// Saves movie.xml for movies, trailers and music videos
- /// </summary>
- public class MovieXmlSaver : IMetadataFileSaver
- {
- private readonly IItemRepository _itemRepository;
-
- public MovieXmlSaver(IItemRepository itemRepository)
- {
- _itemRepository = itemRepository;
- }
-
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- var video = item as Video;
-
- // Check parent for null to avoid running this against things like video backdrops
- if (video != null && !(item is Episode) && !video.IsOwnedItem)
- {
- return updateType >= ItemUpdateType.MetadataDownload;
- }
-
- return false;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var video = (Video)item;
-
- var builder = new StringBuilder();
-
- builder.Append("<Title>");
-
- XmlSaverHelpers.AddCommonNodes(video, builder);
-
- var musicVideo = item as MusicVideo;
-
- if (musicVideo != null)
- {
- if (!string.IsNullOrEmpty(musicVideo.Artist))
- {
- builder.Append("<Artist>" + SecurityElement.Escape(musicVideo.Artist) + "</Artist>");
- }
- if (!string.IsNullOrEmpty(musicVideo.Album))
- {
- builder.Append("<Album>" + SecurityElement.Escape(musicVideo.Album) + "</Album>");
- }
- }
-
- var movie = item as Movie;
-
- if (movie != null)
- {
- if (!string.IsNullOrEmpty(movie.TmdbCollectionName))
- {
- builder.Append("<TmdbCollectionName>" + SecurityElement.Escape(movie.TmdbCollectionName) + "</TmdbCollectionName>");
- }
- }
-
- XmlSaverHelpers.AddMediaInfo(video, builder, _itemRepository);
-
- builder.Append("</Title>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- // Deprecated. No longer saving in this field.
- "IMDBrating",
-
- // Deprecated. No longer saving in this field.
- "Description",
-
- "Artist",
- "Album",
- "TmdbCollectionName"
- });
- }
-
- public string GetSavePath(IHasMetadata item)
- {
- return GetMovieSavePath((Video)item);
- }
-
- public static string GetMovieSavePath(Video item)
- {
- if (item.IsInMixedFolder)
- {
- return Path.ChangeExtension(item.Path, ".xml");
- }
-
- return Path.Combine(item.ContainingFolderPath, "movie.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
deleted file mode 100644
index 9bbe5b5dc4..0000000000
--- a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
-using System.Collections.Generic;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Providers.Savers
-{
- /// <summary>
- /// Class PersonXmlSaver
- /// </summary>
- public class PersonXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is Person && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var person = (Person)item;
-
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- XmlSaverHelpers.AddCommonNodes(person, builder);
-
- if (!string.IsNullOrEmpty(person.PlaceOfBirth))
- {
- builder.Append("<PlaceOfBirth>" + SecurityElement.Escape(person.PlaceOfBirth) + "</PlaceOfBirth>");
- }
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- "PlaceOfBirth"
- });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "person.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
deleted file mode 100644
index ee3e18fd76..0000000000
--- a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- public class SeasonXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- if (!(item is Season))
- {
- return false;
- }
-
- return updateType >= ItemUpdateType.MetadataDownload || (updateType >= ItemUpdateType.MetadataImport && File.Exists(GetSavePath(item)));
- }
-
- private readonly CultureInfo _usCulture = new CultureInfo("en-US");
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var builder = new StringBuilder();
-
- builder.Append("<Item>");
-
- var season = (Season)item;
-
- if (season.IndexNumber.HasValue)
- {
- builder.Append("<SeasonNumber>" + SecurityElement.Escape(season.IndexNumber.Value.ToString(_usCulture)) + "</SeasonNumber>");
- }
-
- XmlSaverHelpers.AddCommonNodes((Season)item, builder);
-
- builder.Append("</Item>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- "SeasonNumber"
- });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "season.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
deleted file mode 100644
index a7ed55e5dd..0000000000
--- a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-using System.Globalization;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Entities;
-using System.Collections.Generic;
-using System.IO;
-using System.Security;
-using System.Text;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Savers
-{
- public class SeriesXmlSaver : IMetadataFileSaver
- {
- public string Name
- {
- get
- {
- return "Media Browser Xml";
- }
- }
-
- /// <summary>
- /// Determines whether [is enabled for] [the specified item].
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
- public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
- {
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- return item is Series && updateType >= ItemUpdateType.MetadataDownload;
- }
-
- private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- /// <summary>
- /// Saves the specified item.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- public void Save(IHasMetadata item, CancellationToken cancellationToken)
- {
- var series = (Series)item;
-
- var builder = new StringBuilder();
-
- builder.Append("<Series>");
-
- var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
-
- if (!string.IsNullOrEmpty(tvdb))
- {
- builder.Append("<id>" + SecurityElement.Escape(tvdb) + "</id>");
- }
-
- if (series.Status.HasValue)
- {
- builder.Append("<Status>" + SecurityElement.Escape(series.Status.Value.ToString()) + "</Status>");
- }
-
- if (series.Studios.Count > 0)
- {
- builder.Append("<Network>" + SecurityElement.Escape(series.Studios[0]) + "</Network>");
- }
-
- if (!string.IsNullOrEmpty(series.AirTime))
- {
- builder.Append("<Airs_Time>" + SecurityElement.Escape(series.AirTime) + "</Airs_Time>");
- }
-
- if (series.AirDays != null)
- {
- if (series.AirDays.Count == 7)
- {
- builder.Append("<Airs_DayOfWeek>" + SecurityElement.Escape("Daily") + "</Airs_DayOfWeek>");
- }
- else if (series.AirDays.Count > 0)
- {
- builder.Append("<Airs_DayOfWeek>" + SecurityElement.Escape(series.AirDays[0].ToString()) + "</Airs_DayOfWeek>");
- }
- }
-
- if (series.PremiereDate.HasValue)
- {
- builder.Append("<FirstAired>" + SecurityElement.Escape(series.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd")) + "</FirstAired>");
- }
-
- if (series.AnimeSeriesIndex.HasValue)
- {
- builder.Append("<AnimeSeriesIndex>" + SecurityElement.Escape(series.AnimeSeriesIndex.Value.ToString(UsCulture)) + "</AnimeSeriesIndex>");
- }
-
- XmlSaverHelpers.AddCommonNodes(series, builder);
-
- builder.Append("</Series>");
-
- var xmlFilePath = GetSavePath(item);
-
- XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
- {
- "id",
- "Status",
- "Network",
- "Airs_Time",
- "Airs_DayOfWeek",
- "FirstAired",
-
- // Don't preserve old series node
- "Series",
-
- "SeriesName",
-
- // Deprecated. No longer saving in this field.
- "AnimeSeriesIndex"
- });
- }
-
- /// <summary>
- /// Gets the save path.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <returns>System.String.</returns>
- public string GetSavePath(IHasMetadata item)
- {
- return Path.Combine(item.Path, "series.xml");
- }
- }
-}
diff --git a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs
deleted file mode 100644
index d10422f78e..0000000000
--- a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs
+++ /dev/null
@@ -1,718 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Persistence;
-using MediaBrowser.Model.Entities;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Security;
-using System.Text;
-using System.Xml;
-
-namespace MediaBrowser.Providers.Savers
-{
- /// <summary>
- /// Class XmlHelpers
- /// </summary>
- public static class XmlSaverHelpers
- {
- private static readonly Dictionary<string, string> CommonTags = new[] {
-
- "Added",
- "AspectRatio",
- "AudioDbAlbumId",
- "AudioDbArtistId",
- "AwardSummary",
- "BirthDate",
- "Budget",
-
- // Deprecated. No longer saving in this field.
- "certification",
-
- "Chapters",
- "ContentRating",
- "Countries",
- "CustomRating",
- "CriticRating",
- "CriticRatingSummary",
- "DeathDate",
- "DisplayOrder",
- "EndDate",
- "Genres",
- "Genre",
- "GamesDbId",
-
- // Deprecated. No longer saving in this field.
- "IMDB_ID",
-
- "IMDB",
-
- // Deprecated. No longer saving in this field.
- "IMDbId",
-
- "Language",
- "LocalTitle",
- "LockData",
- "LockedFields",
- "Format3D",
- "Metascore",
-
- // Deprecated. No longer saving in this field.
- "MPAARating",
-
- "MusicBrainzArtistId",
- "MusicBrainzAlbumArtistId",
- "MusicBrainzAlbumId",
- "MusicBrainzReleaseGroupId",
-
- // Deprecated. No longer saving in this field.
- "MusicbrainzId",
-
- "Overview",
- "ShortOverview",
- "Persons",
- "PlotKeywords",
- "PremiereDate",
- "ProductionYear",
- "Rating",
- "Revenue",
- "RottenTomatoesId",
- "RunningTime",
-
- // Deprecated. No longer saving in this field.
- "Runtime",
-
- "SortTitle",
- "Studios",
- "Tags",
-
- // Deprecated. No longer saving in this field.
- "TagLine",
-
- "Taglines",
- "TMDbCollectionId",
- "TMDbId",
-
- // Deprecated. No longer saving in this field.
- "Trailer",
-
- "Trailers",
- "TVcomId",
- "TvDbId",
- "Type",
- "TVRageId",
- "VoteCount",
- "Website",
- "Zap2ItId",
- "CollectionItems"
-
- }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
-
- /// <summary>
- /// The us culture
- /// </summary>
- private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- /// <summary>
- /// Saves the specified XML.
- /// </summary>
- /// <param name="xml">The XML.</param>
- /// <param name="path">The path.</param>
- /// <param name="xmlTagsUsed">The XML tags used.</param>
- public static void Save(StringBuilder xml, string path, List<string> xmlTagsUsed)
- {
- if (File.Exists(path))
- {
- var position = xml.ToString().LastIndexOf("</", StringComparison.OrdinalIgnoreCase);
- xml.Insert(position, GetCustomTags(path, xmlTagsUsed));
- }
-
- var xmlDocument = new XmlDocument();
- xmlDocument.LoadXml(xml.ToString());
-
- //Add the new node to the document.
- xmlDocument.InsertBefore(xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", "yes"), xmlDocument.DocumentElement);
-
- Directory.CreateDirectory(Path.GetDirectoryName(path));
-
- var wasHidden = false;
-
- var file = new FileInfo(path);
-
- // This will fail if the file is hidden
- if (file.Exists)
- {
- if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
- {
- file.Attributes &= ~FileAttributes.Hidden;
-
- wasHidden = true;
- }
- }
-
- using (var filestream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
- {
- using (var streamWriter = new StreamWriter(filestream, Encoding.UTF8))
- {
- xmlDocument.Save(streamWriter);
- }
- }
-
- if (wasHidden)
- {
- file.Refresh();
-
- // Add back the attribute
- file.Attributes |= FileAttributes.Hidden;
- }
- }
-
- /// <summary>
- /// Gets the custom tags.
- /// </summary>
- /// <param name="path">The path.</param>
- /// <param name="xmlTagsUsed">The XML tags used.</param>
- /// <returns>System.String.</returns>
- private static string GetCustomTags(string path, List<string> xmlTagsUsed)
- {
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
-
- var builder = new StringBuilder();
-
- using (var streamReader = new StreamReader(path, Encoding.UTF8))
- {
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
- {
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element)
- {
- var name = reader.Name;
-
- if (!CommonTags.ContainsKey(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase))
- {
- builder.AppendLine(reader.ReadOuterXml());
- }
- else
- {
- reader.Skip();
- }
- }
- }
- }
- }
-
- return builder.ToString();
- }
-
- /// <summary>
- /// Adds the common nodes.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="builder">The builder.</param>
- public static void AddCommonNodes(BaseItem item, StringBuilder builder)
- {
- if (!string.IsNullOrEmpty(item.OfficialRating))
- {
- builder.Append("<ContentRating>" + SecurityElement.Escape(item.OfficialRating) + "</ContentRating>");
- }
-
- builder.Append("<Added>" + SecurityElement.Escape(item.DateCreated.ToLocalTime().ToString("G")) + "</Added>");
-
- builder.Append("<LockData>" + item.IsLocked.ToString().ToLower() + "</LockData>");
-
- if (item.LockedFields.Count > 0)
- {
- builder.Append("<LockedFields>" + string.Join("|", item.LockedFields.Select(i => i.ToString()).ToArray()) + "</LockedFields>");
- }
-
- if (!string.IsNullOrEmpty(item.DisplayMediaType))
- {
- builder.Append("<Type>" + SecurityElement.Escape(item.DisplayMediaType) + "</Type>");
- }
-
- var hasCriticRating = item as IHasCriticRating;
- if (hasCriticRating != null)
- {
- if (hasCriticRating.CriticRating.HasValue)
- {
- builder.Append("<CriticRating>" + SecurityElement.Escape(hasCriticRating.CriticRating.Value.ToString(UsCulture)) + "</CriticRating>");
- }
-
- if (!string.IsNullOrEmpty(hasCriticRating.CriticRatingSummary))
- {
- builder.Append("<CriticRatingSummary><![CDATA[" + hasCriticRating.CriticRatingSummary + "]]></CriticRatingSummary>");
- }
- }
-
- if (!string.IsNullOrEmpty(item.Overview))
- {
- builder.Append("<Overview><![CDATA[" + item.Overview + "]]></Overview>");
- }
-
- var hasShortOverview = item as IHasShortOverview;
- if (hasShortOverview != null)
- {
- if (!string.IsNullOrEmpty(hasShortOverview.ShortOverview))
- {
- builder.Append("<ShortOverview><![CDATA[" + hasShortOverview.ShortOverview + "]]></ShortOverview>");
- }
- }
-
- if (!string.IsNullOrEmpty(item.CustomRating))
- {
- builder.Append("<CustomRating>" + SecurityElement.Escape(item.CustomRating) + "</CustomRating>");
- }
-
- if (!string.IsNullOrEmpty(item.Name) && !(item is Episode))
- {
- builder.Append("<LocalTitle>" + SecurityElement.Escape(item.Name) + "</LocalTitle>");
- }
-
- if (!string.IsNullOrEmpty(item.ForcedSortName))
- {
- builder.Append("<SortTitle>" + SecurityElement.Escape(item.ForcedSortName) + "</SortTitle>");
- }
-
- if (item.PremiereDate.HasValue)
- {
- if (item is Person)
- {
- builder.Append("<BirthDate>" + SecurityElement.Escape(item.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd")) + "</BirthDate>");
- }
- else if (!(item is Episode))
- {
- builder.Append("<PremiereDate>" + SecurityElement.Escape(item.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd")) + "</PremiereDate>");
- }
- }
-
- if (item.EndDate.HasValue)
- {
- if (item is Person)
- {
- builder.Append("<DeathDate>" + SecurityElement.Escape(item.EndDate.Value.ToString("yyyy-MM-dd")) + "</DeathDate>");
- }
- else if (!(item is Episode))
- {
- builder.Append("<EndDate>" + SecurityElement.Escape(item.EndDate.Value.ToString("yyyy-MM-dd")) + "</EndDate>");
- }
- }
-
- var hasTrailers = item as IHasTrailers;
- if (hasTrailers != null)
- {
- if (hasTrailers.RemoteTrailers.Count > 0)
- {
- builder.Append("<Trailers>");
-
- foreach (var trailer in hasTrailers.RemoteTrailers)
- {
- builder.Append("<Trailer>" + SecurityElement.Escape(trailer.Url) + "</Trailer>");
- }
-
- builder.Append("</Trailers>");
- }
- }
-
- var hasProductionLocations = item as IHasProductionLocations;
- if (hasProductionLocations != null)
- {
- if (hasProductionLocations.ProductionLocations.Count > 0)
- {
- builder.Append("<Countries>");
-
- foreach (var name in hasProductionLocations.ProductionLocations)
- {
- builder.Append("<Country>" + SecurityElement.Escape(name) + "</Country>");
- }
-
- builder.Append("</Countries>");
- }
- }
-
- var hasDisplayOrder = item as IHasDisplayOrder;
- if (hasDisplayOrder != null && !string.IsNullOrEmpty(hasDisplayOrder.DisplayOrder))
- {
- builder.Append("<DisplayOrder>" + SecurityElement.Escape(hasDisplayOrder.DisplayOrder) + "</DisplayOrder>");
- }
-
- var hasMetascore = item as IHasMetascore;
- if (hasMetascore != null && hasMetascore.Metascore.HasValue)
- {
- builder.Append("<Metascore>" + SecurityElement.Escape(hasMetascore.Metascore.Value.ToString(UsCulture)) + "</Metascore>");
- }
-
- var hasAwards = item as IHasAwards;
- if (hasAwards != null && !string.IsNullOrEmpty(hasAwards.AwardSummary))
- {
- builder.Append("<AwardSummary>" + SecurityElement.Escape(hasAwards.AwardSummary) + "</AwardSummary>");
- }
-
- var hasBudget = item as IHasBudget;
- if (hasBudget != null)
- {
- if (hasBudget.Budget.HasValue)
- {
- builder.Append("<Budget>" + SecurityElement.Escape(hasBudget.Budget.Value.ToString(UsCulture)) + "</Budget>");
- }
-
- if (hasBudget.Revenue.HasValue)
- {
- builder.Append("<Revenue>" + SecurityElement.Escape(hasBudget.Revenue.Value.ToString(UsCulture)) + "</Revenue>");
- }
- }
-
- if (item.CommunityRating.HasValue)
- {
- builder.Append("<Rating>" + SecurityElement.Escape(item.CommunityRating.Value.ToString(UsCulture)) + "</Rating>");
- }
- if (item.VoteCount.HasValue)
- {
- builder.Append("<VoteCount>" + SecurityElement.Escape(item.VoteCount.Value.ToString(UsCulture)) + "</VoteCount>");
- }
-
- if (item.ProductionYear.HasValue && !(item is Person))
- {
- builder.Append("<ProductionYear>" + SecurityElement.Escape(item.ProductionYear.Value.ToString(UsCulture)) + "</ProductionYear>");
- }
-
- if (!string.IsNullOrEmpty(item.HomePageUrl))
- {
- builder.Append("<Website>" + SecurityElement.Escape(item.HomePageUrl) + "</Website>");
- }
-
- var hasAspectRatio = item as IHasAspectRatio;
- if (hasAspectRatio != null)
- {
- if (!string.IsNullOrEmpty(hasAspectRatio.AspectRatio))
- {
- builder.Append("<AspectRatio>" + SecurityElement.Escape(hasAspectRatio.AspectRatio) + "</AspectRatio>");
- }
- }
-
- var hasLanguage = item as IHasPreferredMetadataLanguage;
- if (hasLanguage != null)
- {
- if (!string.IsNullOrEmpty(hasLanguage.PreferredMetadataLanguage))
- {
- builder.Append("<Language>" + SecurityElement.Escape(hasLanguage.PreferredMetadataLanguage) + "</Language>");
- }
- }
-
- // Use original runtime here, actual file runtime later in MediaInfo
- var runTimeTicks = item.RunTimeTicks;
-
- if (runTimeTicks.HasValue)
- {
- var timespan = TimeSpan.FromTicks(runTimeTicks.Value);
-
- builder.Append("<RunningTime>" + Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture) + "</RunningTime>");
- }
-
- var imdb = item.GetProviderId(MetadataProviders.Imdb);
-
- if (!string.IsNullOrEmpty(imdb))
- {
- builder.Append("<IMDB>" + SecurityElement.Escape(imdb) + "</IMDB>");
- }
-
- var tmdb = item.GetProviderId(MetadataProviders.Tmdb);
-
- if (!string.IsNullOrEmpty(tmdb))
- {
- builder.Append("<TMDbId>" + SecurityElement.Escape(tmdb) + "</TMDbId>");
- }
-
- if (!(item is Series))
- {
- var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
-
- if (!string.IsNullOrEmpty(tvdb))
- {
- builder.Append("<TvDbId>" + SecurityElement.Escape(tvdb) + "</TvDbId>");
- }
- }
-
- var externalId = item.GetProviderId(MetadataProviders.Tvcom);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<TVcomId>" + SecurityElement.Escape(externalId) + "</TVcomId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.RottenTomatoes);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<RottenTomatoesId>" + SecurityElement.Escape(externalId) + "</RottenTomatoesId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.Zap2It);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<Zap2ItId>" + SecurityElement.Escape(externalId) + "</Zap2ItId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.MusicBrainzAlbum);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<MusicBrainzAlbumId>" + SecurityElement.Escape(externalId) + "</MusicBrainzAlbumId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.MusicBrainzAlbumArtist);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<MusicBrainzAlbumArtistId>" + SecurityElement.Escape(externalId) + "</MusicBrainzAlbumArtistId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.MusicBrainzArtist);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<MusicBrainzArtistId>" + SecurityElement.Escape(externalId) + "</MusicBrainzArtistId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<MusicBrainzReleaseGroupId>" + SecurityElement.Escape(externalId) + "</MusicBrainzReleaseGroupId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.Gamesdb);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<GamesDbId>" + SecurityElement.Escape(externalId) + "</GamesDbId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.TmdbCollection);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<TMDbCollectionId>" + SecurityElement.Escape(externalId) + "</TMDbCollectionId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.AudioDbArtist);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<AudioDbArtistId>" + SecurityElement.Escape(externalId) + "</AudioDbArtistId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.AudioDbAlbum);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<AudioDbAlbumId>" + SecurityElement.Escape(externalId) + "</AudioDbAlbumId>");
- }
-
- externalId = item.GetProviderId(MetadataProviders.TvRage);
-
- if (!string.IsNullOrEmpty(externalId))
- {
- builder.Append("<TVRageId>" + SecurityElement.Escape(externalId) + "</TVRageId>");
- }
-
- var hasTagline = item as IHasTaglines;
- if (hasTagline != null)
- {
- if (hasTagline.Taglines.Count > 0)
- {
- builder.Append("<Taglines>");
-
- foreach (var tagline in hasTagline.Taglines)
- {
- builder.Append("<Tagline>" + SecurityElement.Escape(tagline) + "</Tagline>");
- }
-
- builder.Append("</Taglines>");
- }
- }
-
- if (item.Genres.Count > 0)
- {
- builder.Append("<Genres>");
-
- foreach (var genre in item.Genres)
- {
- builder.Append("<Genre>" + SecurityElement.Escape(genre) + "</Genre>");
- }
-
- builder.Append("</Genres>");
- }
-
- if (item.Studios.Count > 0)
- {
- builder.Append("<Studios>");
-
- foreach (var studio in item.Studios)
- {
- builder.Append("<Studio>" + SecurityElement.Escape(studio) + "</Studio>");
- }
-
- builder.Append("</Studios>");
- }
-
- var hasTags = item as IHasTags;
- if (hasTags != null)
- {
- if (hasTags.Tags.Count > 0)
- {
- builder.Append("<Tags>");
-
- foreach (var tag in hasTags.Tags)
- {
- builder.Append("<Tag>" + SecurityElement.Escape(tag) + "</Tag>");
- }
-
- builder.Append("</Tags>");
- }
- }
-
- var hasKeywords = item as IHasKeywords;
- if (hasKeywords != null)
- {
- if (hasKeywords.Keywords.Count > 0)
- {
- builder.Append("<PlotKeywords>");
-
- foreach (var tag in hasKeywords.Keywords)
- {
- builder.Append("<PlotKeyword>" + SecurityElement.Escape(tag) + "</PlotKeyword>");
- }
-
- builder.Append("</PlotKeywords>");
- }
- }
-
- if (item.People.Count > 0)
- {
- builder.Append("<Persons>");
-
- foreach (var person in item.People)
- {
- builder.Append("<Person>");
- builder.Append("<Name>" + SecurityElement.Escape(person.Name) + "</Name>");
- builder.Append("<Type>" + SecurityElement.Escape(person.Type) + "</Type>");
- builder.Append("<Role>" + SecurityElement.Escape(person.Role) + "</Role>");
-
- if (person.SortOrder.HasValue)
- {
- builder.Append("<SortOrder>" + SecurityElement.Escape(person.SortOrder.Value.ToString(UsCulture)) + "</SortOrder>");
- }
-
- builder.Append("</Person>");
- }
-
- builder.Append("</Persons>");
- }
-
- var folder = item as BoxSet;
- if (folder != null)
- {
- AddCollectionItems(folder, builder);
- }
- }
-
- public static void AddChapters(Video item, StringBuilder builder, IItemRepository repository)
- {
- var chapters = repository.GetChapters(item.Id);
-
- builder.Append("<Chapters>");
-
- foreach (var chapter in chapters)
- {
- builder.Append("<Chapter>");
- builder.Append("<Name>" + SecurityElement.Escape(chapter.Name) + "</Name>");
-
- var time = TimeSpan.FromTicks(chapter.StartPositionTicks);
- var ms = Convert.ToInt64(time.TotalMilliseconds);
-
- builder.Append("<StartPositionMs>" + SecurityElement.Escape(ms.ToString(UsCulture)) + "</StartPositionMs>");
- builder.Append("</Chapter>");
- }
-
- builder.Append("</Chapters>");
- }
-
- /// <summary>
- /// Appends the media info.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public static void AddMediaInfo<T>(T item, StringBuilder builder, IItemRepository itemRepository)
- where T : BaseItem
- {
- var video = item as Video;
-
- if (video != null)
- {
- //AddChapters(video, builder, itemRepository);
-
- if (video.Video3DFormat.HasValue)
- {
- switch (video.Video3DFormat.Value)
- {
- case Video3DFormat.FullSideBySide:
- builder.Append("<Format3D>FSBS</Format3D>");
- break;
- case Video3DFormat.FullTopAndBottom:
- builder.Append("<Format3D>FTAB</Format3D>");
- break;
- case Video3DFormat.HalfSideBySide:
- builder.Append("<Format3D>HSBS</Format3D>");
- break;
- case Video3DFormat.HalfTopAndBottom:
- builder.Append("<Format3D>HTAB</Format3D>");
- break;
- }
- }
- }
- }
-
- public static void AddCollectionItems(Folder item, StringBuilder builder)
- {
- var items = item.LinkedChildren
- .Where(i => i.Type == LinkedChildType.Manual && !string.IsNullOrWhiteSpace(i.ItemName))
- .ToList();
-
- if (items.Count == 0)
- {
- return;
- }
-
- builder.Append("<CollectionItems>");
- foreach (var link in items)
- {
- builder.Append("<CollectionItem>");
-
- builder.Append("<Name>" + SecurityElement.Escape(link.ItemName) + "</Name>");
- builder.Append("<Type>" + SecurityElement.Escape(link.ItemType) + "</Type>");
-
- if (link.ItemYear.HasValue)
- {
- builder.Append("<Year>" + SecurityElement.Escape(link.ItemYear.Value.ToString(UsCulture)) + "</Year>");
- }
-
- builder.Append("</CollectionItem>");
- }
- builder.Append("</CollectionItems>");
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
deleted file mode 100644
index 1ec0e0f481..0000000000
--- a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-
-namespace MediaBrowser.Providers.TV
-{
- public class EpisodeLocalLocalImageProvider : ILocalImageFileProvider
- {
- public string Name
- {
- get { return "Local Images"; }
- }
-
- public bool Supports(IHasImages item)
- {
- return item is Episode && item.SupportsLocalMetadata;
- }
-
- public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService)
- {
- var parentPath = Path.GetDirectoryName(item.Path);
-
- var parentPathFiles = directoryService.GetFileSystemEntries(parentPath);
-
- var nameWithoutExtension = Path.GetFileNameWithoutExtension(item.Path);
-
- var files = GetFilesFromParentFolder(nameWithoutExtension, parentPathFiles);
-
- if (files.Count > 0)
- {
- return files;
- }
-
- var metadataPath = Path.Combine(parentPath, "metadata");
-
- if (parentPathFiles.Any(i => string.Equals(i.FullName, metadataPath, StringComparison.OrdinalIgnoreCase)))
- {
- return GetFilesFromParentFolder(nameWithoutExtension, directoryService.GetFiles(metadataPath));
- }
-
- return new List<LocalImageInfo>();
- }
-
- private List<LocalImageInfo> GetFilesFromParentFolder(string filenameWithoutExtension, IEnumerable<FileSystemInfo> parentPathFiles)
- {
- var thumbName = filenameWithoutExtension + "-thumb";
-
- return parentPathFiles
- .Where(i =>
- {
- if (BaseItem.SupportedImageExtensions.Contains(i.Extension))
- {
- var currentNameWithoutExtension = Path.GetFileNameWithoutExtension(i.Name);
-
- if (string.Equals(filenameWithoutExtension, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- if (string.Equals(thumbName, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
- }
-
- return false;
- })
- .Select(i => new LocalImageInfo
- {
- FileInfo = (FileInfo)i,
- Type = ImageType.Primary
- })
- .ToList();
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/EpisodeXmlParser.cs b/MediaBrowser.Providers/TV/EpisodeXmlParser.cs
deleted file mode 100644
index 20f2678853..0000000000
--- a/MediaBrowser.Providers/TV/EpisodeXmlParser.cs
+++ /dev/null
@@ -1,271 +0,0 @@
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Threading;
-using System.Xml;
-
-namespace MediaBrowser.Providers.TV
-{
- /// <summary>
- /// Class EpisodeXmlParser
- /// </summary>
- public class EpisodeXmlParser : BaseItemXmlParser<Episode>
- {
- private List<LocalImageInfo> _imagesFound;
- private List<ChapterInfo> _chaptersFound;
-
- public EpisodeXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- private string _xmlPath;
-
- public void Fetch(Episode item,
- List<LocalImageInfo> images,
- List<ChapterInfo> chapters,
- string metadataFile,
- CancellationToken cancellationToken)
- {
- _imagesFound = images;
- _chaptersFound = chapters;
- _xmlPath = metadataFile;
-
- Fetch(item, metadataFile, cancellationToken);
- }
-
- private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Episode item)
- {
- switch (reader.Name)
- {
- case "Chapters":
-
- _chaptersFound.AddRange(FetchChaptersFromXmlNode(item, reader.ReadSubtree()));
- break;
-
- case "Episode":
-
- //MB generated metadata is within an "Episode" node
- using (var subTree = reader.ReadSubtree())
- {
- subTree.MoveToContent();
-
- // Loop through each element
- while (subTree.Read())
- {
- if (subTree.NodeType == XmlNodeType.Element)
- {
- FetchDataFromXmlNode(subTree, item);
- }
- }
-
- }
- break;
-
- case "filename":
- {
- var filename = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(filename))
- {
- // Strip off everything but the filename. Some metadata tools like MetaBrowser v1.0 will have an 'episodes' prefix
- // even though it's actually using the metadata folder.
- filename = Path.GetFileName(filename);
-
- var parentFolder = Path.GetDirectoryName(_xmlPath);
- filename = Path.Combine(parentFolder, filename);
- var file = new FileInfo(filename);
-
- if (file.Exists)
- {
- _imagesFound.Add(new LocalImageInfo
- {
- Type = ImageType.Primary,
- FileInfo = file
- });
- }
- }
- break;
- }
- case "SeasonNumber":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- int num;
-
- if (int.TryParse(number, out num))
- {
- item.ParentIndexNumber = num;
- }
- }
- break;
- }
-
- case "EpisodeNumber":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- int num;
-
- if (int.TryParse(number, out num))
- {
- item.IndexNumber = num;
- }
- }
- break;
- }
-
- case "EpisodeNumberEnd":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- int num;
-
- if (int.TryParse(number, out num))
- {
- item.IndexNumberEnd = num;
- }
- }
- break;
- }
-
- case "absolute_number":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
- {
- item.AbsoluteEpisodeNumber = rval;
- }
- }
-
- break;
- }
- case "DVD_episodenumber":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- float num;
-
- if (float.TryParse(number, NumberStyles.Any, UsCulture, out num))
- {
- item.DvdEpisodeNumber = num;
- }
- }
- break;
- }
-
- case "DVD_season":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- float num;
-
- if (float.TryParse(number, NumberStyles.Any, UsCulture, out num))
- {
- item.DvdSeasonNumber = Convert.ToInt32(num);
- }
- }
- break;
- }
-
- case "airsbefore_episode":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
- {
- item.AirsBeforeEpisodeNumber = rval;
- }
- }
-
- break;
- }
-
- case "airsafter_season":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
- {
- item.AirsAfterSeasonNumber = rval;
- }
- }
-
- break;
- }
-
- case "airsbefore_season":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
- {
- item.AirsBeforeSeasonNumber = rval;
- }
- }
-
- break;
- }
-
- case "EpisodeName":
- {
- var name = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(name))
- {
- item.Name = name;
- }
- break;
- }
-
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs b/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs
deleted file mode 100644
index 3def06bfe1..0000000000
--- a/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.TV
-{
- public class EpisodeXmlProvider : BaseXmlProvider<Episode>
- {
- private readonly ILogger _logger;
-
- public EpisodeXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Episode> result, string path, CancellationToken cancellationToken)
- {
- var images = new List<LocalImageInfo>();
- var chapters = new List<ChapterInfo>();
-
- 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);
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/SeasonXmlParser.cs b/MediaBrowser.Providers/TV/SeasonXmlParser.cs
deleted file mode 100644
index 44b73e8e1b..0000000000
--- a/MediaBrowser.Providers/TV/SeasonXmlParser.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.Xml;
-
-namespace MediaBrowser.Providers.TV
-{
- public class SeasonXmlParser : BaseItemXmlParser<Season>
- {
- public SeasonXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Season item)
- {
- switch (reader.Name)
- {
- case "SeasonNumber":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- int num;
-
- if (int.TryParse(number, out num))
- {
- item.IndexNumber = num;
- }
- }
- break;
- }
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/SeasonXmlProvider.cs b/MediaBrowser.Providers/TV/SeasonXmlProvider.cs
deleted file mode 100644
index 6a41988de1..0000000000
--- a/MediaBrowser.Providers/TV/SeasonXmlProvider.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.TV
-{
- /// <summary>
- /// Class SeriesProviderFromXml
- /// </summary>
- public class SeasonXmlProvider : BaseXmlProvider<Season>
- {
- private readonly ILogger _logger;
-
- public SeasonXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Season> 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"));
- }
- }
-}
-
diff --git a/MediaBrowser.Providers/TV/SeriesXmlParser.cs b/MediaBrowser.Providers/TV/SeriesXmlParser.cs
deleted file mode 100644
index 237fcf73af..0000000000
--- a/MediaBrowser.Providers/TV/SeriesXmlParser.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Xml;
-
-namespace MediaBrowser.Providers.TV
-{
- /// <summary>
- /// Class SeriesXmlParser
- /// </summary>
- public class SeriesXmlParser : BaseItemXmlParser<Series>
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="BaseItemXmlParser{T}" /> class.
- /// </summary>
- /// <param name="logger">The logger.</param>
- public SeriesXmlParser(ILogger logger)
- : base(logger)
- {
- }
-
- /// <summary>
- /// Fetches the data from XML node.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Series item)
- {
- switch (reader.Name)
- {
- case "Series":
- //MB generated metadata is within a "Series" node
- using (var subTree = reader.ReadSubtree())
- {
- subTree.MoveToContent();
-
- // Loop through each element
- while (subTree.Read())
- {
- if (subTree.NodeType == XmlNodeType.Element)
- {
- FetchDataFromXmlNode(subTree, item);
- }
- }
-
- }
- break;
-
- case "id":
- string id = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(id))
- {
- item.SetProviderId(MetadataProviders.Tvdb, id);
- }
- break;
-
- case "Airs_DayOfWeek":
- {
- item.AirDays = TVUtils.GetAirDays(reader.ReadElementContentAsString());
- break;
- }
-
- case "Airs_Time":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.AirTime = val;
- }
- break;
- }
-
- case "AnimeSeriesIndex":
- {
- var number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- int num;
-
- if (int.TryParse(number, out num))
- {
- item.AnimeSeriesIndex = num;
- }
- }
- break;
- }
- case "Status":
- {
- var status = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(status))
- {
- SeriesStatus seriesStatus;
- if (Enum.TryParse(status, true, out seriesStatus))
- {
- item.Status = seriesStatus;
- }
- else
- {
- Logger.Info("Unrecognized series status: " + status);
- }
- }
-
- break;
- }
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/SeriesXmlProvider.cs b/MediaBrowser.Providers/TV/SeriesXmlProvider.cs
deleted file mode 100644
index f32afbd968..0000000000
--- a/MediaBrowser.Providers/TV/SeriesXmlProvider.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.TV
-{
- /// <summary>
- /// Class SeriesProviderFromXml
- /// </summary>
- public class SeriesXmlProvider : BaseXmlProvider<Series>
- {
- private readonly ILogger _logger;
-
- public SeriesXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Series> 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"));
- }
- }
-}
diff --git a/MediaBrowser.Providers/Videos/VideoXmlProvider.cs b/MediaBrowser.Providers/Videos/VideoXmlProvider.cs
deleted file mode 100644
index 779f3faa73..0000000000
--- a/MediaBrowser.Providers/Videos/VideoXmlProvider.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Providers.Movies;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-
-namespace MediaBrowser.Providers.Videos
-{
- class VideoXmlProvider : BaseXmlProvider<Video>
- {
- private readonly ILogger _logger;
-
- public VideoXmlProvider(IFileSystem fileSystem, ILogger logger)
- : base(fileSystem)
- {
- _logger = logger;
- }
-
- protected override void Fetch(LocalMetadataResult<Video> 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 MovieXmlProvider.GetXmlFileInfo(info, FileSystem);
- }
- }
-}
diff --git a/MediaBrowser.Providers/Xbmc/XbmcImageSaver.cs b/MediaBrowser.Providers/Xbmc/XbmcImageSaver.cs
deleted file mode 100644
index 93231e1e3d..0000000000
--- a/MediaBrowser.Providers/Xbmc/XbmcImageSaver.cs
+++ /dev/null
@@ -1,272 +0,0 @@
-using MediaBrowser.Controller.Drawing;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-
-namespace MediaBrowser.Providers.Xbmc
-{
- public class XbmcImageSaver : IImageFileSaver
- {
- private readonly CultureInfo _usCulture = new CultureInfo("en-US");
-
- public IEnumerable<string> GetSavePaths(IHasImages item, ImageType type, ImageFormat format, int index)
- {
- var season = item as Season;
-
- if (!SupportsItem(item, type, season))
- {
- return new string[] { };
- }
-
- var extension = "." + format.ToString().ToLower();
-
- // Backdrop paths
- if (type == ImageType.Backdrop)
- {
- if (index == 0)
- {
- if (item.IsInMixedFolder)
- {
- return new[] { GetSavePathForItemInMixedFolder(item, type, "fanart", extension) };
- }
-
- if (season != null && season.IndexNumber.HasValue)
- {
- var seriesFolder = season.SeriesPath;
-
- var seasonMarker = season.IndexNumber.Value == 0
- ? "-specials"
- : season.IndexNumber.Value.ToString("00", _usCulture);
-
- var imageFilename = "season" + seasonMarker + "-fanart" + extension;
-
- return new[] { Path.Combine(seriesFolder, imageFilename) };
- }
-
- return new[]
- {
- Path.Combine(item.ContainingFolderPath, "fanart" + extension)
- };
- }
-
- if (item.IsInMixedFolder)
- {
- return new[] { GetSavePathForItemInMixedFolder(item, type, "fanart" + index.ToString(_usCulture), extension) };
- }
-
- var extraFanartFilename = GetBackdropSaveFilename(item.GetImages(ImageType.Backdrop), "fanart", "fanart", index);
-
- return new[]
- {
- Path.Combine(item.ContainingFolderPath, "extrafanart", extraFanartFilename + extension),
- Path.Combine(item.ContainingFolderPath, "extrathumbs", "thumb" + index.ToString(_usCulture) + extension)
- };
- }
-
- if (type == ImageType.Primary)
- {
- if (season != null && season.IndexNumber.HasValue)
- {
- var seriesFolder = season.SeriesPath;
-
- var seasonMarker = season.IndexNumber.Value == 0
- ? "-specials"
- : season.IndexNumber.Value.ToString("00", _usCulture);
-
- var imageFilename = "season" + seasonMarker + "-poster" + extension;
-
- return new[] { Path.Combine(seriesFolder, imageFilename) };
- }
-
- if (item is Episode)
- {
- var seasonFolder = Path.GetDirectoryName(item.Path);
-
- var imageFilename = Path.GetFileNameWithoutExtension(item.Path) + "-thumb" + extension;
-
- return new[] { Path.Combine(seasonFolder, imageFilename) };
- }
-
- if (item.IsInMixedFolder || item is MusicVideo)
- {
- return new[] { GetSavePathForItemInMixedFolder(item, type, string.Empty, extension) };
- }
-
- if (item is MusicAlbum || item is MusicArtist)
- {
- return new[] { Path.Combine(item.ContainingFolderPath, "folder" + extension) };
- }
-
- return new[] { Path.Combine(item.ContainingFolderPath, "poster" + extension) };
- }
-
- if (type == ImageType.Banner)
- {
- if (season != null && season.IndexNumber.HasValue)
- {
- var seriesFolder = season.SeriesPath;
-
- var seasonMarker = season.IndexNumber.Value == 0
- ? "-specials"
- : season.IndexNumber.Value.ToString("00", _usCulture);
-
- var imageFilename = "season" + seasonMarker + "-banner" + extension;
-
- return new[] { Path.Combine(seriesFolder, imageFilename) };
- }
- }
-
- if (type == ImageType.Thumb)
- {
- if (season != null && season.IndexNumber.HasValue)
- {
- var seriesFolder = season.SeriesPath;
-
- var seasonMarker = season.IndexNumber.Value == 0
- ? "-specials"
- : season.IndexNumber.Value.ToString("00", _usCulture);
-
- var imageFilename = "season" + seasonMarker + "-landscape" + extension;
-
- return new[] { Path.Combine(seriesFolder, imageFilename) };
- }
-
- if (item.IsInMixedFolder)
- {
- return new[] { GetSavePathForItemInMixedFolder(item, type, "landscape", extension) };
- }
-
- return new[] { Path.Combine(item.ContainingFolderPath, "landscape" + extension) };
- }
-
- return GetStandardSavePaths(item, type, index, extension);
- }
-
- private IEnumerable<string> GetStandardSavePaths(IHasImages item, ImageType type, int imageIndex, string extension)
- {
- string filename;
-
- switch (type)
- {
- case ImageType.Art:
- filename = "clearart";
- break;
- case ImageType.BoxRear:
- filename = "back";
- break;
- case ImageType.Disc:
- filename = item is MusicAlbum ? "cdart" : "disc";
- break;
- case ImageType.Screenshot:
- filename = GetBackdropSaveFilename(item.GetImages(type), "screenshot", "screenshot", imageIndex);
- break;
- default:
- filename = type.ToString().ToLower();
- break;
- }
-
- string path = null;
-
- if (item.IsInMixedFolder)
- {
- path = GetSavePathForItemInMixedFolder(item, type, filename, extension);
- }
-
- if (string.IsNullOrEmpty(path))
- {
- path = Path.Combine(item.ContainingFolderPath, filename + extension);
- }
-
- if (string.IsNullOrEmpty(path))
- {
- return new string[] { };
- }
-
- return new[] { path };
- }
-
-
- private string GetSavePathForItemInMixedFolder(IHasImages item, ImageType type, string imageFilename, string extension)
- {
- if (type == ImageType.Primary)
- {
- imageFilename = "poster";
- }
- var folder = Path.GetDirectoryName(item.Path);
-
- return Path.Combine(folder, Path.GetFileNameWithoutExtension(item.Path) + "-" + imageFilename + extension);
- }
-
- private bool SupportsItem(IHasImages item, ImageType type, Season season)
- {
- if (item.IsOwnedItem || item is Audio || item is User)
- {
- return false;
- }
-
- if (type != ImageType.Primary && item is Episode)
- {
- return false;
- }
-
- if (!item.SupportsLocalMetadata)
- {
- return false;
- }
-
- var locationType = item.LocationType;
- if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
- {
- var allowSaving = false;
-
- // If season is virtual under a physical series, save locally if using compatible convention
- if (season != null)
- {
- var series = season.Series;
-
- if (series != null && series.SupportsLocalMetadata)
- {
- allowSaving = true;
- }
- }
-
- if (!allowSaving)
- {
- return false;
- }
- }
-
- return true;
- }
-
- private string GetBackdropSaveFilename(IEnumerable<ItemImageInfo> images, string zeroIndexFilename, string numberedIndexPrefix, int? index)
- {
- if (index.HasValue && index.Value == 0)
- {
- return zeroIndexFilename;
- }
-
- var filenames = images.Select(i => Path.GetFileNameWithoutExtension(i.Path)).ToList();
-
- var current = 1;
- while (filenames.Contains(numberedIndexPrefix + current.ToString(_usCulture), StringComparer.OrdinalIgnoreCase))
- {
- current++;
- }
-
- return numberedIndexPrefix + current.ToString(_usCulture);
- }
-
- public string Name
- {
- get { return "Media Browser/Plex/Xbmc Images"; }
- }
- }
-}