/// <summary> /// Fetches the specified item. /// </summary> /// <param name="item">The item.</param> /// <param name="userDataList">The user data list.</param> /// <param name="metadataFile">The metadata file.</param> /// <param name="settings">The settings.</param> /// <param name="cancellationToken">The cancellation token.</param> private void Fetch(T item, List <UserItemData> userDataList, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) { using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { // Use XmlReader for best performance using (var reader = XmlReader.Create(streamReader, settings)) { reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item, userDataList); } } } } }
/// <summary> /// Fetches the specified item. /// </summary> /// <param name="item">The item.</param> /// <param name="userDataList">The user data list.</param> /// <param name="metadataFile">The metadata file.</param> /// <param name="settings">The settings.</param> /// <param name="cancellationToken">The cancellation token.</param> private void Fetch(T item, List <UserItemData> userDataList, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) { if (!SupportsUrlAfterClosingXmlTag) { using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { // Use XmlReader for best performance using (var reader = XmlReader.Create(streamReader, settings)) { reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item, userDataList); } } } } return; } using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { // 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) { var endingXml = xml.Substring(index); var imdbId = endingXml.Split('/') .FirstOrDefault(i => i.StartsWith("tt", StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrWhiteSpace(imdbId)) { item.SetProviderId(MetadataProviders.Imdb, imdbId); } // If the file is just an imdb url, don't go any further if (index == 0) { return; } xml = xml.Substring(0, index + 1); } else { // If the file is just an Imdb url, handle that var imdbId = xml.Split('/') .FirstOrDefault(i => i.StartsWith("tt", StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrWhiteSpace(imdbId)) { item.SetProviderId(MetadataProviders.Imdb, imdbId); } return; } 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)) { reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item, userDataList); } } } } } }
/// <summary> /// Fetches the specified item. /// </summary> /// <param name="item">The item.</param> /// <param name="metadataFile">The metadata file.</param> /// <param name="settings">The settings.</param> /// <param name="cancellationToken">The cancellation token.</param> private void Fetch(MetadataResult <T> item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) { if (!SupportsUrlAfterClosingXmlTag) { using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { // Use XmlReader for best performance using (var reader = XmlReader.Create(streamReader, settings)) { item.ResetPeople(); reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item); } } } } return; } using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { item.ResetPeople(); // Need to handle a url after the xml data // http://kodi.wiki/view/NFO_files/movies var xml = streamReader.ReadToEnd(); // Find last closing Tag // Need to do this in two steps to account for random > characters after the closing xml var index = xml.LastIndexOf(@"</", StringComparison.Ordinal); // If closing tag exists, move to end of Tag if (index != -1) { index = xml.IndexOf('>', index); } if (index != -1) { var endingXml = xml.Substring(index); ParseProviderLinks(item.Item, endingXml); // If the file is just an imdb url, don't go any further if (index == 0) { return; } xml = xml.Substring(0, index + 1); } else { // If the file is just an Imdb url, handle that ParseProviderLinks(item.Item, xml); return; } using (var ms = new MemoryStream()) { var bytes = Encoding.UTF8.GetBytes(xml); ms.Write(bytes, 0, bytes.Length); ms.Position = 0; // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions try { // Use XmlReader for best performance using (var reader = XmlReader.Create(ms, settings)) { reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item); } } } } catch (XmlException) { } } } }
/// <summary> /// Fetches the specified item. /// </summary> /// <param name="item">The item.</param> /// <param name="metadataFile">The metadata file.</param> /// <param name="settings">The settings.</param> /// <param name="cancellationToken">The cancellation token.</param> private void Fetch(LocalMetadataResult <T> item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) { if (!SupportsUrlAfterClosingXmlTag) { using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { // Use XmlReader for best performance using (var reader = XmlReader.Create(streamReader, settings)) { reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item); } } } } return; } using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { // 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) { var endingXml = xml.Substring(index); ParseProviderLinks(item.Item, endingXml); // If the file is just an imdb url, don't go any further if (index == 0) { return; } xml = xml.Substring(0, index + 1); } else { // If the file is just an Imdb url, handle that ParseProviderLinks(item.Item, xml); return; } 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)) { reader.MoveToContent(); // Loop through each element while (reader.Read()) { cancellationToken.ThrowIfCancellationRequested(); if (reader.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(reader, item); } } } } } }