wabbajack/Wabbajack.Lib/Downloaders/LoversLabDownloader.cs

92 lines
3.7 KiB
C#
Raw Normal View History

2019-12-08 17:00:22 +00:00
using System;
using System.Linq;
using System.Threading.Tasks;
2020-04-09 12:10:46 +00:00
using System.Web;
using HtmlAgilityPack;
using Newtonsoft.Json;
2019-12-08 17:00:22 +00:00
using Wabbajack.Common;
using Wabbajack.Common.Serialization.Json;
using Wabbajack.Lib.WebAutomation;
2019-12-08 17:00:22 +00:00
namespace Wabbajack.Lib.Downloaders
{
public class LoversLabDownloader : AbstractIPS4Downloader<LoversLabDownloader, LoversLabDownloader.State>
2019-12-08 17:00:22 +00:00
{
2019-12-20 20:51:10 +00:00
#region INeedsDownload
public override string SiteName => "Lovers Lab";
public override Uri SiteURL => new Uri("https://www.loverslab.com");
public override Uri IconUri => new Uri("https://www.loverslab.com/favicon.ico");
2019-12-20 20:51:10 +00:00
#endregion
public LoversLabDownloader() : base(new Uri("https://www.loverslab.com/login"),
"loverslabcookies", "loverslab.com")
2019-12-20 20:51:10 +00:00
{
}
protected override async Task WhileWaiting(IWebDriver browser)
2019-12-08 17:00:22 +00:00
{
try
{
await browser.EvaluateJavaScript(
"document.querySelectorAll(\".ll_adblock\").forEach(function (itm) { itm.innerHTML = \"\";});");
2019-12-08 17:00:22 +00:00
}
catch (Exception ex)
2019-12-08 17:00:22 +00:00
{
Utils.Error(ex);
2019-12-08 17:00:22 +00:00
}
}
[JsonName("LoversLabDownloader")]
public class State : State<LoversLabDownloader>
2019-12-08 17:00:22 +00:00
{
[JsonIgnore]
public override bool IsNSFW => true;
public override async Task<bool> LoadMetaData()
{
var html = await Downloader.AuthedClient.GetStringAsync(URL);
var doc = new HtmlDocument();
doc.LoadHtml(html);
var node = doc.DocumentNode;
2020-04-09 12:10:46 +00:00
Name = HttpUtility.HtmlDecode(node
.SelectNodes(
"//h1[@class='ipsType_pageTitle ipsContained_container']/span[@class='ipsType_break ipsContained']")
?.First().InnerHtml);
Author = HttpUtility.HtmlDecode(node
.SelectNodes(
"//div[@class='ipsBox_alt']/div[@class='ipsPhotoPanel ipsPhotoPanel_tiny ipsClearfix ipsSpacer_bottom']/div/p[@class='ipsType_reset ipsType_large ipsType_blendLinks']/a")
2020-04-09 12:10:46 +00:00
?.First().InnerHtml);
Version = HttpUtility.HtmlDecode(node
.SelectNodes("//section/h2[@class='ipsType_sectionHead']/span[@data-role='versionTitle']")
?
2020-04-09 12:10:46 +00:00
.First().InnerHtml);
2020-04-12 04:18:21 +00:00
var url = HttpUtility.HtmlDecode(node
.SelectNodes(
"//div[@class='ipsBox ipsSpacer_top ipsSpacer_double']/section/div[@class='ipsPad ipsAreaBackground']/div[@class='ipsCarousel ipsClearfix']/div[@class='ipsCarousel_inner']/ul[@class='cDownloadsCarousel ipsClearfix']/li[@class='ipsCarousel_item ipsAreaBackground_reset ipsPad_half']/span[@class='ipsThumb ipsThumb_medium ipsThumb_bg ipsCursor_pointer']")
2020-04-09 12:10:46 +00:00
?.First().GetAttributeValue("data-fullurl", "none"));
2020-04-12 04:18:21 +00:00
if (!string.IsNullOrWhiteSpace(url))
{
ImageURL = new Uri(url);
2020-04-09 12:10:46 +00:00
return true;
2020-04-12 04:18:21 +00:00
}
2020-04-09 12:10:46 +00:00
2020-04-12 04:18:21 +00:00
url = HttpUtility.HtmlDecode(node
2020-04-09 12:10:46 +00:00
.SelectNodes(
"//article[@class='ipsColumn ipsColumn_fluid']/div[@class='ipsPad']/section/div[@class='ipsType_richText ipsContained ipsType_break']/p/a/img[@class='ipsImage ipsImage_thumbnailed']")
?.First().GetAttributeValue("src", ""));
2020-04-23 10:38:43 +00:00
2020-04-12 04:18:21 +00:00
if (!string.IsNullOrWhiteSpace(url))
{
ImageURL = new Uri(url);
}
2020-04-09 12:10:46 +00:00
return true;
}
2019-12-08 17:00:22 +00:00
}
}
}