diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 5a5d48ac27..a5b8082262 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -296,6 +296,16 @@ namespace MediaBrowser.Common.Implementations logger.Info("64-Bit Process: {0}", Environment.Is64BitProcess); logger.Info("Program data path: {0}", appPaths.ProgramDataPath); + Type type = Type.GetType("Mono.Runtime"); + if (type != null) + { + MethodInfo displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); + if (displayName != null) + { + logger.Info("Mono: " + displayName.Invoke(null, null)); + } + } + logger.Info("Application Path: {0}", appPaths.ApplicationPath); logger.Info("*** When reporting issues please include the entire log file. ***".ToUpper()); diff --git a/MediaBrowser.Controller/Entities/MusicVideo.cs b/MediaBrowser.Controller/Entities/MusicVideo.cs index 307117fdd4..015e4b4aee 100644 --- a/MediaBrowser.Controller/Entities/MusicVideo.cs +++ b/MediaBrowser.Controller/Entities/MusicVideo.cs @@ -46,6 +46,21 @@ namespace MediaBrowser.Controller.Entities } } + /// + /// TODO: Remove + /// + public string Artist + { + get { return Artists.FirstOrDefault(); } + set + { + if (!string.IsNullOrEmpty(value) && !Artists.Contains(value, StringComparer.OrdinalIgnoreCase)) + { + Artists.Add(value); + } + } + } + /// /// Determines whether the specified name has artist. /// diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index b4519d02de..c4a79c22d0 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -541,7 +541,6 @@ namespace MediaBrowser.Dlna public void Dispose() { - throw new NotImplementedException(); } } } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index 4344ceb0a5..75195c8c51 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -34,7 +34,7 @@ namespace MediaBrowser.Server.Implementations.Connect { LoadCachedAddress(); - _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(30), TimeSpan.FromHours(12)); + _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(10), TimeSpan.FromHours(12)); } private async void TimerCallback(object state) diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 2f2973130b..7c336f6d7a 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Common.Configuration; +using System.IO; +using System.Text; +using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -79,21 +81,42 @@ namespace MediaBrowser.XbmcMetadata.Parsers { using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { - // Use XmlReader for best performance - using (var reader = XmlReader.Create(streamReader, settings)) + // Need to handle a url after the xml data + // http://kodi.wiki/view/NFO_files/movies + + var xml = streamReader.ReadToEnd(); + + var index = xml.LastIndexOf('>'); + + if (index != -1) { - reader.MoveToContent(); + xml = xml.Substring(0, index + 1); + } - // Loop through each element - while (reader.Read()) + using (var ms = new MemoryStream()) + { + var bytes = Encoding.UTF8.GetBytes(xml); + + ms.Write(bytes, 0, bytes.Length); + ms.Position = 0; + + // Use XmlReader for best performance + using (var reader = XmlReader.Create(ms, settings)) { - cancellationToken.ThrowIfCancellationRequested(); + reader.MoveToContent(); - if (reader.NodeType == XmlNodeType.Element) + // Loop through each element + while (reader.Read()) { - FetchDataFromXmlNode(reader, item, userDataList); + cancellationToken.ThrowIfCancellationRequested(); + + if (reader.NodeType == XmlNodeType.Element) + { + FetchDataFromXmlNode(reader, item, userDataList); + } } } + } } }