|
|
|
@ -137,7 +137,7 @@ internal abstract class MadaraParser(
|
|
|
|
?.select("p")
|
|
|
|
?.select("p")
|
|
|
|
?.filterNot { it.ownText().startsWith("A brief description") }
|
|
|
|
?.filterNot { it.ownText().startsWith("A brief description") }
|
|
|
|
?.joinToString { it.html() },
|
|
|
|
?.joinToString { it.html() },
|
|
|
|
chapters = root2.select("li").asReversed().mapIndexed { i, li ->
|
|
|
|
chapters = root2.select("li").asReversed().mapChapters { i, li ->
|
|
|
|
val a = li.selectFirst("a")
|
|
|
|
val a = li.selectFirst("a")
|
|
|
|
val href = a?.attrAsRelativeUrlOrNull("href") ?: parseFailed("Link is missing")
|
|
|
|
val href = a?.attrAsRelativeUrlOrNull("href") ?: parseFailed("Link is missing")
|
|
|
|
MangaChapter(
|
|
|
|
MangaChapter(
|
|
|
|
@ -200,6 +200,7 @@ internal abstract class MadaraParser(
|
|
|
|
set(Calendar.MILLISECOND, 0)
|
|
|
|
set(Calendar.MILLISECOND, 0)
|
|
|
|
}.timeInMillis
|
|
|
|
}.timeInMillis
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
date.startsWith("today", ignoreCase = true) -> {
|
|
|
|
date.startsWith("today", ignoreCase = true) -> {
|
|
|
|
Calendar.getInstance().apply {
|
|
|
|
Calendar.getInstance().apply {
|
|
|
|
set(Calendar.HOUR_OF_DAY, 0)
|
|
|
|
set(Calendar.HOUR_OF_DAY, 0)
|
|
|
|
@ -208,6 +209,7 @@ internal abstract class MadaraParser(
|
|
|
|
set(Calendar.MILLISECOND, 0)
|
|
|
|
set(Calendar.MILLISECOND, 0)
|
|
|
|
}.timeInMillis
|
|
|
|
}.timeInMillis
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
date.contains(Regex("""\d(st|nd|rd|th)""")) -> {
|
|
|
|
date.contains(Regex("""\d(st|nd|rd|th)""")) -> {
|
|
|
|
// Clean date (e.g. 5th December 2019 to 5 December 2019) before parsing it
|
|
|
|
// Clean date (e.g. 5th December 2019 to 5 December 2019) before parsing it
|
|
|
|
date.split(" ").map {
|
|
|
|
date.split(" ").map {
|
|
|
|
@ -219,6 +221,7 @@ internal abstract class MadaraParser(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.let { dateFormat.tryParse(it.joinToString(" ")) }
|
|
|
|
.let { dateFormat.tryParse(it.joinToString(" ")) }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
else -> dateFormat.tryParse(date)
|
|
|
|
else -> dateFormat.tryParse(date)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -238,24 +241,28 @@ internal abstract class MadaraParser(
|
|
|
|
"dia",
|
|
|
|
"dia",
|
|
|
|
"day",
|
|
|
|
"day",
|
|
|
|
).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
|
|
|
|
).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
|
|
WordSet("jam", "saat", "heure", "hora", "hour").anyWordIn(date) -> cal.apply {
|
|
|
|
WordSet("jam", "saat", "heure", "hora", "hour").anyWordIn(date) -> cal.apply {
|
|
|
|
add(
|
|
|
|
add(
|
|
|
|
Calendar.HOUR,
|
|
|
|
Calendar.HOUR,
|
|
|
|
-number,
|
|
|
|
-number,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}.timeInMillis
|
|
|
|
}.timeInMillis
|
|
|
|
|
|
|
|
|
|
|
|
WordSet("menit", "dakika", "min", "minute", "minuto").anyWordIn(date) -> cal.apply {
|
|
|
|
WordSet("menit", "dakika", "min", "minute", "minuto").anyWordIn(date) -> cal.apply {
|
|
|
|
add(
|
|
|
|
add(
|
|
|
|
Calendar.MINUTE,
|
|
|
|
Calendar.MINUTE,
|
|
|
|
-number,
|
|
|
|
-number,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}.timeInMillis
|
|
|
|
}.timeInMillis
|
|
|
|
|
|
|
|
|
|
|
|
WordSet("detik", "segundo", "second").anyWordIn(date) -> cal.apply {
|
|
|
|
WordSet("detik", "segundo", "second").anyWordIn(date) -> cal.apply {
|
|
|
|
add(
|
|
|
|
add(
|
|
|
|
Calendar.SECOND,
|
|
|
|
Calendar.SECOND,
|
|
|
|
-number,
|
|
|
|
-number,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}.timeInMillis
|
|
|
|
}.timeInMillis
|
|
|
|
|
|
|
|
|
|
|
|
WordSet("month").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis
|
|
|
|
WordSet("month").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis
|
|
|
|
WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis
|
|
|
|
WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis
|
|
|
|
else -> 0
|
|
|
|
else -> 0
|
|
|
|
@ -293,7 +300,8 @@ internal abstract class MadaraParser(
|
|
|
|
class KingManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KINGMANGA, "king-manga.com")
|
|
|
|
class KingManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KINGMANGA, "king-manga.com")
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("MANGAHATACHI", "MangahaTachi", "ja")
|
|
|
|
@MangaSourceParser("MANGAHATACHI", "MangahaTachi", "ja")
|
|
|
|
class MangahaTachi(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAHATACHI, "mangahatachi.com")
|
|
|
|
class MangahaTachi(context: MangaLoaderContext) :
|
|
|
|
|
|
|
|
MadaraParser(context, MangaSource.MANGAHATACHI, "mangahatachi.com")
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("PIANMANGA", "PianManga", "en")
|
|
|
|
@MangaSourceParser("PIANMANGA", "PianManga", "en")
|
|
|
|
class PianManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.PIANMANGA, "pianmanga.com")
|
|
|
|
class PianManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.PIANMANGA, "pianmanga.com")
|
|
|
|
@ -400,7 +408,8 @@ internal abstract class MadaraParser(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("MANGA_DISTRICT", "Manga District", "en")
|
|
|
|
@MangaSourceParser("MANGA_DISTRICT", "Manga District", "en")
|
|
|
|
class MangaDistrict(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_DISTRICT, "mangadistrict.com") {
|
|
|
|
class MangaDistrict(context: MangaLoaderContext) :
|
|
|
|
|
|
|
|
MadaraParser(context, MangaSource.MANGA_DISTRICT, "mangadistrict.com") {
|
|
|
|
|
|
|
|
|
|
|
|
override val tagPrefix = "publication-genre/"
|
|
|
|
override val tagPrefix = "publication-genre/"
|
|
|
|
|
|
|
|
|
|
|
|
@ -408,7 +417,8 @@ internal abstract class MadaraParser(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("HENTAI_4FREE", "Hentai4Free", "en")
|
|
|
|
@MangaSourceParser("HENTAI_4FREE", "Hentai4Free", "en")
|
|
|
|
class Hentai4Free(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI_4FREE, "hentai4free.net") {
|
|
|
|
class Hentai4Free(context: MangaLoaderContext) :
|
|
|
|
|
|
|
|
MadaraParser(context, MangaSource.HENTAI_4FREE, "hentai4free.net") {
|
|
|
|
|
|
|
|
|
|
|
|
override val tagPrefix = "hentai-tag/"
|
|
|
|
override val tagPrefix = "hentai-tag/"
|
|
|
|
|
|
|
|
|
|
|
|
@ -437,7 +447,8 @@ internal abstract class MadaraParser(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("ALLPORN_COMIC", "All Porn Comic", "en")
|
|
|
|
@MangaSourceParser("ALLPORN_COMIC", "All Porn Comic", "en")
|
|
|
|
class AllPornComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ALLPORN_COMIC, "allporncomic.com") {
|
|
|
|
class AllPornComic(context: MangaLoaderContext) :
|
|
|
|
|
|
|
|
MadaraParser(context, MangaSource.ALLPORN_COMIC, "allporncomic.com") {
|
|
|
|
|
|
|
|
|
|
|
|
override val tagPrefix = "porncomic-genre/"
|
|
|
|
override val tagPrefix = "porncomic-genre/"
|
|
|
|
|
|
|
|
|
|
|
|
@ -488,7 +499,8 @@ internal abstract class MadaraParser(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en")
|
|
|
|
@MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en")
|
|
|
|
class MangaManhua(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_MANHUA, "mangamanhua.online")
|
|
|
|
class MangaManhua(context: MangaLoaderContext) :
|
|
|
|
|
|
|
|
MadaraParser(context, MangaSource.MANGA_MANHUA, "mangamanhua.online")
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("MANGA_247", "247MANGA", "en")
|
|
|
|
@MangaSourceParser("MANGA_247", "247MANGA", "en")
|
|
|
|
class Manga247(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_247, "247manga.com") {
|
|
|
|
class Manga247(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_247, "247manga.com") {
|
|
|
|
|