diff options
| author | Bond_009 <bond.009@outlook.com> | 2019-09-01 17:24:42 +0200 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2019-09-08 21:19:41 +0200 |
| commit | 3eca8b9c98e5ad0ad9cefd85f27439f05f5bd6b5 (patch) | |
| tree | 97c67e34f6dfe50ce6466ca8c6df7ac808aa6fd3 /MediaBrowser.XbmcMetadata | |
| parent | 0803a916aa0cffcbec3731036a74a8a81655b9d1 (diff) | |
Address comments
Diffstat (limited to 'MediaBrowser.XbmcMetadata')
5 files changed, 93 insertions, 56 deletions
diff --git a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj index f653270a6..1ca9e43bb 100644 --- a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj +++ b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj @@ -15,4 +15,8 @@ <GenerateDocumentationFile>true</GenerateDocumentationFile> </PropertyGroup> + <PropertyGroup> + <LangVersion>latest</LangVersion> + </PropertyGroup> + </Project> diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 091c60fc9..b8d0e6560 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -48,7 +48,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers protected virtual string MovieDbParserSearchString => "themoviedb.org/movie/"; - /// <summary> /// Fetches metadata for an item from one xml file /// </summary> diff --git a/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs index 3a32112b6..233b3cb89 100644 --- a/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs @@ -36,7 +36,7 @@ namespace MediaBrowser.XbmcMetadata.Savers /// <inheritdoc /> public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) - => !item.SupportsLocalMetadata && item is MusicAlbum && updateType >= MinimumUpdateType; + => item.SupportsLocalMetadata && item is MusicAlbum && updateType >= MinimumUpdateType; /// <inheritdoc /> protected override void WriteCustomElements(BaseItem item, XmlWriter writer) diff --git a/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs index 7808edcbc..04565ff7e 100644 --- a/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs @@ -29,7 +29,7 @@ namespace MediaBrowser.XbmcMetadata.Savers /// <inheritdoc /> public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType) - => !item.SupportsLocalMetadata && item is MusicArtist && updateType >= MinimumUpdateType; + => item.SupportsLocalMetadata && item is MusicArtist && updateType >= MinimumUpdateType; /// <inheritdoc /> protected override void WriteCustomElements(BaseItem item, XmlWriter writer) diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index ae3c5f7f9..d84bc2abb 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -29,8 +29,6 @@ namespace MediaBrowser.XbmcMetadata.Savers public const string YouTubeWatchUrl = "https://www.youtube.com/watch?v="; - private static readonly CultureInfo _usCulture = CultureInfo.ReadOnly(new CultureInfo("en-US")); - private static readonly HashSet<string> _commonTags = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "plot", @@ -100,7 +98,6 @@ namespace MediaBrowser.XbmcMetadata.Savers // filters control characters but allows only properly-formed surrogate sequences private const string _invalidXMLCharsRegex = @"(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F\uFEFF\uFFFE\uFFFF]"; - protected BaseNfoSaver( IFileSystem fileSystem, IServerConfigurationManager configurationManager, @@ -142,6 +139,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } } + /// <inheritdoc /> public string Name => SaverName; public static string SaverName => "Nfo"; @@ -164,12 +162,7 @@ namespace MediaBrowser.XbmcMetadata.Savers /// <returns><see cref="string" />.</returns> protected abstract string GetRootElementName(BaseItem item); - /// <summary> - /// Determines whether [is enabled for] [the specified item]. - /// </summary> - /// <param name="item">The item.</param> - /// <param name="updateType">Type of the update.</param> - /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns> + /// <inheritdoc /> public abstract bool IsEnabledFor(BaseItem item, ItemUpdateType updateType); protected virtual List<string> GetTagsUsed(BaseItem item) @@ -187,6 +180,7 @@ namespace MediaBrowser.XbmcMetadata.Savers return list; } + /// <inheritdoc /> public void Save(BaseItem item, CancellationToken cancellationToken) { var path = GetSavePath(item); @@ -206,6 +200,7 @@ namespace MediaBrowser.XbmcMetadata.Savers private void SaveToFile(Stream stream, string path) { Directory.CreateDirectory(Path.GetDirectoryName(path)); + // On Windows, savint the file will fail if the file is hidden or readonly FileSystem.SetAttributes(path, false, false); @@ -226,9 +221,9 @@ namespace MediaBrowser.XbmcMetadata.Savers { FileSystem.SetHidden(path, hidden); } - catch (Exception ex) + catch (IOException ex) { - Logger.LogError(ex, "Error setting hidden attribute on {path}", path); + Logger.LogError(ex, "Error setting hidden attribute on {Path}", path); } } @@ -267,7 +262,7 @@ namespace MediaBrowser.XbmcMetadata.Savers try { - AddCustomTags(xmlPath, tagsUsed, writer, Logger, FileSystem); + AddCustomTags(xmlPath, tagsUsed, writer, Logger); } catch (FileNotFoundException) { @@ -291,7 +286,7 @@ namespace MediaBrowser.XbmcMetadata.Savers protected abstract void WriteCustomElements(BaseItem item, XmlWriter writer); public static void AddMediaInfo<T>(T item, XmlWriter writer) - where T : IHasMediaSources + where T : IHasMediaSources { writer.WriteStartElement("fileinfo"); writer.WriteStartElement("streamdetails"); @@ -321,17 +316,17 @@ namespace MediaBrowser.XbmcMetadata.Savers if (stream.BitRate.HasValue) { - writer.WriteElementString("bitrate", stream.BitRate.Value.ToString(_usCulture)); + writer.WriteElementString("bitrate", stream.BitRate.Value.ToString(CultureInfo.InvariantCulture)); } if (stream.Width.HasValue) { - writer.WriteElementString("width", stream.Width.Value.ToString(_usCulture)); + writer.WriteElementString("width", stream.Width.Value.ToString(CultureInfo.InvariantCulture)); } if (stream.Height.HasValue) { - writer.WriteElementString("height", stream.Height.Value.ToString(_usCulture)); + writer.WriteElementString("height", stream.Height.Value.ToString(CultureInfo.InvariantCulture)); } if (!string.IsNullOrEmpty(stream.AspectRatio)) @@ -344,7 +339,7 @@ namespace MediaBrowser.XbmcMetadata.Savers if (framerate.HasValue) { - writer.WriteElementString("framerate", framerate.Value.ToString(_usCulture)); + writer.WriteElementString("framerate", framerate.Value.ToString(CultureInfo.InvariantCulture)); } if (!string.IsNullOrEmpty(stream.Language)) @@ -362,12 +357,12 @@ namespace MediaBrowser.XbmcMetadata.Savers if (stream.Channels.HasValue) { - writer.WriteElementString("channels", stream.Channels.Value.ToString(_usCulture)); + writer.WriteElementString("channels", stream.Channels.Value.ToString(CultureInfo.InvariantCulture)); } if (stream.SampleRate.HasValue) { - writer.WriteElementString("samplingrate", stream.SampleRate.Value.ToString(_usCulture)); + writer.WriteElementString("samplingrate", stream.SampleRate.Value.ToString(CultureInfo.InvariantCulture)); } writer.WriteElementString("default", stream.IsDefault.ToString()); @@ -380,8 +375,12 @@ namespace MediaBrowser.XbmcMetadata.Savers { var timespan = TimeSpan.FromTicks(runtimeTicks.Value); - writer.WriteElementString("duration", Math.Floor(timespan.TotalMinutes).ToString(_usCulture)); - writer.WriteElementString("durationinseconds", Math.Floor(timespan.TotalSeconds).ToString(_usCulture)); + writer.WriteElementString( + "duration", + Math.Floor(timespan.TotalMinutes).ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString( + "durationinseconds", + Math.Floor(timespan.TotalSeconds).ToString(CultureInfo.InvariantCulture)); } if (item is Video video) @@ -423,7 +422,14 @@ namespace MediaBrowser.XbmcMetadata.Savers /// Adds the common nodes. /// </summary> /// <returns>Task.</returns> - private 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); @@ -515,12 +521,12 @@ namespace MediaBrowser.XbmcMetadata.Savers if (item.CommunityRating.HasValue) { - writer.WriteElementString("rating", item.CommunityRating.Value.ToString(_usCulture)); + writer.WriteElementString("rating", item.CommunityRating.Value.ToString(CultureInfo.InvariantCulture)); } if (item.ProductionYear.HasValue) { - writer.WriteElementString("year", item.ProductionYear.Value.ToString(_usCulture)); + writer.WriteElementString("year", item.ProductionYear.Value.ToString(CultureInfo.InvariantCulture)); } var forcedSortName = item.ForcedSortName; @@ -534,13 +540,10 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("mpaa", item.OfficialRating); } - var hasAspectRatio = item as IHasAspectRatio; - if (hasAspectRatio != null) + if (item is IHasAspectRatio hasAspectRatio + && !string.IsNullOrEmpty(hasAspectRatio.AspectRatio)) { - if (!string.IsNullOrEmpty(hasAspectRatio.AspectRatio)) - { - writer.WriteElementString("aspectratio", hasAspectRatio.AspectRatio); - } + writer.WriteElementString("aspectratio", hasAspectRatio.AspectRatio); } var tmdbCollection = item.GetProviderId(MetadataProviders.TmdbCollection); @@ -562,6 +565,7 @@ namespace MediaBrowser.XbmcMetadata.Savers { writer.WriteElementString("imdbid", imdb); } + writtenProviderIds.Add(MetadataProviders.Imdb.ToString()); } @@ -598,12 +602,18 @@ namespace MediaBrowser.XbmcMetadata.Savers if (item is MusicArtist) { - writer.WriteElementString("formed", item.PremiereDate.Value.ToLocalTime().ToString(formatString)); + writer.WriteElementString( + "formed", + item.PremiereDate.Value.ToLocalTime().ToString(formatString)); } else { - writer.WriteElementString("premiered", item.PremiereDate.Value.ToLocalTime().ToString(formatString)); - writer.WriteElementString("releasedate", item.PremiereDate.Value.ToLocalTime().ToString(formatString)); + writer.WriteElementString( + "premiered", + item.PremiereDate.Value.ToLocalTime().ToString(formatString)); + writer.WriteElementString( + "releasedate", + item.PremiereDate.Value.ToLocalTime().ToString(formatString)); } } @@ -613,13 +623,17 @@ namespace MediaBrowser.XbmcMetadata.Savers { var formatString = options.ReleaseDateFormat; - writer.WriteElementString("enddate", item.EndDate.Value.ToLocalTime().ToString(formatString)); + writer.WriteElementString( + "enddate", + item.EndDate.Value.ToLocalTime().ToString(formatString)); } } if (item.CriticRating.HasValue) { - writer.WriteElementString("criticrating", item.CriticRating.Value.ToString(_usCulture)); + writer.WriteElementString( + "criticrating", + item.CriticRating.Value.ToString(CultureInfo.InvariantCulture)); } if (item is IHasDisplayOrder hasDisplayOrder) @@ -637,7 +651,9 @@ namespace MediaBrowser.XbmcMetadata.Savers { var timespan = TimeSpan.FromTicks(runTimeTicks.Value); - writer.WriteElementString("runtime", Convert.ToInt64(timespan.TotalMinutes).ToString(_usCulture)); + writer.WriteElementString( + "runtime", + Convert.ToInt64(timespan.TotalMinutes).ToString(CultureInfo.InvariantCulture)); } if (!string.IsNullOrWhiteSpace(item.Tagline)) @@ -745,9 +761,9 @@ namespace MediaBrowser.XbmcMetadata.Savers try { var tagName = GetTagForProviderKey(providerKey); - //logger.LogDebug("Verifying custom provider tagname {0}", tagName); + Logger.LogDebug("Verifying custom provider tagname {0}", tagName); XmlConvert.VerifyName(tagName); - //logger.LogDebug("Saving custom provider tagname {0}", tagName); + Logger.LogDebug("Saving custom provider tagname {0}", tagName); writer.WriteElementString(GetTagForProviderKey(providerKey), providerId); } @@ -854,29 +870,43 @@ namespace MediaBrowser.XbmcMetadata.Savers var userdata = userDataRepo.GetUserData(user, item); - writer.WriteElementString("isuserfavorite", userdata.IsFavorite.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); + writer.WriteElementString( + "isuserfavorite", + userdata.IsFavorite.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); if (userdata.Rating.HasValue) { - writer.WriteElementString("userrating", userdata.Rating.Value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); + writer.WriteElementString( + "userrating", + userdata.Rating.Value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); } if (!item.IsFolder) { - writer.WriteElementString("playcount", userdata.PlayCount.ToString(_usCulture)); - writer.WriteElementString("watched", userdata.Played.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); + writer.WriteElementString( + "playcount", + userdata.PlayCount.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString( + "watched", + userdata.Played.ToString(CultureInfo.InvariantCulture).ToLowerInvariant()); if (userdata.LastPlayedDate.HasValue) { - writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss").ToLowerInvariant()); + writer.WriteElementString( + "lastplayed", + userdata.LastPlayedDate.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss").ToLowerInvariant()); } writer.WriteStartElement("resume"); var runTimeTicks = item.RunTimeTicks ?? 0; - writer.WriteElementString("position", TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds.ToString(_usCulture)); - writer.WriteElementString("total", TimeSpan.FromTicks(runTimeTicks).TotalSeconds.ToString(_usCulture)); + writer.WriteElementString( + "position", + TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString( + "total", + TimeSpan.FromTicks(runTimeTicks).TotalSeconds.ToString(CultureInfo.InvariantCulture)); } writer.WriteEndElement(); @@ -910,7 +940,9 @@ namespace MediaBrowser.XbmcMetadata.Savers if (person.SortOrder.HasValue) { - writer.WriteElementString("sortorder", person.SortOrder.Value.ToString(_usCulture)); + writer.WriteElementString( + "sortorder", + person.SortOrder.Value.ToString(CultureInfo.InvariantCulture)); } if (saveImagePath) @@ -920,7 +952,9 @@ namespace MediaBrowser.XbmcMetadata.Savers if (image != null) { - writer.WriteElementString("thumb", GetImagePathToSave(image, libraryManager, config)); + writer.WriteElementString( + "thumb", + GetImagePathToSave(image, libraryManager, config)); } } @@ -939,11 +973,10 @@ namespace MediaBrowser.XbmcMetadata.Savers } private bool IsPersonType(PersonInfo person, string type) - { - return string.Equals(person.Type, type, StringComparison.OrdinalIgnoreCase) || string.Equals(person.Role, type, StringComparison.OrdinalIgnoreCase); - } + => 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) + private void AddCustomTags(string path, List<string> xmlTagsUsed, XmlWriter writer, ILogger logger) { var settings = new XmlReaderSettings() { @@ -963,7 +996,7 @@ namespace MediaBrowser.XbmcMetadata.Savers } catch (Exception ex) { - logger.LogError(ex, "Error reading existing xml tags from {path}.", path); + logger.LogError(ex, "Error reading existing xml tags from {Path}.", path); return; } @@ -976,7 +1009,8 @@ namespace MediaBrowser.XbmcMetadata.Savers { var name = reader.Name; - if (!_commonTags.Contains(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase)) + if (!_commonTags.Contains(name) + && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase)) { writer.WriteNode(reader, false); } |
