Files
jsmr/JSMR.Infrastructure/Scanning/EnglishVoiceWorksScanner.cs

163 lines
4.6 KiB
C#

using JSMR.Application.Common.Caching;
using JSMR.Infrastructure.Common.Locales;
using JSMR.Infrastructure.Common.SupportedLanguages;
using JSMR.Infrastructure.Http;
using System.Text.RegularExpressions;
namespace JSMR.Infrastructure.Scanning;
public partial class EnglishVoiceWorksScanner(IHtmlLoader loader, ISpamCircleCache spamCircleCache)
: VoiceWorksScanner(loader, spamCircleCache)
{
[GeneratedRegex(@"Release: (.*?)[/](\d{2})[/](\d{4})", RegexOptions.IgnoreCase, "en-US")]
private static partial Regex SalesDateRegex();
[GeneratedRegex(@"^(Early|Middle|Late)\s(.*?)\s(\d{4})", RegexOptions.IgnoreCase, "en-US")]
private static partial Regex EstimatedDateRegex();
protected override ILocale Locale => new EnglishLocale();
protected override ISupportedLanguage[] SupportedLanguages =>
[
new JapaneseLanguage(),
new EnglishLanguage(),
new AlingualLanguage()
];
protected override DateTime? GetEstimatedReleaseDate(string expectedDate)
{
if (expectedDate.Contains("販売中") || expectedDate.Contains("発売予定未定"))
return null;
Regex textRegex = EstimatedDateRegex();
MatchCollection textMatches = textRegex.Matches(expectedDate);
if (textMatches.Count == 0 || textMatches[0].Groups.Count < 4)
return null;
GroupCollection groups = textMatches[0].Groups;
int releaseYear = Convert.ToInt32(groups[3].Value);
int releaseMonth = 1;
int releaseDay = 1;
string releaseTime = groups[1].Value;
string releaseMonthText = groups[2].Value;
switch (releaseTime)
{
case "Early":
releaseDay = 1;
break;
case "Middle":
releaseDay = 11;
break;
case "Late":
releaseDay = 21;
break;
}
switch (releaseMonthText)
{
case "Jan.":
releaseMonth = 1;
break;
case "Feb.":
releaseMonth = 2;
break;
case "Mar.":
releaseMonth = 3;
break;
case "Apr.":
releaseMonth = 4;
break;
case "May.":
releaseMonth = 5;
break;
case "Jun.":
releaseMonth = 6;
break;
case "Jul.":
releaseMonth = 7;
break;
case "Aug.":
releaseMonth = 8;
break;
case "Sep.":
releaseMonth = 9;
break;
case "Oct.":
releaseMonth = 10;
break;
case "Nov.":
releaseMonth = 11;
break;
case "Dec.":
releaseMonth = 12;
break;
}
return new DateTime(releaseYear, releaseMonth, releaseDay);
}
protected override DateTime? GetSalesDate(string salesDate)
{
Regex textRegex = SalesDateRegex();
MatchCollection textMatches = textRegex.Matches(salesDate);
if (textMatches.Count == 0 || textMatches[0].Groups.Count < 4)
return null;
string month = textMatches[0].Groups[1].Value;
int releaseMonth = -1;
switch (month)
{
case "Jan":
releaseMonth = 1;
break;
case "Feb":
releaseMonth = 2;
break;
case "Mar":
releaseMonth = 3;
break;
case "Apr":
releaseMonth = 4;
break;
case "May":
releaseMonth = 5;
break;
case "Jun":
releaseMonth = 6;
break;
case "Jul":
releaseMonth = 7;
break;
case "Aug":
releaseMonth = 8;
break;
case "Sep":
releaseMonth = 9;
break;
case "Oct":
releaseMonth = 10;
break;
case "Nov":
releaseMonth = 11;
break;
case "Dec":
releaseMonth = 12;
break;
}
if (releaseMonth == -1)
return null;
int releaseYear = Convert.ToInt32(textMatches[0].Groups[3].Value);
int releaseDay = Convert.ToInt32(textMatches[0].Groups[2].Value);
return new DateTime(releaseYear, releaseMonth, releaseDay);
}
}