mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
xspeeds: code clean up (#9012)
This commit is contained in:
@@ -25,22 +25,20 @@ namespace Jackett.Common.Indexers
|
|||||||
private string LoginUrl => SiteLink + "takelogin.php";
|
private string LoginUrl => SiteLink + "takelogin.php";
|
||||||
private string GetRSSKeyUrl => SiteLink + "getrss.php";
|
private string GetRSSKeyUrl => SiteLink + "getrss.php";
|
||||||
private string SearchUrl => SiteLink + "browse.php";
|
private string SearchUrl => SiteLink + "browse.php";
|
||||||
private string RSSUrl => SiteLink + "rss.php?secret_key={0}&feedtype=download&timezone=0&showrows=50&categories=all";
|
|
||||||
private string CommentUrl => SiteLink + "details.php?id={0}";
|
|
||||||
private string DownloadUrl => SiteLink + "download.php?id={0}";
|
|
||||||
|
|
||||||
private new ConfigurationDataBasicLoginWithRSSAndDisplay configData
|
private new ConfigurationDataBasicLoginWithRSSAndDisplay configData =>
|
||||||
{
|
(ConfigurationDataBasicLoginWithRSSAndDisplay)base.configData;
|
||||||
get => (ConfigurationDataBasicLoginWithRSSAndDisplay)base.configData;
|
|
||||||
set => base.configData = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public XSpeeds(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
|
public XSpeeds(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
|
||||||
: base(id: "xspeeds",
|
: base(id: "xspeeds",
|
||||||
name: "XSpeeds",
|
name: "XSpeeds",
|
||||||
description: "XSpeeds (XS) is a Private Torrent Tracker for MOVIES / TV / GENERAL",
|
description: "XSpeeds (XS) is a Private Torrent Tracker for MOVIES / TV / GENERAL",
|
||||||
link: "https://www.xspeeds.eu/",
|
link: "https://www.xspeeds.eu/",
|
||||||
caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
|
caps: new TorznabCapabilities
|
||||||
|
{
|
||||||
|
SupportsImdbMovieSearch = true
|
||||||
|
// SupportsImdbTVSearch = true (supported by the site but disabled due to #8107)
|
||||||
|
},
|
||||||
configService: configService,
|
configService: configService,
|
||||||
client: wc,
|
client: wc,
|
||||||
logger: l,
|
logger: l,
|
||||||
@@ -51,11 +49,6 @@ namespace Jackett.Common.Indexers
|
|||||||
Language = "en-us";
|
Language = "en-us";
|
||||||
Type = "private";
|
Type = "private";
|
||||||
|
|
||||||
configData.DisplayText.Value = "Expect an initial delay (often around 10 seconds) due to XSpeeds CloudFlare DDoS protection";
|
|
||||||
configData.DisplayText.Name = "Notice";
|
|
||||||
|
|
||||||
TorznabCaps.SupportsImdbMovieSearch = true;
|
|
||||||
|
|
||||||
AddCategoryMapping(92, TorznabCatType.MoviesUHD, "4K Movies");
|
AddCategoryMapping(92, TorznabCatType.MoviesUHD, "4K Movies");
|
||||||
AddCategoryMapping(91, TorznabCatType.TVUHD, "4K TV");
|
AddCategoryMapping(91, TorznabCatType.TVUHD, "4K TV");
|
||||||
AddCategoryMapping(94, TorznabCatType.TVUHD, "4K TV Boxsets");
|
AddCategoryMapping(94, TorznabCatType.TVUHD, "4K TV Boxsets");
|
||||||
@@ -144,21 +137,17 @@ namespace Jackett.Common.Indexers
|
|||||||
var qCaptchaImg = dom.QuerySelector("img#regimage");
|
var qCaptchaImg = dom.QuerySelector("img#regimage");
|
||||||
if (qCaptchaImg != null)
|
if (qCaptchaImg != null)
|
||||||
{
|
{
|
||||||
var CaptchaUrl = qCaptchaImg.GetAttribute("src");
|
var captchaUrl = qCaptchaImg.GetAttribute("src");
|
||||||
var captchaImage = await RequestBytesWithCookies(CaptchaUrl, loginPage.Cookies, RequestType.GET, LandingUrl);
|
var captchaImageResponse = await RequestBytesWithCookies(captchaUrl, loginPage.Cookies, RequestType.GET, LandingUrl);
|
||||||
|
|
||||||
var CaptchaImage = new ImageItem { Name = "Captcha Image" };
|
var captchaText = new StringItem { Name = "Captcha Text" };
|
||||||
var CaptchaText = new StringItem { Name = "Captcha Text" };
|
var captchaImage = new ImageItem {Name = "Captcha Image", Value = captchaImageResponse.Content};
|
||||||
|
|
||||||
CaptchaImage.Value = captchaImage.Content;
|
configData.AddDynamic("CaptchaText", captchaText);
|
||||||
|
configData.AddDynamic("CaptchaImage", captchaImage);
|
||||||
configData.AddDynamic("CaptchaImage", CaptchaImage);
|
|
||||||
configData.AddDynamic("CaptchaText", CaptchaText);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
logger.Debug($"{Id}: No captcha image found");
|
||||||
logger.Debug(string.Format("{0}: No captcha image found", Id));
|
|
||||||
}
|
|
||||||
|
|
||||||
return configData;
|
return configData;
|
||||||
}
|
}
|
||||||
@@ -173,11 +162,9 @@ namespace Jackett.Common.Indexers
|
|||||||
{"password", configData.Password.Value}
|
{"password", configData.Password.Value}
|
||||||
};
|
};
|
||||||
|
|
||||||
var CaptchaText = (StringItem)configData.GetDynamic("CaptchaText");
|
var captchaText = (StringItem)configData.GetDynamic("CaptchaText");
|
||||||
if (CaptchaText != null)
|
if (captchaText != null)
|
||||||
{
|
pairs.Add("imagestring", captchaText.Value);
|
||||||
pairs.Add("imagestring", CaptchaText.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
//var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink, true);
|
//var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink, true);
|
||||||
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, SearchUrl, LandingUrl, true);
|
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, SearchUrl, LandingUrl, true);
|
||||||
@@ -221,75 +208,7 @@ namespace Jackett.Common.Indexers
|
|||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.GetQueryString();
|
var searchString = query.GetQueryString();
|
||||||
var prevCook = CookieHeader + "";
|
var prevCook = CookieHeader + "";
|
||||||
var searchStringIsImdbQuery = (ParseUtil.GetImdbID(searchString) != null);
|
|
||||||
|
|
||||||
// If we have no query use the RSS Page as their server is slow enough at times!
|
|
||||||
// ~15.01.2019 they removed the description tag making the RSS feed almost useless, we don't use it for now. See #4458
|
|
||||||
// if (false && query.IsTest || string.IsNullOrWhiteSpace(searchString))
|
|
||||||
/*
|
|
||||||
if (false)
|
|
||||||
{
|
|
||||||
var rssPage = await RequestStringWithCookiesAndRetry(string.Format(RSSUrl, configData.RSSKey.Value));
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (rssPage.Content.EndsWith("\0"))
|
|
||||||
{
|
|
||||||
rssPage.Content = rssPage.Content.Substring(0, rssPage.Content.Length - 1);
|
|
||||||
}
|
|
||||||
rssPage.Content = RemoveInvalidXmlChars(rssPage.Content);
|
|
||||||
var rssDoc = XDocument.Parse(rssPage.Content);
|
|
||||||
|
|
||||||
foreach (var item in rssDoc.Descendants("item"))
|
|
||||||
{
|
|
||||||
var title = item.Descendants("title").First().Value;
|
|
||||||
var description = item.Descendants("description").First().Value;
|
|
||||||
var link = item.Descendants("link").First().Value;
|
|
||||||
var category = item.Descendants("category").First().Value;
|
|
||||||
var date = item.Descendants("pubDate").First().Value;
|
|
||||||
|
|
||||||
var torrentIdMatch = Regex.Match(link, "(?<=id=)(\\d)*");
|
|
||||||
var torrentId = torrentIdMatch.Success ? torrentIdMatch.Value : string.Empty;
|
|
||||||
if (string.IsNullOrWhiteSpace(torrentId))
|
|
||||||
throw new Exception("Missing torrent id");
|
|
||||||
|
|
||||||
var infoMatch = Regex.Match(description, @"Category:\W(?<cat>.*)\W\/\WSeeders:\W(?<seeders>[\d\,]*)\W\/\WLeechers:\W(?<leechers>[\d\,]*)\W\/\WSize:\W(?<size>[\d\.]*\W\S*)");
|
|
||||||
if (!infoMatch.Success)
|
|
||||||
throw new Exception("Unable to find info");
|
|
||||||
|
|
||||||
var release = new ReleaseInfo
|
|
||||||
{
|
|
||||||
Title = title,
|
|
||||||
Description = title,
|
|
||||||
Guid = new Uri(string.Format(DownloadUrl, torrentId)),
|
|
||||||
Comments = new Uri(string.Format(CommentUrl, torrentId)),
|
|
||||||
PublishDate = DateTime.ParseExact(date, "yyyy-MM-dd H:mm:ss", CultureInfo.InvariantCulture), //2015-08-08 21:20:31
|
|
||||||
Link = new Uri(string.Format(DownloadUrl, torrentId)),
|
|
||||||
Seeders = ParseUtil.CoerceInt(infoMatch.Groups["seeders"].Value),
|
|
||||||
Peers = ParseUtil.CoerceInt(infoMatch.Groups["leechers"].Value),
|
|
||||||
Size = ReleaseInfo.GetBytes(infoMatch.Groups["size"].Value),
|
|
||||||
Category = MapTrackerCatToNewznab(category)
|
|
||||||
};
|
|
||||||
|
|
||||||
release.Peers += release.Seeders;
|
|
||||||
releases.Add(release);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.Error("XSpeeds: Error while parsing the RSS feed:");
|
|
||||||
logger.Error(rssPage.Content);
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
//if (query.IsTest || !string.IsNullOrWhiteSpace(searchString))
|
|
||||||
/*
|
|
||||||
if (searchString.Length < 3 && !query.IsTest)
|
|
||||||
{
|
|
||||||
OnParseError("", new Exception("Minimum search length is 3"));
|
|
||||||
return releases;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
var searchParams = new Dictionary<string, string> {
|
var searchParams = new Dictionary<string, string> {
|
||||||
{ "do", "search" },
|
{ "do", "search" },
|
||||||
{ "category", "0" },
|
{ "category", "0" },
|
||||||
@@ -304,10 +223,7 @@ namespace Jackett.Common.Indexers
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
searchParams.Add("keywords", searchString);
|
searchParams.Add("keywords", searchString);
|
||||||
if (searchStringIsImdbQuery)
|
searchParams.Add("search_type", "t_name");
|
||||||
searchParams.Add("search_type", "t_both");
|
|
||||||
else
|
|
||||||
searchParams.Add("search_type", "t_name");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var searchPage = await PostDataWithCookiesAndRetry(SearchUrl, searchParams, CookieHeader);
|
var searchPage = await PostDataWithCookiesAndRetry(SearchUrl, searchParams, CookieHeader);
|
||||||
@@ -375,10 +291,10 @@ namespace Jackett.Common.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(searchPage.Content, ex);
|
OnParseError(searchPage.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CookieHeader.Trim().Equals(prevCook.Trim()))
|
if (!CookieHeader.Trim().Equals(prevCook.Trim()))
|
||||||
{
|
|
||||||
SaveConfig();
|
SaveConfig();
|
||||||
}
|
|
||||||
return releases;
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user