mirror of
https://github.com/C9Glax/tranga.git
synced 2025-02-23 15:50:13 +01:00
#77 Added field releaseStatus to Manga
This commit is contained in:
parent
425cf7e0d6
commit
6adbda2359
@ -28,6 +28,15 @@ public struct Manga
|
|||||||
public string? originalLanguage { get; }
|
public string? originalLanguage { get; }
|
||||||
// ReSharper disable twice MemberCanBePrivate.Global
|
// ReSharper disable twice MemberCanBePrivate.Global
|
||||||
public string status { get; }
|
public string status { get; }
|
||||||
|
public ReleaseStatusByte releaseStatus { get; }
|
||||||
|
public enum ReleaseStatusByte : byte
|
||||||
|
{
|
||||||
|
Continuing = 0,
|
||||||
|
Completed = 1,
|
||||||
|
OnHiatus = 2,
|
||||||
|
Cancelled = 3,
|
||||||
|
Unreleased = 4
|
||||||
|
};
|
||||||
public string folderName { get; private set; }
|
public string folderName { get; private set; }
|
||||||
public string publicationId { get; }
|
public string publicationId { get; }
|
||||||
public string internalId { get; }
|
public string internalId { get; }
|
||||||
@ -38,7 +47,7 @@ public struct Manga
|
|||||||
private static readonly Regex LegalCharacters = new (@"[A-Z]*[a-z]*[0-9]* *\.*-*,*'*\'*\)*\(*~*!*");
|
private static readonly Regex LegalCharacters = new (@"[A-Z]*[a-z]*[0-9]* *\.*-*,*'*\'*\)*\(*~*!*");
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public Manga(string sortName, List<string> authors, string? description, Dictionary<string,string> altTitles, string[] tags, string? coverUrl, string? coverFileNameInCache, Dictionary<string,string>? links, int? year, string? originalLanguage, string status, string publicationId, string? folderName = null, float? ignoreChaptersBelow = 0)
|
public Manga(string sortName, List<string> authors, string? description, Dictionary<string,string> altTitles, string[] tags, string? coverUrl, string? coverFileNameInCache, Dictionary<string,string>? links, int? year, string? originalLanguage, string status, string publicationId, ReleaseStatusByte releaseStatus = 0, string? folderName = null, float? ignoreChaptersBelow = 0)
|
||||||
{
|
{
|
||||||
this.sortName = sortName;
|
this.sortName = sortName;
|
||||||
this.authors = authors;
|
this.authors = authors;
|
||||||
@ -60,6 +69,7 @@ public struct Manga
|
|||||||
this.ignoreChaptersBelow = ignoreChaptersBelow ?? 0f;
|
this.ignoreChaptersBelow = ignoreChaptersBelow ?? 0f;
|
||||||
this.latestChapterDownloaded = 0;
|
this.latestChapterDownloaded = 0;
|
||||||
this.latestChapterAvailable = 0;
|
this.latestChapterAvailable = 0;
|
||||||
|
this.releaseStatus = releaseStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
@ -102,9 +102,18 @@ public class Bato : MangaConnector
|
|||||||
|
|
||||||
string status = document.DocumentNode.SelectSingleNode("//span[text()='Original Publication:']/..")
|
string status = document.DocumentNode.SelectSingleNode("//span[text()='Original Publication:']/..")
|
||||||
.ChildNodes[2].InnerText;
|
.ChildNodes[2].InnerText;
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "ongoing": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
case "completed": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
case "hiatus": releaseStatus = Manga.ReleaseStatusByte.OnHiatus; break;
|
||||||
|
case "cancelled": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "pending": releaseStatus = Manga.ReleaseStatusByte.Unreleased; break;
|
||||||
|
}
|
||||||
|
|
||||||
Manga manga = new (sortName, authors, description, altTitles, tags, posterUrl, coverFileNameInCache, new Dictionary<string, string>(),
|
Manga manga = new (sortName, authors, description, altTitles, tags, posterUrl, coverFileNameInCache, new Dictionary<string, string>(),
|
||||||
year, originalLanguage, status, publicationId);
|
year, originalLanguage, status, publicationId, releaseStatus);
|
||||||
cachedPublications.Add(manga);
|
cachedPublications.Add(manga);
|
||||||
return manga;
|
return manga;
|
||||||
}
|
}
|
||||||
|
@ -170,6 +170,14 @@ public class MangaDex : MangaConnector
|
|||||||
if(!attributes.ContainsKey("status"))
|
if(!attributes.ContainsKey("status"))
|
||||||
return null;
|
return null;
|
||||||
string status = attributes["status"]!.GetValue<string>();
|
string status = attributes["status"]!.GetValue<string>();
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "ongoing": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
case "completed": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
case "hiatus": releaseStatus = Manga.ReleaseStatusByte.OnHiatus; break;
|
||||||
|
case "cancelled": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
}
|
||||||
|
|
||||||
Manga pub = new(
|
Manga pub = new(
|
||||||
title,
|
title,
|
||||||
@ -183,7 +191,8 @@ public class MangaDex : MangaConnector
|
|||||||
year,
|
year,
|
||||||
originalLanguage,
|
originalLanguage,
|
||||||
status,
|
status,
|
||||||
publicationId
|
publicationId,
|
||||||
|
releaseStatus
|
||||||
);
|
);
|
||||||
cachedPublications.Add(pub);
|
cachedPublications.Add(pub);
|
||||||
return pub;
|
return pub;
|
||||||
|
@ -87,6 +87,7 @@ public class MangaKatana : MangaConnector
|
|||||||
HashSet<string> tags = new();
|
HashSet<string> tags = new();
|
||||||
string[] authors = Array.Empty<string>();
|
string[] authors = Array.Empty<string>();
|
||||||
string originalLanguage = "";
|
string originalLanguage = "";
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
|
||||||
HtmlNode infoNode = document.DocumentNode.SelectSingleNode("//*[@id='single_book']");
|
HtmlNode infoNode = document.DocumentNode.SelectSingleNode("//*[@id='single_book']");
|
||||||
string sortName = infoNode.Descendants("h1").First(n => n.HasClass("heading")).InnerText;
|
string sortName = infoNode.Descendants("h1").First(n => n.HasClass("heading")).InnerText;
|
||||||
@ -110,6 +111,11 @@ public class MangaKatana : MangaConnector
|
|||||||
break;
|
break;
|
||||||
case "status":
|
case "status":
|
||||||
status = value;
|
status = value;
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "ongoing": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
case "completed": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "genres":
|
case "genres":
|
||||||
tags = row.SelectNodes("div").Last().Descendants("a").Select(a => a.InnerText).ToHashSet();
|
tags = row.SelectNodes("div").Last().Descendants("a").Select(a => a.InnerText).ToHashSet();
|
||||||
@ -136,7 +142,7 @@ public class MangaKatana : MangaConnector
|
|||||||
}
|
}
|
||||||
|
|
||||||
Manga manga = new (sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl, coverFileNameInCache, links,
|
Manga manga = new (sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl, coverFileNameInCache, links,
|
||||||
year, originalLanguage, status, publicationId);
|
year, originalLanguage, status, publicationId, releaseStatus);
|
||||||
cachedPublications.Add(manga);
|
cachedPublications.Add(manga);
|
||||||
return manga;
|
return manga;
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,7 @@ public class MangaLife : MangaConnector
|
|||||||
string originalLanguage = "", status = "";
|
string originalLanguage = "", status = "";
|
||||||
Dictionary<string, string> altTitles = new(), links = new();
|
Dictionary<string, string> altTitles = new(), links = new();
|
||||||
HashSet<string> tags = new();
|
HashSet<string> tags = new();
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
|
||||||
HtmlNode posterNode = document.DocumentNode.SelectSingleNode("//div[@class='BoxBody']//div[@class='row']//img");
|
HtmlNode posterNode = document.DocumentNode.SelectSingleNode("//div[@class='BoxBody']//div[@class='row']//img");
|
||||||
string posterUrl = posterNode.GetAttributeValue("src", "");
|
string posterUrl = posterNode.GetAttributeValue("src", "");
|
||||||
@ -104,6 +105,14 @@ public class MangaLife : MangaConnector
|
|||||||
foreach (HtmlNode statusNode in statusNodes)
|
foreach (HtmlNode statusNode in statusNodes)
|
||||||
if (statusNode.InnerText.Contains("publish", StringComparison.CurrentCultureIgnoreCase))
|
if (statusNode.InnerText.Contains("publish", StringComparison.CurrentCultureIgnoreCase))
|
||||||
status = statusNode.InnerText.Split(' ')[0];
|
status = statusNode.InnerText.Split(' ')[0];
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "cancelled": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "hiatus": releaseStatus = Manga.ReleaseStatusByte.OnHiatus; break;
|
||||||
|
case "discontinued": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "complete": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
case "ongoing": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
}
|
||||||
|
|
||||||
HtmlNode descriptionNode = document.DocumentNode
|
HtmlNode descriptionNode = document.DocumentNode
|
||||||
.SelectNodes("//div[@class='BoxBody']//div[@class='row']//span[text()='Description:']/..")
|
.SelectNodes("//div[@class='BoxBody']//div[@class='row']//span[text()='Description:']/..")
|
||||||
@ -111,8 +120,7 @@ public class MangaLife : MangaConnector
|
|||||||
string description = descriptionNode.InnerText;
|
string description = descriptionNode.InnerText;
|
||||||
|
|
||||||
Manga manga = new(sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl,
|
Manga manga = new(sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl,
|
||||||
coverFileNameInCache, links,
|
coverFileNameInCache, links, year, originalLanguage, status, publicationId, releaseStatus);
|
||||||
year, originalLanguage, status, publicationId);
|
|
||||||
cachedPublications.Add(manga);
|
cachedPublications.Add(manga);
|
||||||
return manga;
|
return manga;
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,7 @@ public class Manganato : MangaConnector
|
|||||||
HashSet<string> tags = new();
|
HashSet<string> tags = new();
|
||||||
string[] authors = Array.Empty<string>();
|
string[] authors = Array.Empty<string>();
|
||||||
string originalLanguage = "";
|
string originalLanguage = "";
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
|
||||||
HtmlNode infoNode = document.DocumentNode.Descendants("div").First(d => d.HasClass("story-info-right"));
|
HtmlNode infoNode = document.DocumentNode.Descendants("div").First(d => d.HasClass("story-info-right"));
|
||||||
|
|
||||||
@ -99,6 +100,11 @@ public class Manganato : MangaConnector
|
|||||||
break;
|
break;
|
||||||
case "status":
|
case "status":
|
||||||
status = value;
|
status = value;
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "ongoing": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
case "completed": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "genres":
|
case "genres":
|
||||||
string[] genres = value.Split(" - ");
|
string[] genres = value.Split(" - ");
|
||||||
@ -122,7 +128,7 @@ public class Manganato : MangaConnector
|
|||||||
int year = Convert.ToInt32(yearString.Split(',')[^1]) + 2000;
|
int year = Convert.ToInt32(yearString.Split(',')[^1]) + 2000;
|
||||||
|
|
||||||
Manga manga = new (sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl, coverFileNameInCache, links,
|
Manga manga = new (sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl, coverFileNameInCache, links,
|
||||||
year, originalLanguage, status, publicationId);
|
year, originalLanguage, status, publicationId, releaseStatus);
|
||||||
cachedPublications.Add(manga);
|
cachedPublications.Add(manga);
|
||||||
return manga;
|
return manga;
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,7 @@ public class Mangasee : MangaConnector
|
|||||||
string originalLanguage = "", status = "";
|
string originalLanguage = "", status = "";
|
||||||
Dictionary<string, string> altTitles = new(), links = new();
|
Dictionary<string, string> altTitles = new(), links = new();
|
||||||
HashSet<string> tags = new();
|
HashSet<string> tags = new();
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
|
||||||
HtmlNode posterNode = document.DocumentNode.SelectSingleNode("//div[@class='BoxBody']//div[@class='row']//img");
|
HtmlNode posterNode = document.DocumentNode.SelectSingleNode("//div[@class='BoxBody']//div[@class='row']//img");
|
||||||
string posterUrl = posterNode.GetAttributeValue("src", "");
|
string posterUrl = posterNode.GetAttributeValue("src", "");
|
||||||
@ -159,6 +160,14 @@ public class Mangasee : MangaConnector
|
|||||||
foreach (HtmlNode statusNode in statusNodes)
|
foreach (HtmlNode statusNode in statusNodes)
|
||||||
if (statusNode.InnerText.Contains("publish", StringComparison.CurrentCultureIgnoreCase))
|
if (statusNode.InnerText.Contains("publish", StringComparison.CurrentCultureIgnoreCase))
|
||||||
status = statusNode.InnerText.Split(' ')[0];
|
status = statusNode.InnerText.Split(' ')[0];
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "cancelled": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "hiatus": releaseStatus = Manga.ReleaseStatusByte.OnHiatus; break;
|
||||||
|
case "discontinued": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "complete": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
case "ongoing": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
}
|
||||||
|
|
||||||
HtmlNode descriptionNode = document.DocumentNode
|
HtmlNode descriptionNode = document.DocumentNode
|
||||||
.SelectNodes("//div[@class='BoxBody']//div[@class='row']//span[text()='Description:']/..")
|
.SelectNodes("//div[@class='BoxBody']//div[@class='row']//span[text()='Description:']/..")
|
||||||
@ -167,7 +176,7 @@ public class Mangasee : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new(sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl,
|
Manga manga = new(sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl,
|
||||||
coverFileNameInCache, links,
|
coverFileNameInCache, links,
|
||||||
year, originalLanguage, status, publicationId);
|
year, originalLanguage, status, publicationId, releaseStatus);
|
||||||
cachedPublications.Add(manga);
|
cachedPublications.Add(manga);
|
||||||
return manga;
|
return manga;
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,7 @@ public class Mangaworld: MangaConnector
|
|||||||
Dictionary<string, string> altTitles = new();
|
Dictionary<string, string> altTitles = new();
|
||||||
Dictionary<string, string>? links = null;
|
Dictionary<string, string>? links = null;
|
||||||
string originalLanguage = "";
|
string originalLanguage = "";
|
||||||
|
Manga.ReleaseStatusByte releaseStatus = Manga.ReleaseStatusByte.Unreleased;
|
||||||
|
|
||||||
HtmlNode infoNode = document.DocumentNode.Descendants("div").First(d => d.HasClass("info"));
|
HtmlNode infoNode = document.DocumentNode.Descendants("div").First(d => d.HasClass("info"));
|
||||||
|
|
||||||
@ -94,6 +95,15 @@ public class Mangaworld: MangaConnector
|
|||||||
string[] authors = new[] { authorsNode.SelectNodes("a").First().InnerText };
|
string[] authors = new[] { authorsNode.SelectNodes("a").First().InnerText };
|
||||||
|
|
||||||
string status = metadata.SelectSingleNode("//span[text()='Stato: ']/..").SelectNodes("a").First().InnerText;
|
string status = metadata.SelectSingleNode("//span[text()='Stato: ']/..").SelectNodes("a").First().InnerText;
|
||||||
|
// ReSharper disable 5 times StringLiteralTypo
|
||||||
|
switch (status.ToLower())
|
||||||
|
{
|
||||||
|
case "cancellato": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "in pausa": releaseStatus = Manga.ReleaseStatusByte.OnHiatus; break;
|
||||||
|
case "droppato": releaseStatus = Manga.ReleaseStatusByte.Cancelled; break;
|
||||||
|
case "finito": releaseStatus = Manga.ReleaseStatusByte.Completed; break;
|
||||||
|
case "in corso": releaseStatus = Manga.ReleaseStatusByte.Continuing; break;
|
||||||
|
}
|
||||||
|
|
||||||
string posterUrl = document.DocumentNode.SelectSingleNode("//img[@class='rounded']").GetAttributeValue("src", "");
|
string posterUrl = document.DocumentNode.SelectSingleNode("//img[@class='rounded']").GetAttributeValue("src", "");
|
||||||
|
|
||||||
@ -105,7 +115,7 @@ public class Mangaworld: MangaConnector
|
|||||||
int year = Convert.ToInt32(yearString);
|
int year = Convert.ToInt32(yearString);
|
||||||
|
|
||||||
Manga manga = new (sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl, coverFileNameInCache, links,
|
Manga manga = new (sortName, authors.ToList(), description, altTitles, tags.ToArray(), posterUrl, coverFileNameInCache, links,
|
||||||
year, originalLanguage, status, publicationId);
|
year, originalLanguage, status, publicationId, releaseStatus);
|
||||||
cachedPublications.Add(manga);
|
cachedPublications.Add(manga);
|
||||||
return manga;
|
return manga;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user