diff options
Diffstat (limited to 'MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs')
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs | 131 |
1 files changed, 68 insertions, 63 deletions
diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index ab71f321c..18936df01 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -18,8 +18,11 @@ using System.Linq; using System.Text; using System.Threading; using System.Xml; -using CommonIO; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.IO; using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Xml; namespace MediaBrowser.XbmcMetadata.Savers { @@ -105,9 +108,10 @@ namespace MediaBrowser.XbmcMetadata.Savers }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - protected BaseNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger) + protected BaseNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) { Logger = logger; + XmlReaderSettingsFactory = xmlReaderSettingsFactory; UserDataManager = userDataManager; UserManager = userManager; LibraryManager = libraryManager; @@ -121,6 +125,7 @@ namespace MediaBrowser.XbmcMetadata.Savers protected IUserManager UserManager { get; private set; } protected IUserDataManager UserDataManager { get; private set; } protected ILogger Logger { get; private set; } + protected IXmlReaderSettingsFactory XmlReaderSettingsFactory { get; private set; } protected ItemUpdateType MinimumUpdateType { @@ -203,32 +208,33 @@ namespace MediaBrowser.XbmcMetadata.Savers { FileSystem.CreateDirectory(Path.GetDirectoryName(path)); - var file = new FileInfo(path); + var file = FileSystem.GetFileInfo(path); var wasHidden = false; // This will fail if the file is hidden if (file.Exists) { - if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) + if (file.IsHidden) { - file.Attributes &= ~FileAttributes.Hidden; + FileSystem.SetHidden(path, false); wasHidden = true; } + if (file.IsReadOnly) + { + FileSystem.SetReadOnly(path, false); + } } - using (var filestream = FileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read)) + using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) { stream.CopyTo(filestream); } if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden) { - file.Refresh(); - - // Add back the attribute - file.Attributes |= FileAttributes.Hidden; + FileSystem.SetHidden(path, true); } } @@ -269,13 +275,13 @@ namespace MediaBrowser.XbmcMetadata.Savers try { - AddCustomTags(xmlPath, tagsUsed, writer, Logger); + AddCustomTags(xmlPath, tagsUsed, writer, Logger, FileSystem); } catch (FileNotFoundException) { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -428,7 +434,7 @@ namespace MediaBrowser.XbmcMetadata.Savers /// <returns>Task.</returns> public static void AddCommonNodes(BaseItem item, XmlWriter writer, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config) { - var writtenProviderIds = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); + var writtenProviderIds = new HashSet<string>(StringComparer.OrdinalIgnoreCase); var overview = (item.Overview ?? string.Empty) .StripHtml() @@ -483,13 +489,9 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("title", item.Name ?? string.Empty); - var hasOriginalTitle = item as IHasOriginalTitle; - if (hasOriginalTitle != null) + if (!string.IsNullOrWhiteSpace(item.OriginalTitle)) { - if (!string.IsNullOrEmpty(hasOriginalTitle.OriginalTitle)) - { - writer.WriteElementString("originaltitle", hasOriginalTitle.OriginalTitle ?? string.Empty); - } + writer.WriteElementString("originaltitle", item.OriginalTitle); } var people = libraryManager.GetPeople(item); @@ -909,17 +911,14 @@ namespace MediaBrowser.XbmcMetadata.Savers var image = item.GetImageInfo(ImageType.Primary, 0); - if (image != null && image.IsLocalFile) + if (image != null) { - writer.WriteElementString("poster", GetPathToSave(image.Path, libraryManager, config)); + writer.WriteElementString("poster", GetImagePathToSave(image, libraryManager, config)); } foreach (var backdrop in item.GetImages(ImageType.Backdrop)) { - if (backdrop.IsLocalFile) - { - writer.WriteElementString("fanart", GetPathToSave(backdrop.Path, libraryManager, config)); - } + writer.WriteElementString("fanart", GetImagePathToSave(backdrop, libraryManager, config)); } writer.WriteEndElement(); @@ -1010,9 +1009,9 @@ namespace MediaBrowser.XbmcMetadata.Savers var personEntity = libraryManager.GetPerson(person.Name); var image = personEntity.GetImageInfo(ImageType.Primary, 0); - if (image != null && image.IsLocalFile) + if (image != null) { - writer.WriteElementString("thumb", GetPathToSave(image.Path, libraryManager, config)); + writer.WriteElementString("thumb", GetImagePathToSave(image, libraryManager, config)); } } catch (Exception) @@ -1024,9 +1023,14 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - private static string GetPathToSave(string path, ILibraryManager libraryManager, IServerConfigurationManager config) + private static string GetImagePathToSave(ItemImageInfo image, ILibraryManager libraryManager, IServerConfigurationManager config) { - return libraryManager.GetPathAfterNetworkSubstitution(path); + if (!image.IsLocalFile) + { + return image.Path; + } + + return libraryManager.GetPathAfterNetworkSubstitution(image.Path); } private static bool IsPersonType(PersonInfo person, string type) @@ -1034,56 +1038,57 @@ namespace MediaBrowser.XbmcMetadata.Savers return string.Equals(person.Type, type, StringComparison.OrdinalIgnoreCase) || string.Equals(person.Role, type, StringComparison.OrdinalIgnoreCase); } - private static void AddCustomTags(string path, List<string> xmlTagsUsed, XmlWriter writer, ILogger logger) + private void AddCustomTags(string path, List<string> xmlTagsUsed, XmlWriter writer, ILogger logger, IFileSystem fileSystem) { - var settings = new XmlReaderSettings - { - CheckCharacters = false, - IgnoreProcessingInstructions = true, - IgnoreComments = true, - ValidationType = ValidationType.None - }; + var settings = XmlReaderSettingsFactory.Create(false); + + settings.CheckCharacters = false; + settings.IgnoreProcessingInstructions = true; + settings.IgnoreComments = true; - using (var streamReader = GetStreamReader(path)) + using (var fileStream = fileSystem.OpenRead(path)) { - // Use XmlReader for best performance - using (var reader = XmlReader.Create(streamReader, settings)) + using (var streamReader = new StreamReader(fileStream, Encoding.UTF8)) { - try + // Use XmlReader for best performance + using (var reader = XmlReader.Create(streamReader, settings)) { - reader.MoveToContent(); - } - catch (Exception ex) - { - logger.ErrorException("Error reading existing xml tags from {0}.", ex, path); - return; - } - - // Loop through each element - while (reader.Read()) - { - if (reader.NodeType == XmlNodeType.Element) + try { - var name = reader.Name; + reader.MoveToContent(); + } + catch (Exception ex) + { + logger.ErrorException("Error reading existing xml tags from {0}.", ex, path); + return; + } - if (!CommonTags.ContainsKey(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase)) + reader.Read(); + + // Loop through each element + while (!reader.EOF && reader.ReadState == ReadState.Interactive) + { + if (reader.NodeType == XmlNodeType.Element) { - writer.WriteNode(reader, false); + var name = reader.Name; + + if (!CommonTags.ContainsKey(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase)) + { + writer.WriteNode(reader, false); + } + else + { + reader.Skip(); + } } else { - reader.Skip(); + reader.Read(); } } } } } - - } - - public static StreamReader GetStreamReader(string path) - { - return new StreamReader(path, Encoding.UTF8); } } } |
