Jackett/src/Jackett/Indexers/Feeds/BaseNewznabIndexer.cs

50 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Jackett.Models;
using Jackett.Models.IndexerConfig;
using Jackett.Services;
using Jackett.Utils;
using Jackett.Utils.Clients;
using NLog;
namespace Jackett.Indexers
{
public abstract class BaseNewznabIndexer : BaseFeedIndexer
{
protected BaseNewznabIndexer(string name, string link, string description, IIndexerConfigurationService configService, IWebClient client, Logger logger, ConfigurationData configData, IProtectionService p, TorznabCapabilities caps = null, string downloadBase = null) : base(name, link, description, configService, client, logger, configData, p, caps, downloadBase)
{
}
protected override IEnumerable<ReleaseInfo> ParseFeedForResults(string feedContent)
{
var doc = XDocument.Parse(feedContent);
var results = doc.Descendants("item").Select((XElement item) =>
{
var attributes = item.Descendants().Where(e => e.Name.LocalName == "attr");
var release = new ReleaseInfo
{
Title = item.FirstValue("title"),
Guid = item.FirstValue("guid").ToUri(),
Link = item.FirstValue("link").ToUri(),
Comments = item.FirstValue("comments").ToUri(),
PublishDate = item.FirstValue("pubDate").ToDateTime(),
Category = new List<int> { Int32.Parse(attributes.First(e => e.Attribute("name").Value == "category").Attribute("value").Value) },
Size = Int64.Parse(attributes.First(e => e.Attribute("name").Value == "size").Attribute("value").Value),
Files = Int64.Parse(attributes.First(e => e.Attribute("name").Value == "files").Attribute("value").Value),
Description = item.FirstValue("description"),
Seeders = Int32.Parse(attributes.First(e => e.Attribute("name").Value == "seeders").Attribute("value").Value),
Peers = Int32.Parse(attributes.First(e => e.Attribute("name").Value == "peers").Attribute("value").Value),
InfoHash = attributes.First(e => e.Attribute("name").Value == "infohash").Attribute("value").Value,
MagnetUri = attributes.First(e => e.Attribute("name").Value == "magneturl").Attribute("value").Value.ToUri(),
};
return release;
});
return results;
}
}
}