Skip to content

Commit f3b890d

Browse files
committed
update parsers to use *OrThrow ext method to avoid null exception
1 parent ee2d0d1 commit f3b890d

File tree

102 files changed

+479
-500
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+479
-500
lines changed

Core/Configuration/CustomConfig.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ public class CustomConfig
44
{
55
public V2PHConfig V2PH { get; set; } = null!;
66
public GoFileConfig GoFile { get; set; } = null!;
7-
8-
private CustomConfig()
9-
{
10-
11-
}
127

138
public static CustomConfig New()
149
{

Core/SiteParsing/HtmlParsers/ArcaParser.cs

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,25 @@ public ArcaParser(WebDriver driver, ApiClientManager clientManager, Dictionary<s
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var dirName = soup.SelectSingleNode("//div[@class='title']").InnerText;
24-
var mainTag = soup.SelectSingleNode("//div[@class='fr-view article-content']");
23+
var dirName = soup.SelectSingleNodeOrThrow("//div[@class='title']").InnerText;
24+
var mainTag = soup.SelectSingleNodeOrThrow("//div[@class='fr-view article-content']");
2525

2626
var images = new List<StringImageLinkWrapper>();
27-
var imgNodes = mainTag.SelectNodes(".//img");
28-
if(imgNodes is not null)
29-
{
30-
var imageList = mainTag.SelectNodes(".//img").GetSrcs();
31-
var imgs = imageList
32-
.Select(image => image.Split("?")[0] + "?type=orig") // Remove query string and add type=orig
33-
.Select(img => !img.Contains(Protocol) ? Protocol + img : img) // Add protocol if missing
34-
.Select(dummy => (StringImageLinkWrapper)dummy) // Convert to StringImageLinkWrapper
35-
.ToList();
36-
images.AddRange(imgs);
37-
}
27+
var imageList = mainTag.SelectNodesSafe(".//img").GetSrcs();
28+
var imgs = imageList
29+
.Select(image => image.Split("?")[0] + "?type=orig") // Remove query string and add type=orig
30+
.Select(img => !img.Contains(Protocol) ? Protocol + img : img) // Add protocol if missing
31+
.Select(dummy => (StringImageLinkWrapper)dummy) // Convert to StringImageLinkWrapper
32+
.ToList();
33+
images.AddRange(imgs);
3834

39-
var videoNodes = mainTag.SelectNodes(".//video");
40-
if(videoNodes is not null)
41-
{
42-
var videoList = mainTag.SelectNodes(".//video").GetSrcs();
43-
var videos = videoList
44-
.Select(video => !video.Contains(Protocol) ? Protocol + video : video)
45-
.Select(dummy => (StringImageLinkWrapper)dummy)
46-
.ToList();
47-
images.AddRange(videos);
48-
}
35+
var videoList = mainTag.SelectNodesSafe(".//video").GetSrcs();
36+
var videos = videoList
37+
.Select(video => !video.Contains(Protocol) ? Protocol + video : video)
38+
.Select(dummy => (StringImageLinkWrapper)dummy)
39+
.ToList();
40+
images.AddRange(videos);
41+
4942

5043
return RipInfo.FromUrlList(images, dirName, FilenameScheme);
5144
}

Core/SiteParsing/HtmlParsers/ArtstationParser.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Text.Json.Nodes;
55
using Core.DataStructures;
66
using Core.Enums;
7+
using Core.ExtensionMethods;
78
using Core.Managers;
89
using Serilog;
910
using WebDriver = Core.Driver.WebDriver;
@@ -24,9 +25,9 @@ public ArtstationParser(WebDriver driver, ApiClientManager clientManager, Dictio
2425
public override async Task<RipInfo> Parse()
2526
{
2627
var soup = await Soupify();
27-
var dirName = soup.SelectSingleNode("//h1[@class='artist-name']").InnerText;
28+
var dirName = soup.SelectSingleNodeOrThrow("//h1[@class='artist-name']").InnerText;
2829
var username = CurrentUrl.Split("/")[3];
29-
var cacheScript = soup.SelectSingleNode("//div[@class='wrapper-main']").SelectNodes(".//script")[1].InnerText;
30+
var cacheScript = soup.SelectSingleNodeOrThrow("//div[@class='wrapper-main']").SelectNodesOrThrow(".//script")[1].InnerText;
3031

3132
#region Id Extraction
3233

@@ -97,7 +98,7 @@ public override async Task<RipInfo> Parse()
9798
var responseData = await response.Content.ReadFromJsonAsync<JsonNode>();
9899
var assets = responseData!["assets"]!.AsArray();
99100
var urls = assets.Select(asset => asset!["image_url"]!.Deserialize<string>()!.Replace("/large/", "/4k/"));
100-
images.AddRange(urls.Select(url => (StringImageLinkWrapper)url));
101+
images.AddRange(urls.ToStringImageLinks());
101102
}
102103

103104
#endregion

Core/SiteParsing/HtmlParsers/BabeCentrumParser.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ public BabeCentrumParser(WebDriver driver, ApiClientManager clientManager, Dicti
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var dirName = soup.SelectSingleNode("//h1[@class='pageHeading']")
24-
.SelectNodes(".//cufontext")
23+
var dirName = soup.SelectSingleNodeOrThrow("//h1[@class='pageHeading']")
24+
.SelectNodesOrThrow(".//cufontext")
2525
.Select(w => w.InnerText)
2626
.Join(" ")
2727
.Trim();
28-
var images = soup.SelectSingleNode("//table")
29-
.SelectNodes(".//img")
28+
var images = soup.SelectSingleNodeOrThrow("//table")
29+
.SelectNodesOrThrow(".//img")
3030
.Select(img => Protocol + img.GetAttributeValue("src", "").Remove("tn_"))
3131
.Select(dummy => (StringImageLinkWrapper)dummy)
3232
.ToList();

Core/SiteParsing/HtmlParsers/BabeImpactParser.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,27 @@ public BabeImpactParser(WebDriver driver, ApiClientManager clientManager, Dictio
2121
public override async Task<RipInfo> Parse()
2222
{
2323
var soup = await Soupify();
24-
var title = soup.SelectSingleNode("//h1[@class='blockheader pink center lowercase']").InnerText;
25-
var sponsor = soup.SelectSingleNode("//div[@class='c']")
26-
.SelectNodes(".//a")[1]
24+
var title = soup.SelectSingleNodeOrThrow("//h1[@class='blockheader pink center lowercase']").InnerText;
25+
var sponsor = soup.SelectSingleNodeOrThrow("//div[@class='c']")
26+
.SelectNodesOrThrow(".//a")[1]
2727
.InnerText
2828
.Trim();
2929
sponsor = $"({sponsor})";
3030
var dirName = $"{sponsor} {title}";
31-
var tags = soup.SelectNodes("//div[@class='list gallery']");
31+
var tags = soup.SelectNodesOrThrow("//div[@class='list gallery']");
3232
var tagList = new List<HtmlNode>();
3333
foreach (var tag in tags)
3434
{
35-
tagList.AddRange(tag.SelectNodes(".//div[@class='item']"));
35+
tagList.AddRange(tag.SelectNodesOrThrow(".//div[@class='item']"));
3636
}
3737

3838
var images = new List<StringImageLinkWrapper>();
39-
var imageList = tagList.Select(tag => tag.SelectSingleNode(".//a")).Select(anchor => $"https://babeimpact.com{anchor.GetHref()}").ToList();
39+
var imageList = tagList.Select(tag => tag.SelectSingleNodeOrThrow(".//a")).Select(anchor => $"https://babeimpact.com{anchor.GetHref()}").ToList();
4040
foreach (var image in imageList)
4141
{
4242
soup = await Soupify(image);
43-
var img = soup.SelectSingleNode("//div[@class='image-wrapper']")
44-
.SelectSingleNode(".//img")
43+
var img = soup.SelectSingleNodeOrThrow("//div[@class='image-wrapper']")
44+
.SelectSingleNodeOrThrow(".//img")
4545
.GetSrc();
4646
images.Add((StringImageLinkWrapper)(Protocol + img));
4747
}

Core/SiteParsing/HtmlParsers/BabeUniversumParser.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ public BabeUniversumParser(WebDriver driver, ApiClientManager clientManager, Dic
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var dirName = soup.SelectSingleNode("//div[@class='title']")
24-
.SelectSingleNode(".//h1")
23+
var dirName = soup.SelectSingleNodeOrThrow("//div[@class='title']")
24+
.SelectSingleNodeOrThrow(".//h1")
2525
.InnerText;
26-
var images = soup.SelectSingleNode("//div[@class='three-column']")
27-
.SelectNodes(".//div[@class='thumbnail']")
28-
.Select(img => Protocol + img.SelectSingleNode(".//img").GetSrc().Remove("tn_"))
26+
var images = soup.SelectSingleNodeOrThrow("//div[@class='three-column']")
27+
.SelectNodesOrThrow(".//div[@class='thumbnail']")
28+
.Select(img => Protocol + img.SelectSingleNodeOrThrow(".//img").GetSrc().Remove("tn_"))
2929
.Select(dummy => (StringImageLinkWrapper)dummy)
3030
.ToList();
3131

Core/SiteParsing/HtmlParsers/BabesAndBitchesParser.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ public BabesAndBitchesParser(WebDriver driver, ApiClientManager clientManager, D
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var dirName = soup.SelectSingleNode("//h1[@id='title']")
23+
var dirName = soup.SelectSingleNodeOrThrow("//h1[@id='title']")
2424
.InnerText
2525
.Split("picture")[0]
2626
.Trim();
27-
var images = soup.SelectNodes("//a[@class='gallery-thumb']")
28-
.Select(img => Protocol + img.SelectSingleNode(".//img").GetSrc().Remove("tn_"))
27+
var images = soup.SelectNodesOrThrow("//a[@class='gallery-thumb']")
28+
.Select(img => Protocol + img.SelectSingleNodeOrThrow(".//img").GetSrc().Remove("tn_"))
2929
.ToStringImageLinkWrapperList();
3030

3131
return RipInfo.FromUrlList(images, dirName, FilenameScheme);

Core/SiteParsing/HtmlParsers/BabesAndGirlsParser.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ public BabesAndGirlsParser(WebDriver driver, ApiClientManager clientManager, Dic
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var dirName = soup.SelectSingleNode("//h1[@class='title']")
23+
var dirName = soup.SelectSingleNodeOrThrow("//h1[@class='title']")
2424
.InnerText;
25-
var images = soup.SelectSingleNode("//div[@class='block-post album-item']")
26-
.SelectNodes(".//a[@class='item-post']")
27-
.Select(img => Protocol + img.SelectSingleNode(".//img").GetSrc().Remove("tn_"))
25+
var images = soup.SelectSingleNodeOrThrow("//div[@class='block-post album-item']")
26+
.SelectNodesOrThrow(".//a[@class='item-post']")
27+
.Select(img => Protocol + img.SelectSingleNodeOrThrow(".//img").GetSrc().Remove("tn_"))
2828
.ToStringImageLinkWrapperList();
2929

3030
return RipInfo.FromUrlList(images, dirName, FilenameScheme);

Core/SiteParsing/HtmlParsers/BabesMachineParser.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ public BabesMachineParser(WebDriver driver, ApiClientManager clientManager, Dict
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var gallery = soup.SelectSingleNode("//div[@id='gallery']");
24-
var dirName = gallery.SelectSingleNode(".//h2")
25-
.SelectSingleNode(".//a")
23+
var gallery = soup.SelectSingleNodeOrThrow("//div[@id='gallery']");
24+
var dirName = gallery.SelectSingleNodeOrThrow(".//h2")
25+
.SelectSingleNodeOrThrow(".//a")
2626
.InnerText;
27-
var images = gallery.SelectSingleNode(".//table").SelectNodes(".//tr")
28-
.Select(img => img.SelectSingleNode(".//img").GetSrc().Remove("tn_"))
27+
var images = gallery.SelectSingleNodeOrThrow(".//table").SelectNodesOrThrow(".//tr")
28+
.Select(img => img.SelectSingleNodeOrThrow(".//img").GetSrc().Remove("tn_"))
2929
.Select(img => Protocol + img)
3030
.ToStringImageLinkWrapperList();
3131

Core/SiteParsing/HtmlParsers/BestPrettyGirlParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public BestPrettyGirlParser(WebDriver driver, ApiClientManager clientManager, Di
2020
public override async Task<RipInfo> Parse()
2121
{
2222
var soup = await Soupify();
23-
var dirName = soup.SelectSingleNode("//h1[@class='elementor-heading-title elementor-size-large']").InnerText;
24-
var images = soup.SelectNodes("//img[@class='aligncenter size-full']")
23+
var dirName = soup.SelectSingleNodeOrThrow("//h1[@class='elementor-heading-title elementor-size-large']").InnerText;
24+
var images = soup.SelectNodesOrThrow("//img[@class='aligncenter size-full']")
2525
.Select(img => img.GetSrc())
2626
.Select(dummy => (StringImageLinkWrapper)dummy)
2727
.ToList();

0 commit comments

Comments
 (0)