|
|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package org.koitharu.kotatsu.parsers.site.fr
|
|
|
|
|
|
|
|
|
|
import okhttp3.Headers
|
|
|
|
|
import org.json.JSONArray
|
|
|
|
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
|
|
|
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
|
|
|
|
import org.koitharu.kotatsu.parsers.PagedMangaParser
|
|
|
|
|
@ -21,6 +22,8 @@ internal class LugnicaScans(context: MangaLoaderContext) : PagedMangaParser(cont
|
|
|
|
|
SortOrder.UPDATED,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
override val availableStates: Set<MangaState> = EnumSet.allOf(MangaState::class.java)
|
|
|
|
|
|
|
|
|
|
override val configKeyDomain = ConfigKey.Domain("lugnica-scans.com")
|
|
|
|
|
|
|
|
|
|
override val headers: Headers = Headers.Builder()
|
|
|
|
|
@ -43,77 +46,102 @@ internal class LugnicaScans(context: MangaLoaderContext) : PagedMangaParser(cont
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override suspend fun getListPage(
|
|
|
|
|
page: Int,
|
|
|
|
|
query: String?,
|
|
|
|
|
tags: Set<MangaTag>?,
|
|
|
|
|
sortOrder: SortOrder,
|
|
|
|
|
): List<Manga> {
|
|
|
|
|
if (!query.isNullOrEmpty()) {
|
|
|
|
|
throw IllegalArgumentException("Search is not supported by this source")
|
|
|
|
|
}
|
|
|
|
|
if (sortOrder == SortOrder.ALPHABETICAL) {
|
|
|
|
|
if (page > 1) {
|
|
|
|
|
return emptyList()
|
|
|
|
|
}
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append("/api/get/catalog?page=0&filter=all")
|
|
|
|
|
}
|
|
|
|
|
val json = webClient.httpGet(url).parseJsonArray()
|
|
|
|
|
return json.mapJSON { j ->
|
|
|
|
|
val urlManga = "https://$domain/api/get/card/${j.getString("slug")}"
|
|
|
|
|
val img = "https://$domain/upload/min_cover/${j.getString("image")}"
|
|
|
|
|
Manga(
|
|
|
|
|
id = generateUid(urlManga),
|
|
|
|
|
title = j.getString("title"),
|
|
|
|
|
altTitle = null,
|
|
|
|
|
url = urlManga,
|
|
|
|
|
publicUrl = urlManga.toAbsoluteUrl(domain),
|
|
|
|
|
rating = j.getString("rate").toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
|
|
|
|
|
isNsfw = false,
|
|
|
|
|
coverUrl = img,
|
|
|
|
|
tags = setOf(),
|
|
|
|
|
state = when (j.getString("status")) {
|
|
|
|
|
"0" -> MangaState.ONGOING
|
|
|
|
|
"1" -> MangaState.FINISHED
|
|
|
|
|
"3" -> MangaState.ABANDONED
|
|
|
|
|
else -> null
|
|
|
|
|
},
|
|
|
|
|
author = null,
|
|
|
|
|
source = source,
|
|
|
|
|
)
|
|
|
|
|
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
|
|
|
|
when (filter) {
|
|
|
|
|
is MangaListFilter.Search -> {
|
|
|
|
|
throw IllegalArgumentException("Search is not supported by this source")
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append("/api/get/homegrid/")
|
|
|
|
|
append(page)
|
|
|
|
|
|
|
|
|
|
is MangaListFilter.Advanced -> {
|
|
|
|
|
|
|
|
|
|
if (filter.sortOrder == SortOrder.ALPHABETICAL) {
|
|
|
|
|
if (page > 1) {
|
|
|
|
|
return emptyList()
|
|
|
|
|
}
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append("/api/get/catalog?page=0&filter=")
|
|
|
|
|
filter.states.oneOrThrowIfMany()?.let {
|
|
|
|
|
when (it) {
|
|
|
|
|
MangaState.ONGOING -> append("0")
|
|
|
|
|
MangaState.FINISHED -> append("1")
|
|
|
|
|
MangaState.PAUSED -> append("4")
|
|
|
|
|
MangaState.ABANDONED -> append("3")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return parseMangaListAlpha(webClient.httpGet(url).parseJsonArray())
|
|
|
|
|
} else {
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append("/api/get/homegrid/")
|
|
|
|
|
append(page)
|
|
|
|
|
}
|
|
|
|
|
return parseMangaList(webClient.httpGet(url).parseJsonArray())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
val json = webClient.httpGet(url).parseJsonArray()
|
|
|
|
|
return json.mapJSON { j ->
|
|
|
|
|
val urlManga = "https://$domain/api/get/card/${j.getString("manga_slug")}"
|
|
|
|
|
val img = "https://$domain/upload/min_cover/${j.getString("manga_image")}"
|
|
|
|
|
Manga(
|
|
|
|
|
id = generateUid(urlManga),
|
|
|
|
|
title = j.getString("manga_title"),
|
|
|
|
|
altTitle = null,
|
|
|
|
|
url = urlManga,
|
|
|
|
|
publicUrl = urlManga.toAbsoluteUrl(domain),
|
|
|
|
|
rating = j.getString("manga_rate").toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
|
|
|
|
|
isNsfw = false,
|
|
|
|
|
coverUrl = img,
|
|
|
|
|
tags = setOf(),
|
|
|
|
|
state = null,
|
|
|
|
|
author = null,
|
|
|
|
|
source = source,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
null -> {
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append("/api/get/homegrid/")
|
|
|
|
|
append(page)
|
|
|
|
|
}
|
|
|
|
|
return parseMangaList(webClient.httpGet(url).parseJsonArray())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun parseMangaList(json: JSONArray): List<Manga> {
|
|
|
|
|
return json.mapJSON { j ->
|
|
|
|
|
val urlManga = "https://$domain/api/get/card/${j.getString("manga_slug")}"
|
|
|
|
|
val img = "https://$domain/upload/min_cover/${j.getString("manga_image")}"
|
|
|
|
|
Manga(
|
|
|
|
|
id = generateUid(urlManga),
|
|
|
|
|
title = j.getString("manga_title"),
|
|
|
|
|
altTitle = null,
|
|
|
|
|
url = urlManga,
|
|
|
|
|
publicUrl = urlManga.toAbsoluteUrl(domain),
|
|
|
|
|
rating = j.getString("manga_rate").toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
|
|
|
|
|
isNsfw = false,
|
|
|
|
|
coverUrl = img,
|
|
|
|
|
tags = setOf(),
|
|
|
|
|
state = null,
|
|
|
|
|
author = null,
|
|
|
|
|
source = source,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun parseMangaListAlpha(json: JSONArray): List<Manga> {
|
|
|
|
|
return json.mapJSON { j ->
|
|
|
|
|
val urlManga = "https://$domain/api/get/card/${j.getString("slug")}"
|
|
|
|
|
val img = "https://$domain/upload/min_cover/${j.getString("image")}"
|
|
|
|
|
Manga(
|
|
|
|
|
id = generateUid(urlManga),
|
|
|
|
|
title = j.getString("title"),
|
|
|
|
|
altTitle = null,
|
|
|
|
|
url = urlManga,
|
|
|
|
|
publicUrl = urlManga.toAbsoluteUrl(domain),
|
|
|
|
|
rating = j.getString("rate").toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
|
|
|
|
|
isNsfw = false,
|
|
|
|
|
coverUrl = img,
|
|
|
|
|
tags = setOf(),
|
|
|
|
|
state = when (j.getString("status")) {
|
|
|
|
|
"0" -> MangaState.ONGOING
|
|
|
|
|
"1" -> MangaState.FINISHED
|
|
|
|
|
"3" -> MangaState.ABANDONED
|
|
|
|
|
else -> null
|
|
|
|
|
},
|
|
|
|
|
author = null,
|
|
|
|
|
source = source,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
|
|