[RU] Readmanga & Mintmanga add rate/score and fixes (#7158)
* Readmanga & Mintmanga add rate * Fix/simplification code * add sort year * delete sort name(alphabet) * edit the sensitivity of stars * micro-sensitivity underestimation
This commit is contained in:
parent
4251a849bc
commit
6f3ea81db1
|
@ -5,7 +5,7 @@ ext {
|
||||||
extName = 'AllHentai'
|
extName = 'AllHentai'
|
||||||
pkgNameSuffix = 'ru.allhentai'
|
pkgNameSuffix = 'ru.allhentai'
|
||||||
extClass = '.AllHentai'
|
extClass = '.AllHentai'
|
||||||
extVersionCode = 5
|
extVersionCode = 6
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ class AllHentai : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
is OrderBy -> {
|
is OrderBy -> {
|
||||||
if (filter.state > 0) {
|
if (filter.state > 0) {
|
||||||
val ord = arrayOf("not", "year", "name", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
val ord = arrayOf("not", "year", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
||||||
val ordUrl = "$baseUrl/list?sortType=$ord".toHttpUrlOrNull()!!.newBuilder()
|
val ordUrl = "$baseUrl/list?sortType=$ord".toHttpUrlOrNull()!!.newBuilder()
|
||||||
return GET(ordUrl.toString(), headers)
|
return GET(ordUrl.toString(), headers)
|
||||||
}
|
}
|
||||||
|
@ -277,8 +277,8 @@ class AllHentai : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private class OrderBy : Filter.Select<String>(
|
private class OrderBy : Filter.Select<String>(
|
||||||
"Сортировка (only)",
|
"Сортировка (только)",
|
||||||
arrayOf("Без сортировки", "По году", "По алфавиту", "По популярности", "Популярно сейчас", "По рейтингу", "Новинки", "По дате обновления")
|
arrayOf("Без сортировки", "По году", "По популярности", "Популярно сейчас", "По рейтингу", "Новинки", "По дате обновления")
|
||||||
)
|
)
|
||||||
|
|
||||||
private class Genre(name: String, val id: String) : Filter.TriState(name)
|
private class Genre(name: String, val id: String) : Filter.TriState(name)
|
||||||
|
@ -286,16 +286,16 @@ class AllHentai : ParsedHttpSource() {
|
||||||
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Жанры", genres)
|
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Жанры", genres)
|
||||||
private class Category(categories: List<Genre>) : Filter.Group<Genre>("Категории", categories)
|
private class Category(categories: List<Genre>) : Filter.Group<Genre>("Категории", categories)
|
||||||
private class FilList(fils: List<Genre>) : Filter.Group<Genre>("Фильтры", fils)
|
private class FilList(fils: List<Genre>) : Filter.Group<Genre>("Фильтры", fils)
|
||||||
private class Tags(tags: Array<String>) : Filter.Select<String>("Тэг (only)", tags)
|
private class Tags(tags: Array<String>) : Filter.Select<String>("Тэг (только)", tags)
|
||||||
|
|
||||||
private data class Tag(val name: String, val url: String)
|
private data class Tag(val name: String, val url: String)
|
||||||
|
|
||||||
override fun getFilterList() = FilterList(
|
override fun getFilterList() = FilterList(
|
||||||
OrderBy(),
|
OrderBy(),
|
||||||
|
Tags(tagsName),
|
||||||
GenreList(getGenreList()),
|
GenreList(getGenreList()),
|
||||||
Category(getCategoryList()),
|
Category(getCategoryList()),
|
||||||
FilList(getFilList()),
|
FilList(getFilList())
|
||||||
Tags(tagsName)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -5,7 +5,7 @@ ext {
|
||||||
extName = 'MangaLib'
|
extName = 'MangaLib'
|
||||||
pkgNameSuffix = 'ru.libmanga'
|
pkgNameSuffix = 'ru.libmanga'
|
||||||
extClass = '.LibManga'
|
extClass = '.LibManga'
|
||||||
extVersionCode = 48
|
extVersionCode = 49
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,15 +181,15 @@ class LibManga : ConfigurableSource, HttpSource() {
|
||||||
val ratingVotes = document.select(".media-rating.media-rating_lg div.media-rating__votes").text()
|
val ratingVotes = document.select(".media-rating.media-rating_lg div.media-rating__votes").text()
|
||||||
val ratingStar = when {
|
val ratingStar = when {
|
||||||
ratingValue > 9.5 -> "★★★★★"
|
ratingValue > 9.5 -> "★★★★★"
|
||||||
ratingValue > 9.0 -> "★★★★✬"
|
ratingValue > 8.5 -> "★★★★✬"
|
||||||
ratingValue > 7.5 -> "★★★★☆"
|
ratingValue > 7.5 -> "★★★★☆"
|
||||||
ratingValue > 7.0 -> "★★★✬☆"
|
ratingValue > 6.5 -> "★★★✬☆"
|
||||||
ratingValue > 5.5 -> "★★★☆☆"
|
ratingValue > 5.5 -> "★★★☆☆"
|
||||||
ratingValue > 5.0 -> "★★✬☆☆"
|
ratingValue > 4.5 -> "★★✬☆☆"
|
||||||
ratingValue > 3.5 -> "★★☆☆☆"
|
ratingValue > 3.5 -> "★★☆☆☆"
|
||||||
ratingValue > 3.0 -> "★✬☆☆☆"
|
ratingValue > 2.5 -> "★✬☆☆☆"
|
||||||
ratingValue > 1.5 -> "★☆☆☆☆"
|
ratingValue > 1.5 -> "★☆☆☆☆"
|
||||||
ratingValue > 1.0 -> "✬☆☆☆☆"
|
ratingValue > 0.5 -> "✬☆☆☆☆"
|
||||||
else -> "☆☆☆☆☆"
|
else -> "☆☆☆☆☆"
|
||||||
}
|
}
|
||||||
val genres = document.select(".media-tags > a").map { it.text() }
|
val genres = document.select(".media-tags > a").map { it.text() }
|
||||||
|
|
|
@ -5,7 +5,7 @@ ext {
|
||||||
extName = 'Mintmanga'
|
extName = 'Mintmanga'
|
||||||
pkgNameSuffix = 'ru.mintmanga'
|
pkgNameSuffix = 'ru.mintmanga'
|
||||||
extClass = '.Mintmanga'
|
extClass = '.Mintmanga'
|
||||||
extVersionCode = 28
|
extVersionCode = 29
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ class Mintmanga : ParsedHttpSource() {
|
||||||
override fun latestUpdatesNextPageSelector() = "a.nextLink"
|
override fun latestUpdatesNextPageSelector() = "a.nextLink"
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
var url = "$baseUrl/search/advanced".toHttpUrlOrNull()!!.newBuilder()
|
val url = "$baseUrl/search/advanced".toHttpUrlOrNull()!!.newBuilder()
|
||||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||||
when (filter) {
|
when (filter) {
|
||||||
is GenreList -> filter.state.forEach { genre ->
|
is GenreList -> filter.state.forEach { genre ->
|
||||||
|
@ -98,12 +98,10 @@ class Mintmanga : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is OrderBy -> {
|
is OrderBy -> {
|
||||||
if (filter.state == 0) {
|
if (filter.state > 0) {
|
||||||
url = "$baseUrl/search/advanced".toHttpUrlOrNull()!!.newBuilder()
|
val ord = arrayOf("not", "year", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
||||||
} else {
|
val ordUrl = "$baseUrl/list?sortType=$ord".toHttpUrlOrNull()!!.newBuilder()
|
||||||
val ord = arrayOf("not", "year", "name", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
return GET(ordUrl.toString(), headers)
|
||||||
url = "$baseUrl/list?sortType=$ord".toHttpUrlOrNull()!!.newBuilder()
|
|
||||||
return GET(url.toString(), headers)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,7 +127,22 @@ class Mintmanga : ParsedHttpSource() {
|
||||||
} else {
|
} else {
|
||||||
"манга"
|
"манга"
|
||||||
}
|
}
|
||||||
|
val ratingValue = infoElement.select(".col-sm-7 .rating-block").attr("data-score").toFloat() * 2
|
||||||
|
val ratingValueOver = infoElement.select(".info-icon").attr("data-content").substringAfter("Относительно остальных произведений: <b>").substringBefore("/5</b>").replace(",", ".").toFloat() * 2
|
||||||
|
val ratingVotes = infoElement.select(".col-sm-7 .user-rating meta[itemprop=\"ratingCount\"]").attr("content")
|
||||||
|
val ratingStar = when {
|
||||||
|
ratingValue > 9.5 -> "★★★★★"
|
||||||
|
ratingValue > 8.5 -> "★★★★✬"
|
||||||
|
ratingValue > 7.5 -> "★★★★☆"
|
||||||
|
ratingValue > 6.5 -> "★★★✬☆"
|
||||||
|
ratingValue > 5.5 -> "★★★☆☆"
|
||||||
|
ratingValue > 4.5 -> "★★✬☆☆"
|
||||||
|
ratingValue > 3.5 -> "★★☆☆☆"
|
||||||
|
ratingValue > 2.5 -> "★✬☆☆☆"
|
||||||
|
ratingValue > 1.5 -> "★☆☆☆☆"
|
||||||
|
ratingValue > 0.5 -> "✬☆☆☆☆"
|
||||||
|
else -> "☆☆☆☆☆"
|
||||||
|
}
|
||||||
val manga = SManga.create()
|
val manga = SManga.create()
|
||||||
var authorElement = infoElement.select("span.elem_author").first()?.text()
|
var authorElement = infoElement.select("span.elem_author").first()?.text()
|
||||||
if (authorElement == null) {
|
if (authorElement == null) {
|
||||||
|
@ -143,7 +156,7 @@ class Mintmanga : ParsedHttpSource() {
|
||||||
if (infoElement.select(".another-names").isNotEmpty()) {
|
if (infoElement.select(".another-names").isNotEmpty()) {
|
||||||
altName = "Альтернативные названия:\n" + infoElement.select(".another-names").text() + "\n\n"
|
altName = "Альтернативные названия:\n" + infoElement.select(".another-names").text() + "\n\n"
|
||||||
}
|
}
|
||||||
manga.description = altName + infoElement.select("div.manga-description").text()
|
manga.description = ratingStar + " " + ratingValue + "[ⓘ" + ratingValueOver + "]" + " (голосов: " + ratingVotes + ")\n" + altName + infoElement.select("div.manga-description").text()
|
||||||
manga.status = parseStatus(infoElement.html())
|
manga.status = parseStatus(infoElement.html())
|
||||||
manga.thumbnail_url = infoElement.select("img").attr("data-full")
|
manga.thumbnail_url = infoElement.select("img").attr("data-full")
|
||||||
return manga
|
return manga
|
||||||
|
@ -305,8 +318,8 @@ class Mintmanga : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private class OrderBy : Filter.Select<String>(
|
private class OrderBy : Filter.Select<String>(
|
||||||
"Сортировать",
|
"Сортировка (только)",
|
||||||
arrayOf("Без(фильтры)", "По году", "По алфавиту", "По популярности", "Популярно сейчас", "По рейтингу", "Новинки", "По дате обновления")
|
arrayOf("Без сортировки", "По году", "По популярности", "Популярно сейчас", "По рейтингу", "Новинки", "По дате обновления")
|
||||||
)
|
)
|
||||||
|
|
||||||
private class Genre(name: String, val id: String) : Filter.TriState(name)
|
private class Genre(name: String, val id: String) : Filter.TriState(name)
|
||||||
|
|
|
@ -5,7 +5,7 @@ ext {
|
||||||
extName = 'Readmanga'
|
extName = 'Readmanga'
|
||||||
pkgNameSuffix = 'ru.readmanga'
|
pkgNameSuffix = 'ru.readmanga'
|
||||||
extClass = '.Readmanga'
|
extClass = '.Readmanga'
|
||||||
extVersionCode = 27
|
extVersionCode = 28
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ class Readmanga : ParsedHttpSource() {
|
||||||
override fun latestUpdatesNextPageSelector() = "a.nextLink"
|
override fun latestUpdatesNextPageSelector() = "a.nextLink"
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
var url = "$baseUrl/search/advanced".toHttpUrlOrNull()!!.newBuilder()
|
val url = "$baseUrl/search/advanced".toHttpUrlOrNull()!!.newBuilder()
|
||||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||||
when (filter) {
|
when (filter) {
|
||||||
is GenreList -> filter.state.forEach { genre ->
|
is GenreList -> filter.state.forEach { genre ->
|
||||||
|
@ -98,12 +98,10 @@ class Readmanga : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is OrderBy -> {
|
is OrderBy -> {
|
||||||
if (filter.state == 0) {
|
if (filter.state > 0) {
|
||||||
url = "$baseUrl/search/advanced".toHttpUrlOrNull()!!.newBuilder()
|
val ord = arrayOf("not", "year", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
||||||
} else {
|
val ordUrl = "$baseUrl/list?sortType=$ord".toHttpUrlOrNull()!!.newBuilder()
|
||||||
val ord = arrayOf("not", "name", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
return GET(ordUrl.toString(), headers)
|
||||||
url = "$baseUrl/list?sortType=$ord".toHttpUrlOrNull()!!.newBuilder()
|
|
||||||
return GET(url.toString(), headers)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,6 +128,23 @@ class Readmanga : ParsedHttpSource() {
|
||||||
"манга"
|
"манга"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val ratingValue = infoElement.select(".col-sm-7 .rating-block").attr("data-score").toFloat() * 2
|
||||||
|
val ratingValueOver = infoElement.select(".info-icon").attr("data-content").substringAfter("Относительно остальных произведений: <b>").substringBefore("/5</b>").replace(",", ".").toFloat() * 2
|
||||||
|
val ratingVotes = infoElement.select(".col-sm-7 .user-rating meta[itemprop=\"ratingCount\"]").attr("content")
|
||||||
|
val ratingStar = when {
|
||||||
|
ratingValue > 9.5 -> "★★★★★"
|
||||||
|
ratingValue > 8.5 -> "★★★★✬"
|
||||||
|
ratingValue > 7.5 -> "★★★★☆"
|
||||||
|
ratingValue > 6.5 -> "★★★✬☆"
|
||||||
|
ratingValue > 5.5 -> "★★★☆☆"
|
||||||
|
ratingValue > 4.5 -> "★★✬☆☆"
|
||||||
|
ratingValue > 3.5 -> "★★☆☆☆"
|
||||||
|
ratingValue > 2.5 -> "★✬☆☆☆"
|
||||||
|
ratingValue > 1.5 -> "★☆☆☆☆"
|
||||||
|
ratingValue > 0.5 -> "✬☆☆☆☆"
|
||||||
|
else -> "☆☆☆☆☆"
|
||||||
|
}
|
||||||
|
|
||||||
val manga = SManga.create()
|
val manga = SManga.create()
|
||||||
var authorElement = infoElement.select("span.elem_author").first()?.text()
|
var authorElement = infoElement.select("span.elem_author").first()?.text()
|
||||||
if (authorElement == null) {
|
if (authorElement == null) {
|
||||||
|
@ -143,7 +158,7 @@ class Readmanga : ParsedHttpSource() {
|
||||||
if (infoElement.select(".another-names").isNotEmpty()) {
|
if (infoElement.select(".another-names").isNotEmpty()) {
|
||||||
altName = "Альтернативные названия:\n" + infoElement.select(".another-names").text() + "\n\n"
|
altName = "Альтернативные названия:\n" + infoElement.select(".another-names").text() + "\n\n"
|
||||||
}
|
}
|
||||||
manga.description = altName + infoElement.select("div.manga-description").text()
|
manga.description = ratingStar + " " + ratingValue + "[ⓘ" + ratingValueOver + "]" + " (голосов: " + ratingVotes + ")\n" + altName + infoElement.select("div.manga-description").text()
|
||||||
manga.status = parseStatus(infoElement.html())
|
manga.status = parseStatus(infoElement.html())
|
||||||
manga.thumbnail_url = infoElement.select("img").attr("data-full")
|
manga.thumbnail_url = infoElement.select("img").attr("data-full")
|
||||||
return manga
|
return manga
|
||||||
|
@ -306,8 +321,8 @@ class Readmanga : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private class OrderBy : Filter.Select<String>(
|
private class OrderBy : Filter.Select<String>(
|
||||||
"Сортировать",
|
"Сортировка (только)",
|
||||||
arrayOf("Без(фильтры)", "По алфавиту", "По популярности", "Популярно сейчас", "По рейтингу", "Новинки", "По дате обновления")
|
arrayOf("Без сортировки", "По году", "По популярности", "Популярно сейчас", "По рейтингу", "Новинки", "По дате обновления")
|
||||||
)
|
)
|
||||||
|
|
||||||
private class Genre(name: String, val id: String) : Filter.TriState(name)
|
private class Genre(name: String, val id: String) : Filter.TriState(name)
|
||||||
|
|
|
@ -5,7 +5,7 @@ ext {
|
||||||
extName = 'Remanga'
|
extName = 'Remanga'
|
||||||
pkgNameSuffix = 'ru.remanga'
|
pkgNameSuffix = 'ru.remanga'
|
||||||
extClass = '.Remanga'
|
extClass = '.Remanga'
|
||||||
extVersionCode = 24
|
extVersionCode = 25
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -211,15 +211,15 @@ class Remanga : ConfigurableSource, HttpSource() {
|
||||||
val ratingValue = avg_rating.toFloat()
|
val ratingValue = avg_rating.toFloat()
|
||||||
val ratingStar = when {
|
val ratingStar = when {
|
||||||
ratingValue > 9.5 -> "★★★★★"
|
ratingValue > 9.5 -> "★★★★★"
|
||||||
ratingValue > 9.0 -> "★★★★✬"
|
ratingValue > 8.5 -> "★★★★✬"
|
||||||
ratingValue > 7.5 -> "★★★★☆"
|
ratingValue > 7.5 -> "★★★★☆"
|
||||||
ratingValue > 7.0 -> "★★★✬☆"
|
ratingValue > 6.5 -> "★★★✬☆"
|
||||||
ratingValue > 5.5 -> "★★★☆☆"
|
ratingValue > 5.5 -> "★★★☆☆"
|
||||||
ratingValue > 5.0 -> "★★✬☆☆"
|
ratingValue > 4.5 -> "★★✬☆☆"
|
||||||
ratingValue > 3.5 -> "★★☆☆☆"
|
ratingValue > 3.5 -> "★★☆☆☆"
|
||||||
ratingValue > 3.0 -> "★✬☆☆☆"
|
ratingValue > 2.5 -> "★✬☆☆☆"
|
||||||
ratingValue > 1.5 -> "★☆☆☆☆"
|
ratingValue > 1.5 -> "★☆☆☆☆"
|
||||||
ratingValue > 1.0 -> "✬☆☆☆☆"
|
ratingValue > 0.5 -> "✬☆☆☆☆"
|
||||||
else -> "☆☆☆☆☆"
|
else -> "☆☆☆☆☆"
|
||||||
}
|
}
|
||||||
val o = this
|
val o = this
|
||||||
|
|
Loading…
Reference in New Issue