Add Elan.school extension (#15227)
* Add Elan.school extension * Non-adaptive icons
This commit is contained in:
parent
2efe1af88b
commit
9bf6a2772f
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest package="eu.kanade.tachiyomi.extension" />
|
|
@ -0,0 +1,12 @@
|
|||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlinx-serialization'
|
||||
|
||||
ext {
|
||||
extName = 'Elan School'
|
||||
pkgNameSuffix = 'en.elanschool'
|
||||
extClass = '.ElanSchool'
|
||||
extVersionCode = 1
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 5.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
|
@ -0,0 +1,109 @@
|
|||
package eu.kanade.tachiyomi.extension.en.elanschool
|
||||
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||
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.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Element
|
||||
import rx.Observable
|
||||
|
||||
class ElanSchool : HttpSource() {
|
||||
|
||||
override val name = "Elan School"
|
||||
|
||||
override val lang = "en"
|
||||
|
||||
override val baseUrl = "https://elan.school"
|
||||
|
||||
override val supportsLatest = false
|
||||
|
||||
override fun fetchPopularManga(page: Int): Observable<MangasPage> {
|
||||
val manga = SManga.create().apply {
|
||||
url = "/chapters/?dps_paged=$page"
|
||||
title = "Elan School"
|
||||
thumbnail_url = "$baseUrl/wp-content/uploads/2018/11/The-Elan-School-Comic-1cNEW-1-768x1491.jpg"
|
||||
description = "A 16 year old boy named Joe gets indoctrinated into a sick cult that is run by imprisoned teenagers. Based on the true story of the Elan School."
|
||||
status = SManga.ONGOING
|
||||
author = "Joe Nobody"
|
||||
artist = "Joe Nobody"
|
||||
}
|
||||
|
||||
return Observable.just(MangasPage(listOf(manga), false))
|
||||
}
|
||||
|
||||
override fun fetchSearchManga(page: Int, query: String, filters: FilterList) = fetchPopularManga(page)
|
||||
|
||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> = fetchPopularManga(1)
|
||||
.map { it.mangas.first().apply { initialized = true } }
|
||||
|
||||
private fun chapterNextPageSelector() = "a.next"
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val allChaps = mutableListOf<SChapter>()
|
||||
var document = response.asJsoup()
|
||||
|
||||
while (true) {
|
||||
val chapters = document.select(chapterListSelector()).map {
|
||||
chapterFromElement(it)
|
||||
}
|
||||
if (chapters.isEmpty())
|
||||
break
|
||||
|
||||
allChaps += chapters
|
||||
|
||||
val hasNext = document.select(chapterNextPageSelector()).isNotEmpty()
|
||||
if (!hasNext)
|
||||
break
|
||||
|
||||
val nextUrl = document.select(chapterNextPageSelector()).attr("href")
|
||||
document = client.newCall(GET(nextUrl, headers)).execute().asJsoup()
|
||||
}
|
||||
|
||||
return allChaps.reversed()
|
||||
}
|
||||
|
||||
private fun chapterListSelector() = "div.listing-item > a.title"
|
||||
|
||||
private fun chapterFromElement(element: Element): SChapter {
|
||||
return SChapter.create().apply {
|
||||
name = element.text()
|
||||
setUrlWithoutDomain(element.attr("href"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
val document = response.asJsoup()
|
||||
return document.select("img[data-orig-file]").mapIndexed { i, img ->
|
||||
Page(i, "", img.attr("src"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun latestUpdatesRequest(page: Int) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun popularMangaRequest(page: Int) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun latestUpdatesParse(response: Response) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun popularMangaParse(response: Response) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun searchMangaParse(response: Response) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun mangaDetailsParse(response: Response) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
|
||||
override fun imageUrlParse(response: Response) =
|
||||
throw UnsupportedOperationException("Not used!")
|
||||
}
|
Loading…
Reference in New Issue