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.XbmcMetadata | |
| parent | c32d8656382a0eacb301692e0084377fc433ae9b (diff) | |
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'MediaBrowser.XbmcMetadata')
| -rw-r--r-- | MediaBrowser.XbmcMetadata/EntryPoint.cs | 41 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj | 97 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.nuget.targets | 6 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs | 49 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs | 70 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs | 16 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs | 124 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs | 30 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/packages.config | 3 |
15 files changed, 132 insertions, 367 deletions
diff --git a/MediaBrowser.XbmcMetadata/EntryPoint.cs b/MediaBrowser.XbmcMetadata/EntryPoint.cs index 9cc17481c..e4b11a6fc 100644 --- a/MediaBrowser.XbmcMetadata/EntryPoint.cs +++ b/MediaBrowser.XbmcMetadata/EntryPoint.cs @@ -8,7 +8,6 @@ using MediaBrowser.Model.Logging; using MediaBrowser.XbmcMetadata.Configuration; using MediaBrowser.XbmcMetadata.Savers; using System; -using MediaBrowser.Controller.Dto; namespace MediaBrowser.XbmcMetadata { @@ -32,48 +31,15 @@ namespace MediaBrowser.XbmcMetadata public void Run() { _userDataManager.UserDataSaved += _userDataManager_UserDataSaved; - _libraryManager.ItemUpdated += _libraryManager_ItemUpdated; - } - - void _libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) - { - if (e.UpdateReason >= ItemUpdateType.ImageUpdate) - { - var person = e.Item as Person; - - if (person != null) - { - var config = _config.GetNfoConfiguration(); - - if (!config.SaveImagePathsInNfo) - { - return; - } - - var items = _libraryManager.GetItemList(new InternalItemsQuery - { - PersonIds = new[] { person.Id.ToString("N") }, - DtoOptions = new DtoOptions(true) - - }); - - foreach (var item in items) - { - SaveMetadataForItem(item, e.UpdateReason); - } - } - } } void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating) { - var item = e.Item as BaseItem; - if (!string.IsNullOrWhiteSpace(_config.GetNfoConfiguration().UserId)) { - SaveMetadataForItem(item, ItemUpdateType.MetadataDownload); + SaveMetadataForItem(e.Item, ItemUpdateType.MetadataDownload); } } } @@ -81,14 +47,11 @@ namespace MediaBrowser.XbmcMetadata public void Dispose() { _userDataManager.UserDataSaved -= _userDataManager_UserDataSaved; - GC.SuppressFinalize(this); } private void SaveMetadataForItem(BaseItem item, ItemUpdateType updateReason) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || - locationType == LocationType.Virtual) + if (!item.IsFileProtocol) { return; } diff --git a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj index e84fa8e65..e4c9a0c35 100644 --- a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj +++ b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj @@ -1,88 +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>{23499896-B135-4527-8574-C26E926EA99E}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>MediaBrowser.XbmcMetadata</RootNamespace> - <AssemblyName>MediaBrowser.XbmcMetadata</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="Configuration\NfoOptions.cs" /> - <Compile Include="EntryPoint.cs" /> - <Compile Include="Parsers\BaseNfoParser.cs" /> - <Compile Include="Parsers\EpisodeNfoParser.cs" /> - <Compile Include="Parsers\MovieNfoParser.cs" /> - <Compile Include="Parsers\SeasonNfoParser.cs" /> - <Compile Include="Parsers\SeriesNfoParser.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Providers\AlbumNfoProvider.cs" /> - <Compile Include="Providers\ArtistNfoProvider.cs" /> - <Compile Include="Providers\BaseNfoProvider.cs" /> - <Compile Include="Providers\BaseVideoNfoProvider.cs" /> - <Compile Include="Providers\EpisodeNfoProvider.cs" /> - <Compile Include="Providers\MovieNfoProvider.cs" /> - <Compile Include="Providers\SeasonNfoProvider.cs" /> - <Compile Include="Providers\SeriesNfoProvider.cs" /> - <Compile Include="Savers\AlbumNfoSaver.cs" /> - <Compile Include="Savers\ArtistNfoSaver.cs" /> - <Compile Include="Savers\BaseNfoSaver.cs" /> - <Compile Include="Savers\EpisodeNfoSaver.cs" /> - <Compile Include="Savers\MovieNfoSaver.cs" /> - <Compile Include="Savers\SeasonNfoSaver.cs" /> - <Compile Include="Savers\SeriesNfoSaver.cs" /> + <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" /> + <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.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> - <ItemGroup> - <None Include="packages.config" /> - </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.XbmcMetadata/MediaBrowser.XbmcMetadata.nuget.targets b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.nuget.targets deleted file mode 100644 index e69ce0e64..000000000 --- a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.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.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 689f175f3..3b8d68776 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -187,18 +187,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers return; } - using (var ms = new MemoryStream()) + // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions + try { - var bytes = Encoding.UTF8.GetBytes(xml); - - ms.Write(bytes, 0, bytes.Length); - ms.Position = 0; - - // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions - try + using (var stringReader = new StringReader(xml)) { // Use XmlReader for best performance - using (var reader = XmlReader.Create(ms, settings)) + using (var reader = XmlReader.Create(stringReader, settings)) { reader.MoveToContent(); reader.Read(); @@ -219,10 +214,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers } } } - catch (XmlException) - { + } + catch (XmlException) + { - } } } } @@ -251,7 +246,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers { var tmdbId = xml.Substring(index + srch.Length).TrimEnd('/').Split('-')[0]; int value; - if (!string.IsNullOrWhiteSpace(tmdbId) && int.TryParse(tmdbId, NumberStyles.Any, CultureInfo.InvariantCulture, out value)) + if (!string.IsNullOrWhiteSpace(tmdbId) && int.TryParse(tmdbId, NumberStyles.Integer, CultureInfo.InvariantCulture, out value)) { item.SetProviderId(MetadataProviders.Tmdb, value.ToString(_usCulture)); } @@ -267,7 +262,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers { var tvdbId = xml.Substring(index + srch.Length).TrimEnd('/'); int value; - if (!string.IsNullOrWhiteSpace(tvdbId) && int.TryParse(tvdbId, NumberStyles.Any, CultureInfo.InvariantCulture, out value)) + if (!string.IsNullOrWhiteSpace(tvdbId) && int.TryParse(tvdbId, NumberStyles.Integer, CultureInfo.InvariantCulture, out value)) { item.SetProviderId(MetadataProviders.Tvdb, value.ToString(_usCulture)); } @@ -380,18 +375,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers break; } - case "website": - { - var val = reader.ReadElementContentAsString(); - - if (!string.IsNullOrWhiteSpace(val)) - { - item.HomePageUrl = val; - } - - break; - } - case "lockedfields": { var val = reader.ReadElementContentAsString(); @@ -592,15 +575,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers { var val = reader.ReadElementContentAsString(); - var hasTrailer = item as IHasTrailers; - if (hasTrailer != null) + if (!string.IsNullOrWhiteSpace(val)) { - if (!string.IsNullOrWhiteSpace(val)) - { - val = val.Replace("plugin://plugin.video.youtube/?action=play_video&videoid=", "https://www.youtube.com/watch?v=", StringComparison.OrdinalIgnoreCase); + val = val.Replace("plugin://plugin.video.youtube/?action=play_video&videoid=", BaseNfoSaver.YouTubeWatchUrl, StringComparison.OrdinalIgnoreCase); - hasTrailer.AddTrailerUrl(val); - } + item.AddTrailerUrl(val); } break; } @@ -977,7 +956,7 @@ namespace MediaBrowser.XbmcMetadata.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> @@ -987,7 +966,7 @@ namespace MediaBrowser.XbmcMetadata.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.XbmcMetadata/Parsers/EpisodeNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs index 953b59f46..ce7b924eb 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs @@ -24,7 +24,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers Fetch(item, metadataFile, cancellationToken); } - private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + private readonly CultureInfo UsCulture = new CultureInfo("en-US"); protected override void Fetch(MetadataResult<Episode> item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) { @@ -44,18 +44,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers xml = xml.Substring(0, index + srch.Length); } - using (var ms = new MemoryStream()) + // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions + try { - var bytes = Encoding.UTF8.GetBytes(xml); - - ms.Write(bytes, 0, bytes.Length); - ms.Position = 0; - - // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions - try + using (var stringReader = new StringReader(xml)) { // Use XmlReader for best performance - using (var reader = XmlReader.Create(ms, settings)) + using (var reader = XmlReader.Create(stringReader, settings)) { reader.MoveToContent(); reader.Read(); @@ -76,10 +71,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers } } } - catch (XmlException) - { + } + catch (XmlException) + { - } } } } @@ -144,55 +139,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers 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(); diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs index 0283e4a7b..94b4c30f2 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs @@ -125,17 +125,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers private void ParseSetXml(string xml, Movie movie) { - using (var ms = new MemoryStream()) - { - //xml = xml.Substring(xml.IndexOf('<')); - //xml = xml.Substring(0, xml.LastIndexOf('>')); - xml = "<set>" + xml + "</set>"; - - var bytes = Encoding.UTF8.GetBytes(xml); - - ms.Write(bytes, 0, bytes.Length); - ms.Position = 0; + //xml = xml.Substring(xml.IndexOf('<')); + //xml = xml.Substring(0, xml.LastIndexOf('>')); + using (var stringReader = new StringReader("<set>" + xml + "</set>")) + { // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions try { @@ -146,7 +140,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers settings.IgnoreComments = true; // Use XmlReader for best performance - using (var reader = XmlReader.Create(ms, settings)) + using (var reader = XmlReader.Create(stringReader, settings)) { reader.MoveToContent(); reader.Read(); diff --git a/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs index 4803004dd..123c0493f 100644 --- a/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs @@ -9,7 +9,7 @@ using MediaBrowser.Model.IO; namespace MediaBrowser.XbmcMetadata.Providers { public abstract class BaseNfoProvider<T> : ILocalMetadataProvider<T>, IHasItemChangeMonitor - where T : IHasMetadata, new() + where T : BaseItem, new() { protected IFileSystem FileSystem; @@ -56,7 +56,7 @@ namespace MediaBrowser.XbmcMetadata.Providers 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.XbmcMetadata/Savers/AlbumNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs index f9f9c9b98..dcce00d69 100644 --- a/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs @@ -18,17 +18,17 @@ namespace MediaBrowser.XbmcMetadata.Savers { public class AlbumNfoSaver : BaseNfoSaver { - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.Combine(item.Path, "album.nfo"); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "album"; } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -38,7 +38,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return item is MusicAlbum && updateType >= MinimumUpdateType; } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var album = (MusicAlbum)item; @@ -55,7 +55,7 @@ namespace MediaBrowser.XbmcMetadata.Savers AddTracks(album.Tracks, writer); } - private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + private readonly CultureInfo UsCulture = new CultureInfo("en-US"); private void AddTracks(IEnumerable<BaseItem> tracks, XmlWriter writer) { @@ -84,7 +84,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - protected override List<string> GetTagsUsed(IHasMetadata item) + protected override List<string> GetTagsUsed(BaseItem item) { var list = base.GetTagsUsed(item); list.AddRange(new string[] diff --git a/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs index a7f4e56a6..f571dc2b7 100644 --- a/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs @@ -17,17 +17,17 @@ namespace MediaBrowser.XbmcMetadata.Savers { public class ArtistNfoSaver : BaseNfoSaver { - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.Combine(item.Path, "artist.nfo"); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "artist"; } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -37,7 +37,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return item is MusicArtist && updateType >= MinimumUpdateType; } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var artist = (MusicArtist)item; @@ -54,7 +54,7 @@ namespace MediaBrowser.XbmcMetadata.Savers AddAlbums(albums, writer); } - private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + private readonly CultureInfo UsCulture = new CultureInfo("en-US"); private void AddAlbums(IList<BaseItem> albums, XmlWriter writer) { @@ -76,7 +76,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - protected override List<string> GetTagsUsed(IHasMetadata item) + protected override List<string> GetTagsUsed(BaseItem item) { var list = base.GetTagsUsed(item); list.AddRange(new string[] diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index d32081458..505fec65f 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -28,6 +28,8 @@ namespace MediaBrowser.XbmcMetadata.Savers { public abstract class BaseNfoSaver : IMetadataFileSaver { + public static readonly string YouTubeWatchUrl = "https://www.youtube.com/watch?v="; + private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); private static readonly Dictionary<string, string> CommonTags = new[] { @@ -42,7 +44,6 @@ namespace MediaBrowser.XbmcMetadata.Savers "sorttitle", "mpaa", "aspectratio", - "website", "collectionnumber", "tmdbid", "rottentomatoesid", @@ -147,7 +148,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - public string GetSavePath(IHasMetadata item) + public string GetSavePath(BaseItem item) { return GetLocalSavePath(item); } @@ -157,14 +158,14 @@ namespace MediaBrowser.XbmcMetadata.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 abstract string GetRootElementName(IHasMetadata item); + protected abstract string GetRootElementName(BaseItem item); /// <summary> /// Determines whether [is enabled for] [the specified item]. @@ -172,9 +173,9 @@ namespace MediaBrowser.XbmcMetadata.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); + public abstract bool IsEnabledFor(BaseItem item, ItemUpdateType updateType); - protected virtual List<string> GetTagsUsed(IHasMetadata item) + protected virtual List<string> GetTagsUsed(BaseItem item) { var list = new List<string>(); foreach (var providerKey in item.ProviderIds.Keys) @@ -188,7 +189,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return list; } - public void Save(IHasMetadata item, CancellationToken cancellationToken) + public void Save(BaseItem item, CancellationToken cancellationToken) { var path = GetSavePath(item); @@ -207,27 +208,15 @@ namespace MediaBrowser.XbmcMetadata.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); } @@ -245,7 +234,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - private void Save(IHasMetadata item, Stream stream, string xmlPath) + private void Save(BaseItem item, Stream stream, string xmlPath) { var settings = new XmlWriterSettings { @@ -262,7 +251,7 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteStartElement(root); - var baseItem = item as BaseItem; + var baseItem = item; if (baseItem != null) { @@ -303,7 +292,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - protected abstract void WriteCustomElements(IHasMetadata item, XmlWriter writer); + protected abstract void WriteCustomElements(BaseItem item, XmlWriter writer); public static void AddMediaInfo<T>(T item, XmlWriter writer) where T : IHasMediaSources @@ -389,13 +378,13 @@ namespace MediaBrowser.XbmcMetadata.Savers if (stream.Type == MediaStreamType.Video) { - var runtimeTicks = ((IHasMetadata) item).RunTimeTicks; + var runtimeTicks = item.RunTimeTicks; if (runtimeTicks.HasValue) { var timespan = TimeSpan.FromTicks(runtimeTicks.Value); - writer.WriteElementString("duration", Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture)); - writer.WriteElementString("durationinseconds", Convert.ToInt32(timespan.TotalSeconds).ToString(UsCulture)); + writer.WriteElementString("duration", Math.Floor(timespan.TotalMinutes).ToString(UsCulture)); + writer.WriteElementString("durationinseconds", Math.Floor(timespan.TotalSeconds).ToString(UsCulture)); } var video = item as Video; @@ -454,7 +443,7 @@ namespace MediaBrowser.XbmcMetadata.Savers /// Adds the common nodes. /// </summary> /// <returns>Task.</returns> - public static void AddCommonNodes(BaseItem item, XmlWriter writer, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config) + private void AddCommonNodes(BaseItem item, XmlWriter writer, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config) { var writtenProviderIds = new HashSet<string>(StringComparer.OrdinalIgnoreCase); @@ -539,13 +528,9 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("credits", person); } - var hasTrailer = item as IHasTrailers; - if (hasTrailer != null) + foreach (var trailer in item.RemoteTrailers) { - foreach (var trailer in hasTrailer.RemoteTrailers) - { - writer.WriteElementString("trailer", GetOutputTrailerUrl(trailer.Url)); - } + writer.WriteElementString("trailer", GetOutputTrailerUrl(trailer.Url)); } if (item.CommunityRating.HasValue) @@ -578,11 +563,6 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - if (!string.IsNullOrEmpty(item.HomePageUrl)) - { - writer.WriteElementString("website", item.HomePageUrl); - } - var tmdbCollection = item.GetProviderId(MetadataProviders.TmdbCollection); if (!string.IsNullOrEmpty(tmdbCollection)) @@ -679,7 +659,7 @@ namespace MediaBrowser.XbmcMetadata.Savers { var timespan = TimeSpan.FromTicks(runTimeTicks.Value); - writer.WriteElementString("runtime", Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture)); + writer.WriteElementString("runtime", Convert.ToInt64(timespan.TotalMinutes).ToString(UsCulture)); } if (!string.IsNullOrWhiteSpace(item.Tagline)) @@ -791,8 +771,23 @@ namespace MediaBrowser.XbmcMetadata.Savers var providerId = item.ProviderIds[providerKey]; if (!string.IsNullOrEmpty(providerId) && !writtenProviderIds.Contains(providerKey)) { - writer.WriteElementString(GetTagForProviderKey(providerKey), providerId); - writtenProviderIds.Add(providerKey); + try + { + var tagName = GetTagForProviderKey(providerKey); + //Logger.Debug("Verifying custom provider tagname {0}", tagName); + XmlConvert.VerifyName(tagName); + //Logger.Debug("Saving custom provider tagname {0}", tagName); + + writer.WriteElementString(GetTagForProviderKey(providerKey), providerId); + } + catch (ArgumentException) + { + // catch invalid names without failing the entire operation + } + catch (XmlException) + { + // catch invalid names without failing the entire operation + } } } } @@ -813,24 +808,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - public static void AddChapters(Video item, XmlWriter writer, IItemRepository repository) - { - var chapters = repository.GetChapters(item.Id); - - foreach (var chapter in chapters) - { - writer.WriteStartElement("chapter"); - writer.WriteElementString("name", chapter.Name); - - var time = TimeSpan.FromTicks(chapter.StartPositionTicks); - var ms = Convert.ToInt64(time.TotalMilliseconds); - - writer.WriteElementString("startpositionms", ms.ToString(UsCulture)); - writer.WriteEndElement(); - } - } - - private static void AddCollectionItems(Folder item, XmlWriter writer) + private void AddCollectionItems(Folder item, XmlWriter writer) { var items = item.LinkedChildren .Where(i => i.Type == LinkedChildType.Manual) @@ -845,6 +823,11 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("path", link.Path); } + if (!string.IsNullOrWhiteSpace(link.LibraryItemId)) + { + writer.WriteElementString("ItemId", link.LibraryItemId); + } + writer.WriteEndElement(); } } @@ -854,16 +837,13 @@ namespace MediaBrowser.XbmcMetadata.Savers /// </summary> /// <param name="url">The URL.</param> /// <returns>System.String.</returns> - private static string GetOutputTrailerUrl(string url) + private string GetOutputTrailerUrl(string url) { // This is what xbmc expects - - return url.Replace("https://www.youtube.com/watch?v=", - "plugin://plugin.video.youtube/?action=play_video&videoid=", - StringComparison.OrdinalIgnoreCase); + return url.Replace(YouTubeWatchUrl, "plugin://plugin.video.youtube/?action=play_video&videoid=", StringComparison.OrdinalIgnoreCase); } - private static void AddImages(BaseItem item, XmlWriter writer, ILibraryManager libraryManager, IServerConfigurationManager config) + private void AddImages(BaseItem item, XmlWriter writer, ILibraryManager libraryManager, IServerConfigurationManager config) { writer.WriteStartElement("art"); @@ -882,7 +862,7 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteEndElement(); } - private static void AddUserData(BaseItem item, XmlWriter writer, IUserManager userManager, IUserDataManager userDataRepo, XbmcMetadataOptions options) + private void AddUserData(BaseItem item, XmlWriter writer, IUserManager userManager, IUserDataManager userDataRepo, XbmcMetadataOptions options) { var userId = options.UserId; if (string.IsNullOrWhiteSpace(userId)) @@ -932,7 +912,7 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteEndElement(); } - private static void AddActors(List<PersonInfo> people, XmlWriter writer, ILibraryManager libraryManager, IFileSystem fileSystem, IServerConfigurationManager config, bool saveImagePath) + private void AddActors(List<PersonInfo> people, XmlWriter writer, ILibraryManager libraryManager, IFileSystem fileSystem, IServerConfigurationManager config, bool saveImagePath) { var actors = people .Where(i => !IsPersonType(i, PersonType.Director) && !IsPersonType(i, PersonType.Writer)) @@ -984,7 +964,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - private static string GetImagePathToSave(ItemImageInfo image, ILibraryManager libraryManager, IServerConfigurationManager config) + private string GetImagePathToSave(ItemImageInfo image, ILibraryManager libraryManager, IServerConfigurationManager config) { if (!image.IsLocalFile) { @@ -994,7 +974,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return libraryManager.GetPathAfterNetworkSubstitution(image.Path); } - 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); } @@ -1052,7 +1032,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - private static string GetTagForProviderKey(string providerKey) + private string GetTagForProviderKey(string providerKey) { return providerKey.ToLower() + "id"; } diff --git a/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs index bbd3a8d34..33f96fc8f 100644 --- a/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs @@ -17,17 +17,17 @@ namespace MediaBrowser.XbmcMetadata.Savers { public class EpisodeNfoSaver : BaseNfoSaver { - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.ChangeExtension(item.Path, ".nfo"); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "episodedetails"; } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -37,7 +37,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return item is Episode && updateType >= MinimumUpdateType; } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var episode = (Episode)item; @@ -89,26 +89,11 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("displayseason", specialSeason.Value.ToString(UsCulture)); } } - - if (episode.DvdEpisodeNumber.HasValue) - { - writer.WriteElementString("DVD_episodenumber", episode.DvdEpisodeNumber.Value.ToString(UsCulture)); - } - - if (episode.DvdSeasonNumber.HasValue) - { - writer.WriteElementString("DVD_season", episode.DvdSeasonNumber.Value.ToString(UsCulture)); - } - - if (episode.AbsoluteEpisodeNumber.HasValue) - { - writer.WriteElementString("absolute_number", episode.AbsoluteEpisodeNumber.Value.ToString(UsCulture)); - } } - private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + private readonly CultureInfo UsCulture = new CultureInfo("en-US"); - protected override List<string> GetTagsUsed(IHasMetadata item) + protected override List<string> GetTagsUsed(BaseItem item) { var list = base.GetTagsUsed(item); list.AddRange(new string[] @@ -120,9 +105,6 @@ namespace MediaBrowser.XbmcMetadata.Savers "airsafter_season", "airsbefore_episode", "airsbefore_season", - "DVD_episodenumber", - "DVD_season", - "absolute_number", "displayseason", "displayepisode" }); diff --git a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs index 1989a2c28..0fc74e66b 100644 --- a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.XbmcMetadata.Savers { public class MovieNfoSaver : BaseNfoSaver { - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { var paths = GetMovieSavePaths(new ItemInfo(item), FileSystem); return paths.Count == 0 ? null : paths[0]; @@ -61,12 +61,12 @@ namespace MediaBrowser.XbmcMetadata.Savers return list; } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return item is MusicVideo ? "musicvideo" : "movie"; } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -76,7 +76,7 @@ namespace MediaBrowser.XbmcMetadata.Savers 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) + if (video != null && !(item is Episode) && !video.ExtraType.HasValue) { return updateType >= MinimumUpdateType; } @@ -84,7 +84,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return false; } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var imdb = item.GetProviderId(MetadataProviders.Imdb); @@ -118,7 +118,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - protected override List<string> GetTagsUsed(IHasMetadata item) + protected override List<string> GetTagsUsed(BaseItem item) { var list = base.GetTagsUsed(item); list.AddRange(new string[] diff --git a/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs index 85ed307c1..5a626eef9 100644 --- a/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs @@ -16,17 +16,17 @@ namespace MediaBrowser.XbmcMetadata.Savers { public class SeasonNfoSaver : BaseNfoSaver { - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.Combine(item.Path, "season.nfo"); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "season"; } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -41,7 +41,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return updateType >= MinimumUpdateType || (updateType >= ItemUpdateType.MetadataImport && FileSystem.FileExists(GetSavePath(item))); } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var season = (Season)item; @@ -51,7 +51,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - protected override List<string> GetTagsUsed(IHasMetadata item) + protected override List<string> GetTagsUsed(BaseItem item) { var list = base.GetTagsUsed(item); list.AddRange(new string[] diff --git a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs index a2f07d952..27bc5f038 100644 --- a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs @@ -17,17 +17,17 @@ namespace MediaBrowser.XbmcMetadata.Savers { public class SeriesNfoSaver : BaseNfoSaver { - protected override string GetLocalSavePath(IHasMetadata item) + protected override string GetLocalSavePath(BaseItem item) { return Path.Combine(item.Path, "tvshow.nfo"); } - protected override string GetRootElementName(IHasMetadata item) + protected override string GetRootElementName(BaseItem item) { return "tvshow"; } - public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) + public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) { if (!item.SupportsLocalMetadata) { @@ -37,7 +37,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return item is Series && updateType >= MinimumUpdateType; } - protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer) + protected override void WriteCustomElements(BaseItem item, XmlWriter writer) { var series = (Series)item; @@ -71,7 +71,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - protected override List<string> GetTagsUsed(IHasMetadata item) + protected override List<string> GetTagsUsed(BaseItem item) { var list = base.GetTagsUsed(item); list.AddRange(new string[] @@ -80,7 +80,8 @@ namespace MediaBrowser.XbmcMetadata.Savers "episodeguide", "season", "episode", - "status" + "status", + "displayorder" }); return list; } diff --git a/MediaBrowser.XbmcMetadata/packages.config b/MediaBrowser.XbmcMetadata/packages.config deleted file mode 100644 index 6b8deb9c9..000000000 --- a/MediaBrowser.XbmcMetadata/packages.config +++ /dev/null @@ -1,3 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<packages> -</packages>
\ No newline at end of file |
