MangaLib: Show the scanlator as a team / Paid chapters hidden (#6605)
Additionally removed a non-working filter.
This commit is contained in:
parent
e55e571055
commit
0831e0433d
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'MangaLib'
|
extName = 'MangaLib'
|
||||||
pkgNameSuffix = 'ru.libmanga'
|
pkgNameSuffix = 'ru.libmanga'
|
||||||
extClass = '.LibManga'
|
extClass = '.LibManga'
|
||||||
extVersionCode = 38
|
extVersionCode = 39
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,10 +8,12 @@ import com.github.salomonbrys.kotson.array
|
|||||||
import com.github.salomonbrys.kotson.get
|
import com.github.salomonbrys.kotson.get
|
||||||
import com.github.salomonbrys.kotson.int
|
import com.github.salomonbrys.kotson.int
|
||||||
import com.github.salomonbrys.kotson.nullArray
|
import com.github.salomonbrys.kotson.nullArray
|
||||||
|
import com.github.salomonbrys.kotson.nullInt
|
||||||
import com.github.salomonbrys.kotson.nullString
|
import com.github.salomonbrys.kotson.nullString
|
||||||
import com.github.salomonbrys.kotson.obj
|
import com.github.salomonbrys.kotson.obj
|
||||||
import com.github.salomonbrys.kotson.string
|
import com.github.salomonbrys.kotson.string
|
||||||
import com.github.salomonbrys.kotson.toMap
|
import com.github.salomonbrys.kotson.toMap
|
||||||
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -198,42 +200,59 @@ class LibManga : ConfigurableSource, HttpSource() {
|
|||||||
val data = jsonParser.parse(dataStr).obj
|
val data = jsonParser.parse(dataStr).obj
|
||||||
val chaptersList = data["chapters"]["list"].nullArray
|
val chaptersList = data["chapters"]["list"].nullArray
|
||||||
val slug = data["manga"]["slug"].string
|
val slug = data["manga"]["slug"].string
|
||||||
val teams = data["chapters"]["branches"].array.reversed()
|
val branches = data["chapters"]["branches"].array.reversed()
|
||||||
val sortingList = preferences.getString(SORTING_PREF, "ms_mixing")
|
val sortingList = preferences.getString(SORTING_PREF, "ms_mixing")
|
||||||
var chapters: List<SChapter>? = null
|
|
||||||
|
|
||||||
if (teams.isNotEmpty() && !sortingList.equals("ms_mixing")) {
|
val chapters: List<SChapter>? = if (branches.isNotEmpty() && !sortingList.equals("ms_mixing")) {
|
||||||
|
sortChaptersByTranslator(sortingList, chaptersList, slug, branches)
|
||||||
|
} else {
|
||||||
|
chaptersList
|
||||||
|
?.filter { it["status"].nullInt != 2 }
|
||||||
|
?.map { chapterFromElement(it, sortingList, slug) }
|
||||||
|
}
|
||||||
|
|
||||||
|
return chapters ?: emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun sortChaptersByTranslator
|
||||||
|
(sortingList: String?, chaptersList: JsonArray?, slug: String, branches: List<JsonElement>): List<SChapter>? {
|
||||||
|
var chapters: List<SChapter>? = null
|
||||||
when (sortingList) {
|
when (sortingList) {
|
||||||
"ms_combining" -> {
|
"ms_combining" -> {
|
||||||
val tempChaptersList = mutableListOf<SChapter>()
|
val tempChaptersList = mutableListOf<SChapter>()
|
||||||
for (currentList in teams.withIndex()) {
|
for (currentBranch in branches.withIndex()) {
|
||||||
val teamId = teams[currentList.index]["id"].int
|
val teamId = branches[currentBranch.index]["id"].int
|
||||||
chapters = chaptersList
|
chapters = chaptersList
|
||||||
?.filter { it["branch_id"].int == teamId }
|
?.filter { it["branch_id"].int == teamId && it["status"].nullInt != 2 }
|
||||||
?.map { chapterFromElement(it, slug, teamId) }
|
?.map { chapterFromElement(it, sortingList, slug, teamId, branches) }
|
||||||
chapters?.let { tempChaptersList.addAll(it) }
|
chapters?.let { tempChaptersList.addAll(it) }
|
||||||
}
|
}
|
||||||
chapters = tempChaptersList
|
chapters = tempChaptersList
|
||||||
}
|
}
|
||||||
"ms_largest" -> {
|
"ms_largest" -> {
|
||||||
val sizesChaptersLists = mutableListOf<Int>()
|
val sizesChaptersLists = mutableListOf<Int>()
|
||||||
for (currentList in teams.withIndex()) {
|
for (currentBranch in branches.withIndex()) {
|
||||||
val teamId = teams[currentList.index]["id"].int
|
val teamId = branches[currentBranch.index]["id"].int
|
||||||
val chapterSize = chaptersList?.filter { it["branch_id"].int == teamId }!!.size
|
val chapterSize = chaptersList
|
||||||
|
?.filter { it["branch_id"].int == teamId }!!.size
|
||||||
sizesChaptersLists.add(chapterSize)
|
sizesChaptersLists.add(chapterSize)
|
||||||
}
|
}
|
||||||
val max = sizesChaptersLists.indexOfFirst { it == sizesChaptersLists.maxOrNull() ?: 0 }
|
val max = sizesChaptersLists.indexOfFirst { it == sizesChaptersLists.maxOrNull() ?: 0 }
|
||||||
val teamId = teams[max]["id"].int
|
val teamId = branches[max]["id"].int
|
||||||
chapters = chaptersList?.filter { it["branch_id"].int == teamId }?.map { chapterFromElement(it, slug, teamId) }
|
|
||||||
|
chapters = chaptersList
|
||||||
|
?.filter { it["branch_id"].int == teamId && it["status"].nullInt != 2 }
|
||||||
|
?.map { chapterFromElement(it, sortingList, slug, teamId, branches) }
|
||||||
}
|
}
|
||||||
"ms_active" -> {
|
"ms_active" -> {
|
||||||
for (currentList in teams.withIndex()) {
|
for (currentBranch in branches.withIndex()) {
|
||||||
val isActive = teams[currentList.index]["teams"].array
|
val teams = branches[currentBranch.index]["teams"].array
|
||||||
for (currentListInternal in isActive.withIndex()) {
|
for (currentTeam in teams.withIndex()) {
|
||||||
if (isActive[currentListInternal.index]["is_active"].int == 1) {
|
if (teams[currentTeam.index]["is_active"].int == 1) {
|
||||||
val teamId = teams[currentList.index]["id"].int
|
val teamId = branches[currentBranch.index]["id"].int
|
||||||
chapters = chaptersList?.filter { it["branch_id"].int == teamId }
|
chapters = chaptersList
|
||||||
?.map { chapterFromElement(it, slug, teamId) }
|
?.filter { it["branch_id"].int == teamId && it["status"].nullInt != 2 }
|
||||||
|
?.map { chapterFromElement(it, sortingList, slug, teamId, branches) }
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,14 +260,12 @@ class LibManga : ConfigurableSource, HttpSource() {
|
|||||||
chapters ?: throw Exception("Активный перевод не назначен на сайте")
|
chapters ?: throw Exception("Активный перевод не назначен на сайте")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
chapters = chaptersList?.map { chapterFromElement(it, slug) }
|
return chapters
|
||||||
}
|
}
|
||||||
|
|
||||||
return chapters ?: emptyList()
|
private fun chapterFromElement
|
||||||
}
|
(chapterItem: JsonElement, sortingList: String?, slug: String, teamIdParam: Int? = null, branches: List<JsonElement>? = null): SChapter {
|
||||||
|
|
||||||
private fun chapterFromElement(chapterItem: JsonElement, slug: String, teamIdParam: Int? = null): SChapter {
|
|
||||||
val chapter = SChapter.create()
|
val chapter = SChapter.create()
|
||||||
|
|
||||||
val volume = chapterItem["chapter_volume"].int
|
val volume = chapterItem["chapter_volume"].int
|
||||||
@ -262,13 +279,34 @@ class LibManga : ConfigurableSource, HttpSource() {
|
|||||||
val nameChapter = chapterItem["chapter_name"].nullString
|
val nameChapter = chapterItem["chapter_name"].nullString
|
||||||
val fullNameChapter = "Том $volume. Глава $number"
|
val fullNameChapter = "Том $volume. Глава $number"
|
||||||
|
|
||||||
chapter.scanlator = chapterItem["username"].string
|
if (!sortingList.equals("ms_mixing")) {
|
||||||
|
chapter.scanlator = branches?.let { getScanlatorTeamName(it, chapterItem) } ?: chapterItem["username"].string
|
||||||
|
}
|
||||||
chapter.name = if (nameChapter.isNullOrBlank()) fullNameChapter else "$fullNameChapter - $nameChapter"
|
chapter.name = if (nameChapter.isNullOrBlank()) fullNameChapter else "$fullNameChapter - $nameChapter"
|
||||||
chapter.date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.US)
|
chapter.date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.US)
|
||||||
.parse(chapterItem["chapter_created_at"].string.substringBefore(" "))?.time ?: 0L
|
.parse(chapterItem["chapter_created_at"].string.substringBefore(" "))?.time ?: 0L
|
||||||
|
|
||||||
return chapter
|
return chapter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getScanlatorTeamName(branches: List<JsonElement>, chapterItem: JsonElement): String? {
|
||||||
|
var scanlatorData: String? = null
|
||||||
|
for (currentBranch in branches.withIndex()) {
|
||||||
|
val branch = branches[currentBranch.index]
|
||||||
|
val teams = branch["teams"].array
|
||||||
|
if (chapterItem["branch_id"].int == branch["id"].int) {
|
||||||
|
for (currentTeam in teams.withIndex()) {
|
||||||
|
val team = teams[currentTeam.index]
|
||||||
|
val scanlatorId = chapterItem["chapter_scanlator_id"].int
|
||||||
|
scanlatorData = if ((scanlatorId == team["id"].int) ||
|
||||||
|
(scanlatorId == 0 && team["is_active"].int == 1)
|
||||||
|
) team["name"].string else branch["teams"][0]["name"].string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return scanlatorData
|
||||||
|
}
|
||||||
|
|
||||||
override fun prepareNewChapter(chapter: SChapter, manga: SManga) {
|
override fun prepareNewChapter(chapter: SChapter, manga: SManga) {
|
||||||
"""Глава\s(\d+)""".toRegex().find(chapter.name)?.let {
|
"""Глава\s(\d+)""".toRegex().find(chapter.name)?.let {
|
||||||
val number = it.groups[1]?.value!!
|
val number = it.groups[1]?.value!!
|
||||||
@ -554,7 +592,6 @@ class LibManga : ConfigurableSource, HttpSource() {
|
|||||||
SearchFilter("детектив", "40"),
|
SearchFilter("детектив", "40"),
|
||||||
SearchFilter("дзёсэй", "41"),
|
SearchFilter("дзёсэй", "41"),
|
||||||
SearchFilter("драма", "43"),
|
SearchFilter("драма", "43"),
|
||||||
SearchFilter("ёнкома", "75"),
|
|
||||||
SearchFilter("игра", "44"),
|
SearchFilter("игра", "44"),
|
||||||
SearchFilter("исекай", "79"),
|
SearchFilter("исекай", "79"),
|
||||||
SearchFilter("история", "45"),
|
SearchFilter("история", "45"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user