|
|
|
|
@ -40,6 +40,8 @@ internal abstract class MadaraParser(
|
|
|
|
|
isMultipleTagsSupported = true,
|
|
|
|
|
isTagsExclusionSupported = !withoutAjax,
|
|
|
|
|
isSearchSupported = true,
|
|
|
|
|
isSearchWithFiltersSupported = true,
|
|
|
|
|
isYearSupported = true,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
override suspend fun getFilterOptions() = MangaListFilterOptions(
|
|
|
|
|
@ -51,8 +53,7 @@ internal abstract class MadaraParser(
|
|
|
|
|
override val availableSortOrders: Set<SortOrder> = setupAvailableSortOrders()
|
|
|
|
|
|
|
|
|
|
private fun setupAvailableSortOrders(): Set<SortOrder> {
|
|
|
|
|
return if(!withoutAjax)
|
|
|
|
|
{
|
|
|
|
|
return if (!withoutAjax) {
|
|
|
|
|
EnumSet.of(
|
|
|
|
|
SortOrder.UPDATED,
|
|
|
|
|
SortOrder.UPDATED_ASC,
|
|
|
|
|
@ -64,10 +65,17 @@ internal abstract class MadaraParser(
|
|
|
|
|
SortOrder.ALPHABETICAL_DESC,
|
|
|
|
|
SortOrder.RATING,
|
|
|
|
|
SortOrder.RATING_ASC,
|
|
|
|
|
SortOrder.RELEVANCE,
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
EnumSet.of(
|
|
|
|
|
SortOrder.UPDATED,
|
|
|
|
|
SortOrder.POPULARITY,
|
|
|
|
|
SortOrder.NEWEST,
|
|
|
|
|
SortOrder.ALPHABETICAL,
|
|
|
|
|
SortOrder.RATING,
|
|
|
|
|
SortOrder.RELEVANCE,
|
|
|
|
|
)
|
|
|
|
|
}else
|
|
|
|
|
{
|
|
|
|
|
EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -219,27 +227,13 @@ internal abstract class MadaraParser(
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
|
|
|
|
|
when {
|
|
|
|
|
|
|
|
|
|
!filter.query.isNullOrEmpty() -> {
|
|
|
|
|
if (pages > 1) {
|
|
|
|
|
append("/page/")
|
|
|
|
|
append(pages.toString())
|
|
|
|
|
}
|
|
|
|
|
append("/?s=")
|
|
|
|
|
append(filter.query.urlEncoded())
|
|
|
|
|
append("&post_type=wp-manga")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else -> {
|
|
|
|
|
if (pages > 1) {
|
|
|
|
|
append("/page/")
|
|
|
|
|
append(pages.toString())
|
|
|
|
|
}
|
|
|
|
|
append("/?s=")
|
|
|
|
|
|
|
|
|
|
//Support query
|
|
|
|
|
//append(filter.query.urlEncoded())
|
|
|
|
|
append(filter.query?.urlEncoded())
|
|
|
|
|
|
|
|
|
|
append("&post_type=wp-manga")
|
|
|
|
|
|
|
|
|
|
@ -273,11 +267,10 @@ internal abstract class MadaraParser(
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Support year
|
|
|
|
|
//filter.year?.let {
|
|
|
|
|
// append("&release=")
|
|
|
|
|
// append(filter.year)
|
|
|
|
|
//}
|
|
|
|
|
if (filter.year != 0) {
|
|
|
|
|
append("&release=")
|
|
|
|
|
append(filter.year.toString())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Support author
|
|
|
|
|
//filter.author?.let {
|
|
|
|
|
@ -299,10 +292,8 @@ internal abstract class MadaraParser(
|
|
|
|
|
SortOrder.NEWEST -> append("new-manga")
|
|
|
|
|
SortOrder.ALPHABETICAL -> append("alphabet")
|
|
|
|
|
SortOrder.RATING -> append("rating")
|
|
|
|
|
// SortOrder.RELEVANCE -> {}
|
|
|
|
|
else -> append("latest")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
SortOrder.RELEVANCE -> {}
|
|
|
|
|
else -> {}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return parseMangaList(webClient.httpGet(url).parseHtml())
|
|
|
|
|
@ -312,20 +303,10 @@ internal abstract class MadaraParser(
|
|
|
|
|
|
|
|
|
|
payload["page"] = page.toString()
|
|
|
|
|
|
|
|
|
|
when {
|
|
|
|
|
|
|
|
|
|
!filter.query.isNullOrEmpty() -> {
|
|
|
|
|
filter.query?.let {
|
|
|
|
|
payload["vars[s]"] = filter.query.urlEncoded()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else -> {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Support query
|
|
|
|
|
// filter.query.let {
|
|
|
|
|
// payload["vars[s]"] = filter.query.urlEncoded()
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
if (filter.tags.isNotEmpty()) {
|
|
|
|
|
payload["vars[tax_query][0][taxonomy]"] = "wp-manga-genre"
|
|
|
|
|
payload["vars[tax_query][0][field]"] = "slug"
|
|
|
|
|
@ -344,12 +325,11 @@ internal abstract class MadaraParser(
|
|
|
|
|
payload["vars[tax_query][1][operator]"] = "NOT IN"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Support year
|
|
|
|
|
//filter.year?.let {
|
|
|
|
|
// payload["vars[tax_query][2][taxonomy]"] = wp-manga-release
|
|
|
|
|
// payload["vars[tax_query][2][field]"] = slug
|
|
|
|
|
// payload["vars[tax_query][2][terms][]"] = filter.year
|
|
|
|
|
//}
|
|
|
|
|
if (filter.year != 0) {
|
|
|
|
|
payload["vars[tax_query][2][taxonomy]"] = "wp-manga-release"
|
|
|
|
|
payload["vars[tax_query][2][field]"] = "slug"
|
|
|
|
|
payload["vars[tax_query][2][terms][]"] = filter.year.toString()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Support author
|
|
|
|
|
// filter.author.let {
|
|
|
|
|
@ -368,8 +348,7 @@ internal abstract class MadaraParser(
|
|
|
|
|
// payload["vars[tax_query][4][operator]"] = "IN"
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
/// for add filter.year need to add || filter.year
|
|
|
|
|
if (filter.tags.isNotEmpty() || filter.tagsExclude.isNotEmpty()) {
|
|
|
|
|
if (filter.tags.isNotEmpty() || filter.tagsExclude.isNotEmpty() || filter.year != 0) {
|
|
|
|
|
payload["vars[tax_query][relation]"] = "AND"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -434,11 +413,11 @@ internal abstract class MadaraParser(
|
|
|
|
|
payload["vars[orderby][query_total_reviews]"] = "ASC"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SortOrder.RELEVANCE -> {
|
|
|
|
|
// payload["vars[orderby]"] = ""
|
|
|
|
|
// }
|
|
|
|
|
SortOrder.RELEVANCE -> {
|
|
|
|
|
payload["vars[orderby]"] = ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else -> payload["vars[meta_key]"] = "_latest_update"
|
|
|
|
|
else -> payload["vars[orderby]"] = ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
filter.states.forEach {
|
|
|
|
|
@ -463,8 +442,6 @@ internal abstract class MadaraParser(
|
|
|
|
|
else -> ""
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return parseMangaList(
|
|
|
|
|
webClient.httpPost(
|
|
|
|
|
@ -749,8 +726,10 @@ internal abstract class MadaraParser(
|
|
|
|
|
val d = date?.lowercase() ?: return 0
|
|
|
|
|
return when {
|
|
|
|
|
|
|
|
|
|
WordSet(" ago", "atrás", " hace", " publicado"," назад", " önce", " trước", "مضت",
|
|
|
|
|
" h", " d", " días", " jour", " horas", " heure", " mins", " minutos", " minute", " mois").endsWith(d) -> {
|
|
|
|
|
WordSet(
|
|
|
|
|
" ago", "atrás", " hace", " publicado", " назад", " önce", " trước", "مضت",
|
|
|
|
|
" h", " d", " días", " jour", " horas", " heure", " mins", " minutos", " minute", " mois",
|
|
|
|
|
).endsWith(d) -> {
|
|
|
|
|
parseRelativeDate(d)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -805,16 +784,22 @@ internal abstract class MadaraParser(
|
|
|
|
|
return when {
|
|
|
|
|
WordSet("detik", "segundo", "second", "ثوان")
|
|
|
|
|
.anyWordIn(date) -> cal.apply { add(Calendar.SECOND, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
WordSet("menit", "dakika", "min", "minute", "minutes", "minuto", "mins", "phút", "минут", "دقيقة")
|
|
|
|
|
.anyWordIn(date) -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
WordSet("jam", "saat", "heure", "hora", "horas", "hour", "hours", "h", "ساعات", "ساعة")
|
|
|
|
|
.anyWordIn(date) -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
WordSet("hari", "gün", "jour", "día", "dia", "day", "days", "d", "день")
|
|
|
|
|
.anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
WordSet("month", "months", "أشهر", "mois")
|
|
|
|
|
.anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
WordSet("year")
|
|
|
|
|
.anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis
|
|
|
|
|
|
|
|
|
|
else -> 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|