diff options
Diffstat (limited to 'MediaBrowser.LocalMetadata')
11 files changed, 128 insertions, 188 deletions
diff --git a/MediaBrowser.LocalMetadata/Images/CollectionFolderImageProvider.cs b/MediaBrowser.LocalMetadata/Images/CollectionFolderImageProvider.cs index 954e0c322..4ec2eeeb1 100644 --- a/MediaBrowser.LocalMetadata/Images/CollectionFolderImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/CollectionFolderImageProvider.cs @@ -21,7 +21,7 @@ namespace MediaBrowser.LocalMetadata.Images get { return "Collection Folder Images"; } } - public bool Supports(IHasImages item) + public bool Supports(IHasMetadata item) { return item is CollectionFolder && item.SupportsLocalMetadata; } @@ -35,7 +35,7 @@ namespace MediaBrowser.LocalMetadata.Images } } - public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) { var collectionFolder = (CollectionFolder)item; diff --git a/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs index 2b5858aec..9195a9cd4 100644 --- a/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs @@ -4,10 +4,8 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; namespace MediaBrowser.LocalMetadata.Images @@ -31,58 +29,59 @@ namespace MediaBrowser.LocalMetadata.Images get { return 0; } } - public bool Supports(IHasImages item) + public bool Supports(IHasMetadata item) { return item is Episode && item.SupportsLocalMetadata; } - public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) { var parentPath = _fileSystem.GetDirectoryName(item.Path); - var parentPathFiles = directoryService.GetFiles(parentPath) - .ToList(); + var parentPathFiles = directoryService.GetFiles(parentPath); var nameWithoutExtension = _fileSystem.GetFileNameWithoutExtension(item.Path); return GetFilesFromParentFolder(nameWithoutExtension, parentPathFiles); } - private List<LocalImageInfo> GetFilesFromParentFolder(string filenameWithoutExtension, IEnumerable<FileSystemMetadata> parentPathFiles) + private List<LocalImageInfo> GetFilesFromParentFolder(string filenameWithoutExtension, List<FileSystemMetadata> parentPathFiles) { var thumbName = filenameWithoutExtension + "-thumb"; - return parentPathFiles - .Where(i => - { - if (i.IsDirectory) - { - return false; - } - - if (BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase)) - { - var currentNameWithoutExtension = _fileSystem.GetFileNameWithoutExtension(i); - - 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 = i, - Type = ImageType.Primary - }) - .ToList(); + var list = new List<LocalImageInfo>(1); + + foreach (var i in parentPathFiles) + { + if (i.IsDirectory) + { + continue; + } + + if (BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase)) + { + var currentNameWithoutExtension = _fileSystem.GetFileNameWithoutExtension(i); + + if (string.Equals(filenameWithoutExtension, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase)) + { + list.Add(new LocalImageInfo + { + FileInfo = i, + Type = ImageType.Primary + }); + } + + else if (string.Equals(thumbName, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase)) + { + list.Add(new LocalImageInfo + { + FileInfo = i, + Type = ImageType.Primary + }); + } + } + } + return list; } } } diff --git a/MediaBrowser.LocalMetadata/Images/ImagesByNameImageProvider.cs b/MediaBrowser.LocalMetadata/Images/ImagesByNameImageProvider.cs deleted file mode 100644 index 83554f044..000000000 --- a/MediaBrowser.LocalMetadata/Images/ImagesByNameImageProvider.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections.Generic; -using System.IO; - -using MediaBrowser.Model.IO; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.IO; -using MediaBrowser.Controller.Providers; - -namespace MediaBrowser.LocalMetadata.Images -{ - 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(_fileSystem).GetImages(item, path, false, directoryService); - } - catch (IOException) - { - return new List<LocalImageInfo>(); - } - } - } -} diff --git a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs index 47579f870..469a31442 100644 --- a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs @@ -26,7 +26,7 @@ namespace MediaBrowser.LocalMetadata.Images get { return "Internal Images"; } } - public bool Supports(IHasImages item) + public bool Supports(IHasMetadata item) { if (item is Photo) { @@ -61,7 +61,7 @@ namespace MediaBrowser.LocalMetadata.Images } } - public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) { var path = item.GetInternalMetadataPath(); diff --git a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs index b449ad6e0..56a2c271f 100644 --- a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs @@ -7,7 +7,6 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; - using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; @@ -32,7 +31,7 @@ namespace MediaBrowser.LocalMetadata.Images get { return 0; } } - public bool Supports(IHasImages item) + public bool Supports(IHasMetadata item) { if (item.SupportsLocalMetadata) { @@ -63,7 +62,7 @@ namespace MediaBrowser.LocalMetadata.Images return false; } - private IEnumerable<FileSystemMetadata> GetFiles(IHasImages item, bool includeDirectories, IDirectoryService directoryService) + private IEnumerable<FileSystemMetadata> GetFiles(IHasMetadata item, bool includeDirectories, IDirectoryService directoryService) { if (item.LocationType != LocationType.FileSystem) { @@ -85,7 +84,7 @@ namespace MediaBrowser.LocalMetadata.Images .OrderBy(i => BaseItem.SupportedImageExtensionsList.IndexOf(i.Extension ?? string.Empty)); } - public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) { var files = GetFiles(item, true, directoryService).ToList(); @@ -96,30 +95,14 @@ namespace MediaBrowser.LocalMetadata.Images return list; } - public List<LocalImageInfo> GetImages(IHasImages item, string path, bool isPathInMediaFolder, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(IHasMetadata item, string path, bool isPathInMediaFolder, IDirectoryService directoryService) { return GetImages(item, new[] { path }, isPathInMediaFolder, directoryService); } - public List<LocalImageInfo> GetImages(IHasImages item, IEnumerable<string> paths, bool arePathsInMediaFolders, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(IHasMetadata item, IEnumerable<string> paths, bool arePathsInMediaFolders, IDirectoryService directoryService) { - IEnumerable<FileSystemMetadata> files; - - if (arePathsInMediaFolders) - { - files = paths.SelectMany(i => _fileSystem.GetFiles(i, BaseItem.SupportedImageExtensions, true, false)); - } - else - { - files = paths.SelectMany(directoryService.GetFiles) - .Where(i => - { - var ext = i.Extension; - - return !string.IsNullOrEmpty(ext) && - BaseItem.SupportedImageExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase); - }); - } + IEnumerable<FileSystemMetadata> files = paths.SelectMany(i => _fileSystem.GetFiles(i, BaseItem.SupportedImageExtensions, true, false)); files = files .OrderBy(i => BaseItem.SupportedImageExtensionsList.IndexOf(i.Extension ?? string.Empty)); @@ -131,7 +114,7 @@ namespace MediaBrowser.LocalMetadata.Images return list; } - private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemMetadata> files, bool supportParentSeriesFiles, IDirectoryService directoryService) + private void PopulateImages(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, bool supportParentSeriesFiles, IDirectoryService directoryService) { if (supportParentSeriesFiles) { @@ -144,7 +127,7 @@ namespace MediaBrowser.LocalMetadata.Images } var imagePrefix = item.FileNameWithoutExtension + "-"; - var isInMixedFolder = item.DetectIsInMixedFolder(); + var isInMixedFolder = item.IsInMixedFolder; PopulatePrimaryImages(item, images, files, imagePrefix, isInMixedFolder); @@ -179,36 +162,71 @@ namespace MediaBrowser.LocalMetadata.Images PopulateScreenshots(images, files, imagePrefix, isInMixedFolder); } - private void PopulatePrimaryImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder) + private static readonly string[] CommonImageFileNames = new[] { - var names = new List<string> - { - "cover", - "default" - }; + "poster", + "folder", + "cover", + "default" + }; - if (item is MusicAlbum || item is MusicArtist || item is PhotoAlbum || item is Person) + private static readonly string[] MusicImageFileNames = new[] + { + "folder", + "poster", + "cover", + "default" + }; + + private static readonly string[] PersonImageFileNames = new[] + { + "folder", + "poster" + }; + + private static readonly string[] SeriesImageFileNames = new[] + { + "poster", + "folder", + "cover", + "default", + "show" + }; + + private static readonly string[] VideoImageFileNames = new[] + { + "poster", + "folder", + "cover", + "default", + "movie" + }; + + private void PopulatePrimaryImages(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder) + { + string[] imageFileNames; + + if (item is MusicAlbum || item is MusicArtist || item is PhotoAlbum) { // these prefer folder - names.Insert(0, "poster"); - names.Insert(0, "folder"); + imageFileNames = MusicImageFileNames; } - else + else if (item is Person) { - names.Insert(0, "folder"); - names.Insert(0, "poster"); + // these prefer folder + imageFileNames = PersonImageFileNames; } - - // Support plex/kodi convention - if (item is Series) + else if (item is Series) { - names.Add("show"); + imageFileNames = SeriesImageFileNames; } - - // Support plex/kodi convention - if (item is Video && !(item is Episode)) + else if (item is Video && !(item is Episode)) + { + imageFileNames = VideoImageFileNames; + } + else { - names.Add("movie"); + imageFileNames = CommonImageFileNames; } var fileNameWithoutExtension = item.FileNameWithoutExtension; @@ -217,21 +235,21 @@ namespace MediaBrowser.LocalMetadata.Images AddImage(files, images, fileNameWithoutExtension, ImageType.Primary); } - foreach (var name in names) + foreach (var name in imageFileNames) { AddImage(files, images, imagePrefix + name, ImageType.Primary); } if (!isInMixedFolder) { - foreach (var name in names) + foreach (var name in imageFileNames) { AddImage(files, images, name, ImageType.Primary); } } } - private void PopulateBackdrops(IHasImages item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder, IDirectoryService directoryService) + private void PopulateBackdrops(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder, IDirectoryService directoryService) { if (!string.IsNullOrEmpty(item.Path)) { diff --git a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj index 9a7371a66..0986ffdc2 100644 --- a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj +++ b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj @@ -39,7 +39,6 @@ <Compile Include="BaseXmlProvider.cs" /> <Compile Include="Images\CollectionFolderImageProvider.cs" /> <Compile Include="Images\EpisodeLocalImageProvider.cs" /> - <Compile Include="Images\ImagesByNameImageProvider.cs" /> <Compile Include="Images\InternalMetadataFolderImageProvider.cs" /> <Compile Include="Images\LocalImageProvider.cs" /> <Compile Include="Parsers\BaseItemXmlParser.cs" /> diff --git a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs index b92fc2ea8..9a814213b 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs @@ -179,18 +179,6 @@ namespace MediaBrowser.LocalMetadata.Parsers item.Name = reader.ReadElementContentAsString(); break; - case "Type": - { - var type = reader.ReadElementContentAsString(); - - if (!string.IsNullOrWhiteSpace(type) && !type.Equals("none", StringComparison.OrdinalIgnoreCase)) - { - item.DisplayMediaType = type; - } - - break; - } - case "CriticRating": { var text = reader.ReadElementContentAsString(); @@ -258,7 +246,7 @@ namespace MediaBrowser.LocalMetadata.Parsers var person = item as Person; if (person != null) { - person.ProductionLocations = new List<string> { val }; + person.ProductionLocations = new string[] { val }; } } @@ -279,13 +267,11 @@ namespace MediaBrowser.LocalMetadata.Parsers case "LockedFields": { - var fields = new List<MetadataFields>(); - var val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) { - var list = val.Split('|').Select(i => + item.LockedFields = val.Split('|').Select(i => { MetadataFields field; @@ -296,13 +282,9 @@ namespace MediaBrowser.LocalMetadata.Parsers return null; - }).Where(i => i.HasValue).Select(i => i.Value); - - fields.AddRange(list); + }).Where(i => i.HasValue).Select(i => i.Value).ToArray(); } - item.LockedFields = fields; - break; } @@ -485,7 +467,7 @@ namespace MediaBrowser.LocalMetadata.Parsers { if (!string.IsNullOrWhiteSpace(val)) { - hasTrailers.AddTrailerUrl(val, false); + hasTrailers.AddTrailerUrl(val); } } break; @@ -945,6 +927,8 @@ namespace MediaBrowser.LocalMetadata.Parsers reader.MoveToContent(); reader.Read(); + var tags = new List<string>(); + // Loop through each element while (!reader.EOF && reader.ReadState == ReadState.Interactive) { @@ -958,7 +942,7 @@ namespace MediaBrowser.LocalMetadata.Parsers if (!string.IsNullOrWhiteSpace(tag)) { - item.AddTag(tag); + tags.Add(tag); } break; } @@ -973,6 +957,8 @@ namespace MediaBrowser.LocalMetadata.Parsers reader.Read(); } } + + item.Tags = tags.Distinct(StringComparer.Ordinal).ToArray(); } /// <summary> @@ -1044,7 +1030,7 @@ namespace MediaBrowser.LocalMetadata.Parsers if (!string.IsNullOrWhiteSpace(val)) { - item.AddTrailerUrl(val, false); + item.AddTrailerUrl(val); } break; } diff --git a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs index a0f0e4476..33eb75edb 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Xml; using MediaBrowser.Model.IO; using MediaBrowser.Model.Xml; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.LocalMetadata.Parsers { @@ -84,7 +85,7 @@ namespace MediaBrowser.LocalMetadata.Parsers } } - item.Item.LinkedChildren = list; + item.Item.LinkedChildren = list.ToArray(list.Count); } public BoxSetXmlParser(ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem) : base(logger, providerManager, xmlReaderSettingsFactory, fileSystem) diff --git a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs index 695fe2b12..c6ef85814 100644 --- a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Xml; using MediaBrowser.Model.IO; using MediaBrowser.Model.Xml; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.LocalMetadata.Parsers { @@ -124,7 +125,7 @@ namespace MediaBrowser.LocalMetadata.Parsers } } - item.LinkedChildren = list; + item.LinkedChildren = list.ToArray(list.Count); } private void FetchFromSharesNode(XmlReader reader, Playlist item) diff --git a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs index f112dfc81..259f42391 100644 --- a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs @@ -106,7 +106,6 @@ namespace MediaBrowser.LocalMetadata.Savers "Trailers", "TVcomId", "TvDbId", - "Type", "TVRageId", "Website", "Zap2ItId", @@ -303,14 +302,9 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteElementString("LockData", item.IsLocked.ToString().ToLower()); - if (item.LockedFields.Count > 0) + if (item.LockedFields.Length > 0) { - writer.WriteElementString("LockedFields", string.Join("|", item.LockedFields.Select(i => i.ToString()).ToArray())); - } - - if (!string.IsNullOrEmpty(item.DisplayMediaType)) - { - writer.WriteElementString("Type", item.DisplayMediaType); + writer.WriteElementString("LockedFields", string.Join("|", item.LockedFields)); } if (item.CriticRating.HasValue) @@ -370,7 +364,7 @@ namespace MediaBrowser.LocalMetadata.Savers var hasTrailers = item as IHasTrailers; if (hasTrailers != null) { - if (hasTrailers.RemoteTrailers.Count > 0) + if (hasTrailers.RemoteTrailers.Length > 0) { writer.WriteStartElement("Trailers"); @@ -383,7 +377,7 @@ namespace MediaBrowser.LocalMetadata.Savers } } - if (item.ProductionLocations.Count > 0) + if (item.ProductionLocations.Length > 0) { writer.WriteStartElement("Countries"); @@ -475,7 +469,7 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteEndElement(); } - if (item.Studios.Count > 0) + if (item.Studios.Length > 0) { writer.WriteStartElement("Studios"); @@ -487,7 +481,7 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteEndElement(); } - if (item.Tags.Count > 0) + if (item.Tags.Length > 0) { writer.WriteStartElement("Tags"); diff --git a/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs index 26c4b4a93..24c5a4679 100644 --- a/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs @@ -65,7 +65,7 @@ namespace MediaBrowser.LocalMetadata.Savers public static string GetGameSavePath(Game item) { - if (item.DetectIsInMixedFolder()) + if (item.IsInMixedFolder) { return Path.ChangeExtension(item.Path, ".xml"); } |
