Adds Manga.in.ua (#13293)

* Start of Extension

* Update Mangainua.kt

* Update Mangainua.kt
This commit is contained in:
happywillow0 2022-09-01 16:14:42 -04:00 committed by GitHub
parent 8ac6bfcce1
commit 096c073d58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 127 additions and 0 deletions

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="eu.kanade.tachiyomi.extension" />

View File

@ -0,0 +1,12 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
ext {
extName = 'MangaInUa'
pkgNameSuffix = 'uk.mangainua'
extClass = '.Mangainua'
extVersionCode = 1
isNsfw = true
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,113 @@
package eu.kanade.tachiyomi.extension.uk.mangainua
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
class Mangainua : ParsedHttpSource() {
// Info
override val name = "MANGA/in/UA"
override val baseUrl = "https://manga.in.ua"
override val lang = "uk"
override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient
override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("Referer", baseUrl)
// Popular
override fun popularMangaRequest(page: Int): Request {
return GET(baseUrl)
}
override fun popularMangaSelector() = "div.owl-carousel div.card--big"
override fun popularMangaFromElement(element: Element): SManga {
return SManga.create().apply {
element.select("h3.card__title a").first().let {
setUrlWithoutDomain(it.attr("href"))
title = it.text()
}
thumbnail_url = element.select("img").attr("abs:src")
}
}
override fun popularMangaNextPageSelector() = "not used"
// Latest
override fun latestUpdatesRequest(page: Int): Request {
return GET("$baseUrl/page/$page/")
}
override fun latestUpdatesSelector() = "main.main article.item"
override fun latestUpdatesFromElement(element: Element): SManga {
return SManga.create().apply {
element.select("h3.card__title a").first().let {
setUrlWithoutDomain(it.attr("href"))
title = it.text()
}
thumbnail_url = element.select("img").attr("abs:data-src")
}
}
override fun latestUpdatesNextPageSelector() = "a:contains(Наступна)"
// Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = throw UnsupportedOperationException("Not supported / Не підтримується")
override fun searchMangaSelector() = popularMangaSelector()
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
// Manga Details
override fun mangaDetailsParse(document: Document): SManga {
return SManga.create().apply {
title = document.select("span.UAname").text()
description = document.select("div.item__full-description").text()
genre = document.select("div.item__full-sideba--header:eq(4) span").first().select("a").joinToString { it.text() }
thumbnail_url = document.select("div.item__full-sidebar--poster img").first().attr("abs:src")
}
}
// Chapters
override fun chapterListSelector() = "div.ltcitems"
override fun chapterFromElement(element: Element): SChapter {
return SChapter.create().apply {
element.select("a").let { urlElement ->
setUrlWithoutDomain(urlElement.attr("href"))
name = urlElement.text().substringAfter("НОВЕ").trim()
}
date_upload = parseDate(element.select("div.ltcright:containsOwn(.)").text())
}
}
override fun chapterListParse(response: Response): List<SChapter> {
return super.chapterListParse(response).reversed()
}
// Pages
override fun pageListParse(document: Document): List<Page> {
return document.select("ul.loadcomicsimages img").mapIndexed { i, element ->
Page(i, "", element.attr("abs:data-src"))
}
}
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used")
private fun parseDate(dateStr: String): Long {
return runCatching { DATE_FORMATTER.parse(dateStr)?.time }
.getOrNull() ?: 0L
}
companion object {
private val DATE_FORMATTER by lazy {
SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH)
}
}
}