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/Savers | |
| parent | c32d8656382a0eacb301692e0084377fc433ae9b (diff) | |
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'MediaBrowser.LocalMetadata/Savers')
| -rw-r--r-- | MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs | 241 | ||||
| -rw-r--r-- | MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs | 60 | ||||
| -rw-r--r-- | MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs | 18 | ||||
| -rw-r--r-- | MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs | 21 | ||||
| -rw-r--r-- | MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs | 31 |
6 files changed, 61 insertions, 316 deletions
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) |
