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
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,57 +200,72 @@ 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")) {
when (sortingList) { sortChaptersByTranslator(sortingList, chaptersList, slug, branches)
"ms_combining" -> {
val tempChaptersList = mutableListOf<SChapter>()
for (currentList in teams.withIndex()) {
val teamId = teams[currentList.index]["id"].int
chapters = chaptersList
?.filter { it["branch_id"].int == teamId }
?.map { chapterFromElement(it, slug, teamId) }
chapters?.let { tempChaptersList.addAll(it) }
}
chapters = tempChaptersList
}
"ms_largest" -> {
val sizesChaptersLists = mutableListOf<Int>()
for (currentList in teams.withIndex()) {
val teamId = teams[currentList.index]["id"].int
val chapterSize = chaptersList?.filter { it["branch_id"].int == teamId }!!.size
sizesChaptersLists.add(chapterSize)
}
val max = sizesChaptersLists.indexOfFirst { it == sizesChaptersLists.maxOrNull() ?: 0 }
val teamId = teams[max]["id"].int
chapters = chaptersList?.filter { it["branch_id"].int == teamId }?.map { chapterFromElement(it, slug, teamId) }
}
"ms_active" -> {
for (currentList in teams.withIndex()) {
val isActive = teams[currentList.index]["teams"].array
for (currentListInternal in isActive.withIndex()) {
if (isActive[currentListInternal.index]["is_active"].int == 1) {
val teamId = teams[currentList.index]["id"].int
chapters = chaptersList?.filter { it["branch_id"].int == teamId }
?.map { chapterFromElement(it, slug, teamId) }
break
}
}
}
chapters ?: throw Exception("Активный перевод не назначен на сайте")
}
}
} else { } else {
chapters = chaptersList?.map { chapterFromElement(it, slug) } chaptersList
?.filter { it["status"].nullInt != 2 }
?.map { chapterFromElement(it, sortingList, slug) }
} }
return chapters ?: emptyList() return chapters ?: emptyList()
} }
private fun chapterFromElement(chapterItem: JsonElement, slug: String, teamIdParam: Int? = null): SChapter { private fun sortChaptersByTranslator
(sortingList: String?, chaptersList: JsonArray?, slug: String, branches: List<JsonElement>): List<SChapter>? {
var chapters: List<SChapter>? = null
when (sortingList) {
"ms_combining" -> {
val tempChaptersList = mutableListOf<SChapter>()
for (currentBranch in branches.withIndex()) {
val teamId = branches[currentBranch.index]["id"].int
chapters = chaptersList
?.filter { it["branch_id"].int == teamId && it["status"].nullInt != 2 }
?.map { chapterFromElement(it, sortingList, slug, teamId, branches) }
chapters?.let { tempChaptersList.addAll(it) }
}
chapters = tempChaptersList
}
"ms_largest" -> {
val sizesChaptersLists = mutableListOf<Int>()
for (currentBranch in branches.withIndex()) {
val teamId = branches[currentBranch.index]["id"].int
val chapterSize = chaptersList
?.filter { it["branch_id"].int == teamId }!!.size
sizesChaptersLists.add(chapterSize)
}
val max = sizesChaptersLists.indexOfFirst { it == sizesChaptersLists.maxOrNull() ?: 0 }
val teamId = branches[max]["id"].int
chapters = chaptersList
?.filter { it["branch_id"].int == teamId && it["status"].nullInt != 2 }
?.map { chapterFromElement(it, sortingList, slug, teamId, branches) }
}
"ms_active" -> {
for (currentBranch in branches.withIndex()) {
val teams = branches[currentBranch.index]["teams"].array
for (currentTeam in teams.withIndex()) {
if (teams[currentTeam.index]["is_active"].int == 1) {
val teamId = branches[currentBranch.index]["id"].int
chapters = chaptersList
?.filter { it["branch_id"].int == teamId && it["status"].nullInt != 2 }
?.map { chapterFromElement(it, sortingList, slug, teamId, branches) }
break
}
}
}
chapters ?: throw Exception("Активный перевод не назначен на сайте")
}
}
return chapters
}
private fun chapterFromElement
(chapterItem: JsonElement, sortingList: String?, slug: String, teamIdParam: Int? = null, branches: List<JsonElement>? = 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"),