aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs')
-rw-r--r--MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs131
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);
}
}
}