diff options
| author | stefan <stefan@hegedues.at> | 2018-09-12 19:26:21 +0200 |
|---|---|---|
| committer | stefan <stefan@hegedues.at> | 2018-09-12 19:26:21 +0200 |
| commit | 48facb797ed912e4ea6b04b17d1ff190ac2daac4 (patch) | |
| tree | 8dae77a31670a888d733484cb17dd4077d5444e8 /MediaBrowser.LocalMetadata | |
| parent | c32d8656382a0eacb301692e0084377fc433ae9b (diff) | |
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'MediaBrowser.LocalMetadata')
19 files changed, 128 insertions, 588 deletions
diff --git a/MediaBrowser.LocalMetadata/BaseXmlProvider.cs b/MediaBrowser.LocalMetadata/BaseXmlProvider.cs index 9400cccf3..ecd255c18 100644 --- a/MediaBrowser.LocalMetadata/BaseXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/BaseXmlProvider.cs @@ -10,11 +10,11 @@ using MediaBrowser.Model.IO; namespace MediaBrowser.LocalMetadata { public abstract class BaseXmlProvider<T> : ILocalMetadataProvider<T>, IHasItemChangeMonitor, IHasOrder - where T : IHasMetadata, new() + where T : BaseItem, new() { protected IFileSystem FileSystem; - public async Task<MetadataResult<T>> GetMetadata(ItemInfo info, + public Task<MetadataResult<T>> GetMetadata(ItemInfo info, IDirectoryService directoryService, CancellationToken cancellationToken) { @@ -24,7 +24,7 @@ namespace MediaBrowser.LocalMetadata if (file == null) { - return result; + return Task.FromResult(result); } var path = file.FullName; @@ -45,7 +45,7 @@ namespace MediaBrowser.LocalMetadata result.HasMetadata = false; } - return result; + return Task.FromResult(result); } protected abstract void Fetch(MetadataResult<T> result, string path, CancellationToken cancellationToken); @@ -57,7 +57,7 @@ namespace MediaBrowser.LocalMetadata protected abstract FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService); - public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) + public bool HasChanged(BaseItem item, IDirectoryService directoryService) { var file = GetXmlFile(new ItemInfo(item), directoryService); diff --git a/MediaBrowser.LocalMetadata/Images/CollectionFolderImageProvider.cs b/MediaBrowser.LocalMetadata/Images/CollectionFolderImageProvider.cs index 4ec2eeeb1..de14cec38 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(IHasMetadata item) + public bool Supports(BaseItem item) { return item is CollectionFolder && item.SupportsLocalMetadata; } @@ -35,7 +35,7 @@ namespace MediaBrowser.LocalMetadata.Images } } - public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService) { var collectionFolder = (CollectionFolder)item; diff --git a/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs index 9195a9cd4..eaf3343e3 100644 --- a/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs @@ -29,12 +29,12 @@ namespace MediaBrowser.LocalMetadata.Images get { return 0; } } - public bool Supports(IHasMetadata item) + public bool Supports(BaseItem item) { return item is Episode && item.SupportsLocalMetadata; } - public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService) { var parentPath = _fileSystem.GetDirectoryName(item.Path); diff --git a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs index 469a31442..cc06e04e8 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(IHasMetadata item) + public bool Supports(BaseItem item) { if (item is Photo) { @@ -61,7 +61,7 @@ namespace MediaBrowser.LocalMetadata.Images } } - public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService) { var path = item.GetInternalMetadataPath(); diff --git a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs index 2901f51d5..1fbdcf39a 100644 --- a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs @@ -32,12 +32,12 @@ namespace MediaBrowser.LocalMetadata.Images get { return 0; } } - public bool Supports(IHasMetadata item) + public bool Supports(BaseItem item) { if (item.SupportsLocalMetadata) { // Episode has it's own provider - if (item.IsOwnedItem || item is Episode || item is Audio || item is Photo) + if (item is Episode || item is Audio || item is Photo) { return false; } @@ -53,7 +53,7 @@ namespace MediaBrowser.LocalMetadata.Images { var series = season.Series; - if (series != null && series.LocationType == LocationType.FileSystem) + if (series != null && series.IsFileProtocol) { return true; } @@ -63,9 +63,9 @@ namespace MediaBrowser.LocalMetadata.Images return false; } - private IEnumerable<FileSystemMetadata> GetFiles(IHasMetadata item, bool includeDirectories, IDirectoryService directoryService) + private IEnumerable<FileSystemMetadata> GetFiles(BaseItem item, bool includeDirectories, IDirectoryService directoryService) { - if (item.LocationType != LocationType.FileSystem) + if (!item.IsFileProtocol) { return new List<FileSystemMetadata>(); } @@ -85,7 +85,7 @@ namespace MediaBrowser.LocalMetadata.Images .OrderBy(i => BaseItem.SupportedImageExtensionsList.IndexOf(i.Extension ?? string.Empty)); } - public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService) { var files = GetFiles(item, true, directoryService).ToList(); @@ -96,12 +96,12 @@ namespace MediaBrowser.LocalMetadata.Images return list; } - public List<LocalImageInfo> GetImages(IHasMetadata item, string path, bool isPathInMediaFolder, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(BaseItem item, string path, bool isPathInMediaFolder, IDirectoryService directoryService) { return GetImages(item, new[] { path }, isPathInMediaFolder, directoryService); } - public List<LocalImageInfo> GetImages(IHasMetadata item, IEnumerable<string> paths, bool arePathsInMediaFolders, IDirectoryService directoryService) + public List<LocalImageInfo> GetImages(BaseItem item, IEnumerable<string> paths, bool arePathsInMediaFolders, IDirectoryService directoryService) { IEnumerable<FileSystemMetadata> files = paths.SelectMany(i => _fileSystem.GetFiles(i, BaseItem.SupportedImageExtensions, true, false)); @@ -115,7 +115,7 @@ namespace MediaBrowser.LocalMetadata.Images return list; } - private void PopulateImages(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, bool supportParentSeriesFiles, IDirectoryService directoryService) + private void PopulateImages(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, bool supportParentSeriesFiles, IDirectoryService directoryService) { if (supportParentSeriesFiles) { @@ -259,7 +259,7 @@ namespace MediaBrowser.LocalMetadata.Images "movie" }; - private void PopulatePrimaryImages(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder) + private void PopulatePrimaryImages(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder) { string[] imageFileNames; @@ -315,7 +315,7 @@ namespace MediaBrowser.LocalMetadata.Images } } - private void PopulateBackdrops(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder, IDirectoryService directoryService) + private void PopulateBackdrops(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder, IDirectoryService directoryService) { if (!string.IsNullOrEmpty(item.Path)) { @@ -416,7 +416,7 @@ namespace MediaBrowser.LocalMetadata.Images var seasonNumber = season.IndexNumber; var series = season.Series; - if (!seasonNumber.HasValue || series.LocationType != LocationType.FileSystem) + if (!seasonNumber.HasValue || !series.IsFileProtocol) { return; } diff --git a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj index 0986ffdc2..afd3925ba 100644 --- a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj +++ b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj @@ -1,85 +1,17 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{7EF9F3E0-697D-42F3-A08F-19DEB5F84392}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>MediaBrowser.LocalMetadata</RootNamespace> - <AssemblyName>MediaBrowser.LocalMetadata</AssemblyName> - <FileAlignment>512</FileAlignment> - <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> - <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <TargetFrameworkProfile>Profile7</TargetFrameworkProfile> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>none</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> +<Project Sdk="Microsoft.NET.Sdk"> + <ItemGroup> - <Compile Include="..\SharedVersion.cs"> - <Link>Properties\SharedVersion.cs</Link> - </Compile> - <Compile Include="BaseXmlProvider.cs" /> - <Compile Include="Images\CollectionFolderImageProvider.cs" /> - <Compile Include="Images\EpisodeLocalImageProvider.cs" /> - <Compile Include="Images\InternalMetadataFolderImageProvider.cs" /> - <Compile Include="Images\LocalImageProvider.cs" /> - <Compile Include="Parsers\BaseItemXmlParser.cs" /> - <Compile Include="Parsers\BoxSetXmlParser.cs" /> - <Compile Include="Parsers\GameSystemXmlParser.cs" /> - <Compile Include="Parsers\GameXmlParser.cs" /> - <Compile Include="Parsers\PlaylistXmlParser.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Providers\BoxSetXmlProvider.cs" /> - <Compile Include="Providers\FolderXmlProvider.cs" /> - <Compile Include="Providers\GameSystemXmlProvider.cs" /> - <Compile Include="Providers\GameXmlProvider.cs" /> - <Compile Include="Providers\PlaylistXmlProvider.cs" /> - <Compile Include="Savers\BaseXmlSaver.cs" /> - <Compile Include="Savers\BoxSetXmlSaver.cs" /> - <Compile Include="Savers\FolderXmlSaver.cs" /> - <Compile Include="Savers\GameSystemXmlSaver.cs" /> - <Compile Include="Savers\GameXmlSaver.cs" /> - <Compile Include="Savers\PersonXmlSaver.cs" /> - <Compile Include="Savers\PlaylistXmlSaver.cs" /> + <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj" /> + <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" /> </ItemGroup> + <ItemGroup> - <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> - <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> - <Name>MediaBrowser.Common</Name> - </ProjectReference> - <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj"> - <Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project> - <Name>MediaBrowser.Controller</Name> - </ProjectReference> - <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj"> - <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> - <Name>MediaBrowser.Model</Name> - </ProjectReference> + <Compile Include="..\SharedVersion.cs"/> </ItemGroup> - <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> -</Project>
\ No newline at end of file + + <PropertyGroup> + <TargetFramework>netcoreapp2.1</TargetFramework> + <GenerateAssemblyInfo>false</GenerateAssemblyInfo> + </PropertyGroup> + +</Project> diff --git a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.nuget.targets b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.nuget.targets deleted file mode 100644 index e69ce0e64..000000000 --- a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.nuget.targets +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="no"?> -<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Target Name="EmitMSBuildWarning" BeforeTargets="Build"> - <Warning Text="Packages containing MSBuild targets and props files cannot be fully installed in projects targeting multiple frameworks. The MSBuild targets and props files have been ignored." /> - </Target> -</Project>
\ No newline at end of file diff --git a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs index 9a814213b..05874ec2c 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs @@ -253,18 +253,6 @@ namespace MediaBrowser.LocalMetadata.Parsers break; } - case "Website": - { - var val = reader.ReadElementContentAsString(); - - if (!string.IsNullOrWhiteSpace(val)) - { - item.HomePageUrl = val; - } - - break; - } - case "LockedFields": { var val = reader.ReadElementContentAsString(); @@ -462,13 +450,9 @@ namespace MediaBrowser.LocalMetadata.Parsers { var val = reader.ReadElementContentAsString(); - var hasTrailers = item as IHasTrailers; - if (hasTrailers != null) + if (!string.IsNullOrWhiteSpace(val)) { - if (!string.IsNullOrWhiteSpace(val)) - { - hasTrailers.AddTrailerUrl(val); - } + item.AddTrailerUrl(val); } break; } @@ -494,11 +478,7 @@ namespace MediaBrowser.LocalMetadata.Parsers { using (var subtree = reader.ReadSubtree()) { - var hasTrailers = item as IHasTrailers; - if (hasTrailers != null) - { - FetchDataFromTrailersNode(subtree, hasTrailers); - } + FetchDataFromTrailersNode(subtree, item); } } else @@ -726,9 +706,10 @@ namespace MediaBrowser.LocalMetadata.Parsers } } } - private void FetchFromSharesNode(XmlReader reader, IHasShares item) { + var list = new List<Share>(); + reader.MoveToContent(); reader.Read(); @@ -746,20 +727,24 @@ namespace MediaBrowser.LocalMetadata.Parsers reader.Read(); continue; } - using (var subtree = reader.ReadSubtree()) + + using (var subReader = reader.ReadSubtree()) { - var share = GetShareFromNode(subtree); - if (share != null) + var child = GetShare(subReader); + + if (child != null) { - item.Shares.Add(share); + list.Add(child); } } + break; } - default: - reader.Skip(); - break; + { + reader.Skip(); + break; + } } } else @@ -767,6 +752,8 @@ namespace MediaBrowser.LocalMetadata.Parsers reader.Read(); } } + + item.Shares = list.ToArray(); } private Share GetShareFromNode(XmlReader reader) @@ -1012,7 +999,7 @@ namespace MediaBrowser.LocalMetadata.Parsers } } - private void FetchDataFromTrailersNode(XmlReader reader, IHasTrailers item) + private void FetchDataFromTrailersNode(XmlReader reader, T item) { reader.MoveToContent(); reader.Read(); @@ -1193,6 +1180,11 @@ namespace MediaBrowser.LocalMetadata.Parsers linkedItem.Path = reader.ReadElementContentAsString(); break; } + case "ItemId": + { + linkedItem.LibraryItemId = reader.ReadElementContentAsString(); + break; + } default: reader.Skip(); @@ -1206,7 +1198,7 @@ namespace MediaBrowser.LocalMetadata.Parsers } // This is valid - if (!string.IsNullOrWhiteSpace(linkedItem.Path)) + if (!string.IsNullOrWhiteSpace(linkedItem.Path) || !string.IsNullOrWhiteSpace(linkedItem.LibraryItemId)) { return linkedItem; } @@ -1277,7 +1269,7 @@ namespace MediaBrowser.LocalMetadata.Parsers value = value.Trim().Trim(separator); - return string.IsNullOrWhiteSpace(value) ? new string[] { } : Split(value, separator, StringSplitOptions.RemoveEmptyEntries); + return string.IsNullOrWhiteSpace(value) ? Array.Empty<string>() : Split(value, separator, StringSplitOptions.RemoveEmptyEntries); } /// <summary> @@ -1287,7 +1279,7 @@ namespace MediaBrowser.LocalMetadata.Parsers /// <param name="separators">The separators.</param> /// <param name="options">The options.</param> /// <returns>System.String[][].</returns> - private static string[] Split(string val, char[] separators, StringSplitOptions options) + private string[] Split(string val, char[] separators, StringSplitOptions options) { return val.Split(separators, options); } diff --git a/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs index 8bf09e546..3225603bf 100644 --- a/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs @@ -12,14 +12,13 @@ namespace MediaBrowser.LocalMetadata.Parsers { public class GameSystemXmlParser : BaseItemXmlParser<GameSystem> { - private readonly Task _cachedTask = Task.FromResult(true); public Task FetchAsync(MetadataResult<GameSystem> item, string metadataFile, CancellationToken cancellationToken) { Fetch(item, metadataFile, cancellationToken); cancellationToken.ThrowIfCancellationRequested(); - return _cachedTask; + return Task.CompletedTask; } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs index abce0582c..f9b334396 100644 --- a/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs @@ -18,14 +18,13 @@ namespace MediaBrowser.LocalMetadata.Parsers { private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - private readonly Task _cachedTask = Task.FromResult(true); public Task FetchAsync(MetadataResult<Game> item, string metadataFile, CancellationToken cancellationToken) { Fetch(item, metadataFile, cancellationToken); cancellationToken.ThrowIfCancellationRequested(); - return _cachedTask; + return Task.CompletedTask; } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs index c6ef85814..10f46e5a4 100644 --- a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs @@ -20,21 +20,6 @@ namespace MediaBrowser.LocalMetadata.Parsers switch (reader.Name) { - case "OwnerUserId": - { - var userId = reader.ReadElementContentAsString(); - if (!item.Shares.Any(i => string.Equals(userId, i.UserId, StringComparison.OrdinalIgnoreCase))) - { - item.Shares.Add(new Share - { - UserId = userId, - CanEdit = true - }); - } - - break; - } - case "PlaylistMediaType": { item.PlaylistMediaType = reader.ReadElementContentAsString(); @@ -57,21 +42,6 @@ namespace MediaBrowser.LocalMetadata.Parsers } break; - case "Shares": - - if (!reader.IsEmptyElement) - { - using (var subReader = reader.ReadSubtree()) - { - FetchFromSharesNode(subReader, item); - } - } - else - { - reader.Read(); - } - break; - default: base.FetchDataFromXmlNode(reader, result); break; @@ -128,56 +98,6 @@ namespace MediaBrowser.LocalMetadata.Parsers item.LinkedChildren = list.ToArray(list.Count); } - private void FetchFromSharesNode(XmlReader reader, Playlist item) - { - var list = new List<Share>(); - - reader.MoveToContent(); - reader.Read(); - - // Loop through each element - while (!reader.EOF && reader.ReadState == ReadState.Interactive) - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.Name) - { - case "Share": - { - if (reader.IsEmptyElement) - { - reader.Read(); - continue; - } - - using (var subReader = reader.ReadSubtree()) - { - var child = GetShare(subReader); - - if (child != null) - { - list.Add(child); - } - } - - break; - } - default: - { - reader.Skip(); - break; - } - } - } - else - { - reader.Read(); - } - } - - item.Shares = list; - } - public PlaylistXmlParser(ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem) : base(logger, providerManager, xmlReaderSettingsFactory, fileSystem) { } diff --git a/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs deleted file mode 100644 index 0b596a5be..000000000 --- a/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.IO; -using System.Threading; - -using MediaBrowser.Model.IO; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.IO; -using MediaBrowser.Controller.Providers; -using MediaBrowser.LocalMetadata.Parsers; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Xml; - -namespace MediaBrowser.LocalMetadata.Providers -{ - /// <summary> - /// Provides metadata for Folders and all subclasses by parsing folder.xml - /// </summary> - public class FolderXmlProvider : BaseXmlProvider<Folder> - { - private readonly ILogger _logger; - private readonly IProviderManager _providerManager; - protected IXmlReaderSettingsFactory XmlReaderSettingsFactory { get; private set; } - - public FolderXmlProvider(IFileSystem fileSystem, ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory) - : base(fileSystem) - { - _logger = logger; - _providerManager = providerManager; - XmlReaderSettingsFactory = xmlReaderSettingsFactory; - } - - protected override void Fetch(MetadataResult<Folder> result, string path, CancellationToken cancellationToken) - { - new BaseItemXmlParser<Folder>(_logger, _providerManager, XmlReaderSettingsFactory, FileSystem).Fetch(result, path, cancellationToken); - } - - protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService) - { - return directoryService.GetFile(Path.Combine(info.Path, "folder.xml")); - } - } -} diff --git a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs index 4d0495acb..909daf2dd 100644 --- a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs @@ -4,7 +4,7 @@ using MediaBrowser.LocalMetadata.Parsers; using MediaBrowser.Model.Logging; using System.IO; using System.Threading; - +using MediaBrowser.LocalMetadata.Savers; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Xml; @@ -32,7 +32,7 @@ namespace MediaBrowser.LocalMetadata.Providers protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService) { - return directoryService.GetFile(Path.Combine(info.Path, "playlist.xml")); + return directoryService.GetFile(PlaylistXmlSaver.GetSavePath(info.Path, FileSystem)); } } } diff --git a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs index a3800e5c1..81622f54c 100644 --- a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs @@ -29,92 +29,6 @@ namespace MediaBrowser.LocalMetadata.Savers { private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - private static readonly Dictionary<string, string> CommonTags = new[] { - - "Added", - "AspectRatio", - "AudioDbAlbumId", - "AudioDbArtistId", - "BirthDate", - - // Deprecated. No longer saving in this field. - "certification", - - "Chapters", - "ContentRating", - "Countries", - "CustomRating", - "CriticRating", - "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", - "OriginalTitle", - "LockData", - "LockedFields", - "Format3D", - - // Deprecated. No longer saving in this field. - "MPAARating", - - "MusicBrainzArtistId", - "MusicBrainzAlbumArtistId", - "MusicBrainzAlbumId", - "MusicBrainzReleaseGroupId", - - // Deprecated. No longer saving in this field. - "MusicbrainzId", - - "Overview", - "Persons", - "PremiereDate", - "ProductionYear", - "Rating", - "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", - "TVRageId", - "Website", - "Zap2ItId", - "CollectionItems", - "PlaylistItems", - "Shares" - - }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - public BaseXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) { FileSystem = fileSystem; @@ -150,7 +64,7 @@ namespace MediaBrowser.LocalMetadata.Savers } } - public string GetSavePath(IHasMetadata item) + public string GetSavePath(BaseItem item) { return GetLocalSavePath(item); } @@ -160,14 +74,14 @@ namespace MediaBrowser.LocalMetadata.Savers /// </summary> /// <param name="item">The item.</param> /// <returns>System.String.</returns> - protected abstract string GetLocalSavePath(IHasMetadata item); + protected abstract string GetLocalSavePath(BaseItem item); /// <summary> /// Gets the name of the root element. /// </summary> /// <param name="item">The item.</param> /// <returns>System.String.</returns> - protected virtual string GetRootElementName(IHasMetadata item) + protected virtual string GetRootElementName(BaseItem item) { return "Item"; } @@ -178,14 +92,9 @@ namespace MediaBrowser.LocalMetadata.Savers /// <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 abstract bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType); - - protected virtual List<string> GetTagsUsed() - { - return new List<string>(); - } + public abstract bool IsEnabledFor(BaseItem item, ItemUpdateType updateType); - public void Save(IHasMetadata item, CancellationToken cancellationToken) + public void Save(BaseItem item, CancellationToken cancellationToken) { var path = GetSavePath(item); @@ -204,27 +113,15 @@ namespace MediaBrowser.LocalMetadata.Savers private void SaveToFile(Stream stream, string path) { FileSystem.CreateDirectory(FileSystem.GetDirectoryName(path)); - - var file = FileSystem.GetFileInfo(path); - - var wasHidden = false; - - // This will fail if the file is hidden - if (file.Exists) - { - if (file.IsHidden) - { - wasHidden = true; - } - FileSystem.SetAttributes(path, false, false); - } + // On Windows, savint the file will fail if the file is hidden or readonly + FileSystem.SetAttributes(path, false, false); using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) { stream.CopyTo(filestream); } - if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden) + if (ConfigurationManager.Configuration.SaveMetadataHidden) { SetHidden(path, true); } @@ -242,7 +139,7 @@ namespace MediaBrowser.LocalMetadata.Savers } } - private void Save(IHasMetadata item, Stream stream, string xmlPath) + private void Save(BaseItem item, Stream stream, string xmlPath) { var settings = new XmlWriterSettings { @@ -259,7 +156,7 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteStartElement(root); - var baseItem = item as BaseItem; + var baseItem = item; if (baseItem != null) { @@ -268,32 +165,13 @@ namespace MediaBrowser.LocalMetadata.Savers WriteCustomElements(item, writer); - var tagsUsed = GetTagsUsed(); - - try - { - AddCustomTags(xmlPath, tagsUsed, writer, Logger, FileSystem); - } - catch (FileNotFoundException) - { - - } - catch (IOException) - { - - } - catch (XmlException ex) - { - Logger.ErrorException("Error reading existng xml", ex); - } - writer.WriteEndElement(); writer.WriteEndDocument(); } } - protected abstract void WriteCustomElements(IHasMetadata item, XmlWriter writer); + protected abstract void WriteCustomElements(BaseItem item, XmlWriter writer); public const string DateAddedFormat = "yyyy-MM-dd HH:mm:ss"; @@ -373,20 +251,16 @@ namespace MediaBrowser.LocalMetadata.Savers } } - var hasTrailers = item as IHasTrailers; - if (hasTrailers != null) + if (item.RemoteTrailers.Length > 0) { - if (hasTrailers.RemoteTrailers.Length > 0) - { - writer.WriteStartElement("Trailers"); + writer.WriteStartElement("Trailers"); - foreach (var trailer in hasTrailers.RemoteTrailers) - { - writer.WriteElementString("Trailer", trailer.Url); - } - - writer.WriteEndElement(); + foreach (var trailer in item.RemoteTrailers) + { + writer.WriteElementString("Trailer", trailer.Url); } + + writer.WriteEndElement(); } if (item.ProductionLocations.Length > 0) @@ -417,11 +291,6 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteElementString("ProductionYear", item.ProductionYear.Value.ToString(UsCulture)); } - if (!string.IsNullOrEmpty(item.HomePageUrl)) - { - writer.WriteElementString("Website", item.HomePageUrl); - } - var hasAspectRatio = item as IHasAspectRatio; if (hasAspectRatio != null) { @@ -447,7 +316,7 @@ namespace MediaBrowser.LocalMetadata.Savers { var timespan = TimeSpan.FromTicks(runTimeTicks.Value); - writer.WriteElementString("RunningTime", Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture)); + writer.WriteElementString("RunningTime", Math.Floor(timespan.TotalMinutes).ToString(UsCulture)); } if (item.ProviderIds != null) @@ -469,7 +338,7 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteEndElement(); } - if (item.Genres.Count > 0) + if (item.Genres.Length > 0) { writer.WriteStartElement("Genres"); @@ -536,7 +405,7 @@ namespace MediaBrowser.LocalMetadata.Savers } var playlist = item as Playlist; - if (playlist != null) + if (playlist != null && !Playlist.IsPlaylistFile(playlist.Path)) { AddLinkedChildren(playlist, writer, "PlaylistItems", "PlaylistItem"); } @@ -617,10 +486,19 @@ namespace MediaBrowser.LocalMetadata.Savers foreach (var link in items) { - if (!string.IsNullOrWhiteSpace(link.Path)) + if (!string.IsNullOrWhiteSpace(link.Path) || !string.IsNullOrWhiteSpace(link.LibraryItemId)) { writer.WriteStartElement(singularNodeName); - writer.WriteElementString("Path", link.Path); + if (!string.IsNullOrWhiteSpace(link.Path)) + { + writer.WriteElementString("Path", link.Path); + } + + if (!string.IsNullOrWhiteSpace(link.LibraryItemId)) + { + writer.WriteElementString("ItemId", link.LibraryItemId); + } + writer.WriteEndElement(); } } @@ -628,62 +506,9 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteEndElement(); } - private static bool IsPersonType(PersonInfo person, string type) + private bool IsPersonType(PersonInfo person, string type) { return string.Equals(person.Type, type, StringComparison.OrdinalIgnoreCase) || string.Equals(person.Role, type, StringComparison.OrdinalIgnoreCase); } - - private void AddCustomTags(string path, List<string> xmlTagsUsed, XmlWriter writer, ILogger logger, IFileSystem fileSystem) - { - var settings = XmlReaderSettingsFactory.Create(false); - - settings.CheckCharacters = false; - settings.IgnoreProcessingInstructions = true; - settings.IgnoreComments = true; - - using (var fileStream = fileSystem.OpenRead(path)) - { - using (var streamReader = new StreamReader(fileStream, Encoding.UTF8)) - { - // Use XmlReader for best performance - using (var reader = XmlReader.Create(streamReader, settings)) - { - try - { - reader.MoveToContent(); - } - catch (Exception ex) - { - logger.ErrorException("Error reading existing xml tags from {0}.", ex, path); - return; - } - - reader.Read(); - - // Loop through each element - while (!reader.EOF && reader.ReadState == ReadState.Interactive) - { - if (reader.NodeType == XmlNodeType.Element) - { - var name = reader.Name; - - if (!CommonTags.ContainsKey(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase)) - { - writer.WriteNode(reader, false); - } - else - { - reader.Skip(); - } - } - else - { - reader.Read(); - } - } - } - } - } - } } } diff --git a/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs index 214b44ae7..42a96588a 100644 --- a/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs @@ -17,7 +17,7 @@ namespace MediaBrowser.LocalMetadata.Savers { public class BoxSetXmlSaver : BaseXmlSaver { - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -27,11 +27,11 @@ namespace MediaBrowser.LocalMetadata.Savers return item is BoxSet && updateType >= ItemUpdateType.MetadataDownload; } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { } - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.Combine(item.Path, "collection.xml"); } diff --git a/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs deleted file mode 100644 index d5d878ef7..000000000 --- a/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs +++ /dev/null @@ -1,60 +0,0 @@ -using MediaBrowser.Controller.Configuration; -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.Controller.Playlists; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading; -using System.Xml; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Xml; - -namespace MediaBrowser.LocalMetadata.Savers -{ - public class FolderXmlSaver : BaseXmlSaver - { - protected override string GetLocalSavePath(IHasMetadata item) - { - return Path.Combine(item.Path, "folder.xml"); - } - - protected override string GetRootElementName(IHasMetadata item) - { - return "Item"; - } - - public override 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) && - !(item is Playlist)) - { - return updateType >= ItemUpdateType.MetadataEdit; - } - } - - return false; - } - - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) - { - } - - public FolderXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory) - { - } - } -} diff --git a/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs index 59b69746a..109b21d35 100644 --- a/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs @@ -16,7 +16,7 @@ namespace MediaBrowser.LocalMetadata.Savers { } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -26,17 +26,7 @@ namespace MediaBrowser.LocalMetadata.Savers return item is GameSystem && updateType >= ItemUpdateType.MetadataDownload; } - protected override List<string> GetTagsUsed() - { - var list = new List<string> - { - "GameSystem" - }; - - return list; - } - - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var gameSystem = (GameSystem)item; @@ -46,12 +36,12 @@ namespace MediaBrowser.LocalMetadata.Savers } } - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.Combine(item.Path, "gamesystem.xml"); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "Item"; } diff --git a/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs index 24c5a4679..1a8e83e72 100644 --- a/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs @@ -16,9 +16,9 @@ namespace MediaBrowser.LocalMetadata.Savers /// </summary> public class GameXmlSaver : BaseXmlSaver { - private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + private readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -28,18 +28,7 @@ namespace MediaBrowser.LocalMetadata.Savers return item is Game && updateType >= ItemUpdateType.MetadataDownload; } - protected override List<string> GetTagsUsed() - { - var list = new List<string> - { - "GameSystem", - "Players" - }; - - return list; - } - - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var game = (Game)item; @@ -53,12 +42,12 @@ namespace MediaBrowser.LocalMetadata.Savers } } - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return GetGameSavePath((Game)item); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "Item"; } diff --git a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs index ef28dde36..521a0b00e 100644 --- a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs @@ -13,7 +13,7 @@ namespace MediaBrowser.LocalMetadata.Savers { public class PlaylistXmlSaver : BaseXmlSaver { - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -23,18 +23,7 @@ namespace MediaBrowser.LocalMetadata.Savers return item is Playlist && updateType >= ItemUpdateType.MetadataImport; } - protected override List<string> GetTagsUsed() - { - var list = new List<string> - { - "OwnerUserId", - "PlaylistMediaType" - }; - - return list; - } - - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var game = (Playlist)item; @@ -44,9 +33,21 @@ namespace MediaBrowser.LocalMetadata.Savers } } - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) + { + return GetSavePath(item.Path, FileSystem); + } + + public static string GetSavePath(string itemPath, IFileSystem fileSystem) { - return Path.Combine(item.Path, "playlist.xml"); + var path = itemPath; + + if (Playlist.IsPlaylistFile(path)) + { + return Path.ChangeExtension(itemPath, ".xml"); + } + + return Path.Combine(path, "playlist.xml"); } public PlaylistXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory) |
