Exemplo n.º 1
0
        /// <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);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        /// <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)
                    {
                    }
                }
            }
        }
Exemplo n.º 4
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }