MangaLib: Show the scanlator as a team / Paid chapters hidden (#6605)

Additionally removed a non-working filter.
This commit is contained in:
Blue cat 2021-04-19 19:37:54 +03:00 committed by GitHub
parent e55e571055
commit 0831e0433d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 83 additions and 46 deletions

View File

@ -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'
} }

View File

@ -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"),