diff --git a/src/es/zahard/build.gradle b/src/es/zahard/build.gradle deleted file mode 100644 index 62cc5242e..000000000 --- a/src/es/zahard/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Zahard' - pkgNameSuffix = 'es.zahard' - extClass = '.Zahard' - extVersionCode = 4 - libVersion = '1.2' -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/zahard/res/mipmap-hdpi/ic_launcher.png b/src/es/zahard/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 1cd2e8e73..000000000 Binary files a/src/es/zahard/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/zahard/res/mipmap-mdpi/ic_launcher.png b/src/es/zahard/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index a6077726e..000000000 Binary files a/src/es/zahard/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/zahard/res/mipmap-xhdpi/ic_launcher.png b/src/es/zahard/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 0354c1976..000000000 Binary files a/src/es/zahard/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/zahard/res/mipmap-xxhdpi/ic_launcher.png b/src/es/zahard/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 6c12c30f8..000000000 Binary files a/src/es/zahard/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/zahard/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/zahard/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index cb1f54fbd..000000000 Binary files a/src/es/zahard/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/zahard/res/web_hi_res_512.png b/src/es/zahard/res/web_hi_res_512.png deleted file mode 100644 index 765432799..000000000 Binary files a/src/es/zahard/res/web_hi_res_512.png and /dev/null differ diff --git a/src/es/zahard/src/eu/kanade/tachiyomi/extension/es/zahard/Zahard.kt b/src/es/zahard/src/eu/kanade/tachiyomi/extension/es/zahard/Zahard.kt deleted file mode 100644 index 8e8fb7c94..000000000 --- a/src/es/zahard/src/eu/kanade/tachiyomi/extension/es/zahard/Zahard.kt +++ /dev/null @@ -1,292 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.zahard - -import android.net.Uri -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.asObservableSuccess -import eu.kanade.tachiyomi.source.model.Filter -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.ParsedHttpSource -import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable - -class Zahard : ParsedHttpSource() { - - override val name = "Zahard" - override val baseUrl = "https://zahard.top" - override val lang = "es" - override val supportsLatest = true - - // common - - private fun mangaFromElement(element: Element): SManga = - SManga.create().apply { - url = element.select("a").first().attr("href") - title = element.select("h6").text().trim() - thumbnail_url = element.select("img").attr("src") - } - - // poplular manga - - override fun popularMangaRequest(page: Int) = GET("$baseUrl/biblioteca?page=$page", headers) - - override fun popularMangaSelector() = "div.col-6.col-md-3.p-1" - - override fun popularMangaNextPageSelector() = "a[rel=next]" - - override fun popularMangaFromElement(element: Element) = mangaFromElement(element) - - // latest manga - // refer to: https://github.com/inorichi/tachiyomi-extensions/issues/4847 - - override fun fetchLatestUpdates(page: Int): Observable { - return client.newCall(latestUpdatesRequest(page)) - .asObservableSuccess() - .map { response -> - latestUpdatesParse(response, page) - } - } - - val mangasLoaded = mutableListOf() - - override fun latestUpdatesParse(response: Response): MangasPage = throw Exception("Not Used") - - fun latestUpdatesParse(response: Response, page: Int): MangasPage { - val document = response.asJsoup() - - val potentialMangas = document.select(latestUpdatesSelector()).map { element -> - latestUpdatesFromElement(element) - }.distinctBy { it.title } - - // remve duplicates globaly - if (page == 1) - mangasLoaded.clear() - var mangas = mutableListOf() - potentialMangas.forEach { manga -> - var isDuplicate = false - for (i in 0 until mangasLoaded.size) { - if (manga.title == mangasLoaded.get(i).title) { - isDuplicate = true - break - } - } - - if (!isDuplicate) { - mangasLoaded.add(manga) - mangas.add(manga) - } - } - - // extract manga urls from chapters - mangas = mangas.map { manga -> - manga.apply { - url = client.newCall(GET(url, headers)).execute().asJsoup().select("body > div.container.mb-3.mibg.rounded.px-4.py-2 > div:nth-child(2) > div > a")[0].attr("href") - } - }.toMutableList() - - // if is empty must pass something or we will get cut off - // ref: tachiyomi/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/Pager.kt:27 - if (mangas.isEmpty()) { - mangas.add(potentialMangas.get(0)) - } - - val hasNextPage = latestUpdatesNextPageSelector().let { selector -> - document.select(selector).first() - } != null - - return MangasPage(mangas, hasNextPage) - } - - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/fastpass?page=$page", headers) - - override fun latestUpdatesSelector() = "div.col-6.col-md-3.p-1" - - override fun latestUpdatesNextPageSelector() = "a[rel=next]" - - override fun latestUpdatesFromElement(element: Element): SManga { - val manga = SManga.create().apply { - url = element.select("a").first().attr("href") - title = element.select("h6").text().trim().substringBefore(" episodio") - thumbnail_url = element.select("img").attr("src") - } - - return manga - } - - // search manga - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - if (query.isNotBlank()) { - throw Exception("Source does not support search") - } else { - val uri = Uri.parse("$baseUrl/").buildUpon() - // Append uri filters - filters.forEach { - if (it is UriFilter) - it.addToUri(uri) - } - uri.appendQueryParameter("page", "$page") - return GET(uri.toString(), headers) - } - } - - override fun searchMangaSelector() = popularMangaSelector() - - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - override fun searchMangaFromElement(element: Element) = mangaFromElement(element) - - // chapter list - - override fun chapterListRequest(manga: SManga) = mangaDetailsRequest(manga) - - override fun chapterListSelector() = "a.list-group-item" - - override fun chapterFromElement(element: Element): SChapter = - SChapter.create().apply { - url = element.attr("href") - name = element.ownText().trim() + " [" + element.select("span").text().trim() + "]" - - // general pattern: "Chapter - " - chapter_number = element.ownText().split(" ")[1].toFloat() - } - - // manga details - - override fun mangaDetailsRequest(manga: SManga) = GET(manga.url, headers) - - override fun mangaDetailsParse(document: Document): SManga { - val manga = SManga.create() - manga.title = document.select("h2").text().trim() - manga.description = document.select("p[style=margin: 5px]").text().trim() - manga.thumbnail_url = document.select("div.text-center img").first().attr("src") - val glist = document.select("div.container.mb-3.mibg.rounded.px-4.py-2 a[href*=genero]").map { it.text().trim() } - manga.genre = glist.joinToString(", ") - return manga - } - - // page list - - override fun pageListRequest(chapter: SChapter) = GET(chapter.url, headers) - - override fun pageListParse(document: Document): List { - val pages = mutableListOf() - - document.select("img.img-fluid")?.forEach { - pages.add(Page(pages.size, "", it.attr("src"))) - } - - return pages - } - - // image url - - override fun imageUrlParse(document: Document) = throw Exception("Not Used") - - // filters - - /** - * Represents a filter that is able to modify a URI. - */ - private interface UriFilter { - fun addToUri(uri: Uri.Builder) - } - - private open class UriSelectFilter( - displayName: String, - val uriParam: String, - val vals: Array>, - val firstIsUnspecified: Boolean = true, - defaultValue: Int = 0 - ) : - Filter.Select(displayName, vals.map { it.second }.toTypedArray(), defaultValue), UriFilter { - override fun addToUri(uri: Uri.Builder) { - if (state != 0 || !firstIsUnspecified) - uri.appendPath(uriParam) - .appendPath(vals[state].first) - } - } - - private class TypeFilter : UriSelectFilter( - "Type", - "biblioteca", - arrayOf( - Pair("all", "All"), - Pair("manga", "Manga"), - Pair("manhwa", "Manhwa"), - Pair("manhua", "Manhua") - ) - ) - - private class GenreFilter : UriSelectFilter( - "Genre", - "genero", - arrayOf( - Pair("all", "ALL"), - Pair("accion", "Acción"), - Pair("aventura", "Aventura"), - Pair("comedia", "Comedia"), - Pair("drama", "Drama"), - Pair("recuentos-de-la-vida", "Recuentos de la vida"), - Pair("ecchi", "Ecchi"), - Pair("fantasia", "Fantasia"), - Pair("magia", "Magia"), - Pair("sobrenatural", "Sobrenatural"), - Pair("horror", "Horror"), - Pair("misterio", "Misterio"), - Pair("psicologico", "Psicológico"), - Pair("romance", "Romance"), - Pair("ciencia-ficcion", "Ciencia Ficción"), - Pair("thriller", "Thriller"), - Pair("deporte", "Deporte"), - Pair("girls-love", "Girls Love"), - Pair("boys-love", "Boys Love"), - Pair("harem", "Harem"), - Pair("mecha", "Mecha"), - Pair("supervivencia", "Supervivencia"), - Pair("reencarnacion", "Reencarnación"), - Pair("gore", "Gore"), - Pair("apocaliptico", "Apocalíptico"), - Pair("tragedia", "Tragedia"), - Pair("vida-escolar", "Vida Escolar"), - Pair("historia", "Historia"), - Pair("militar", "Militar"), - Pair("policiaco", "Policiaco"), - Pair("crimen", "Crimen"), - Pair("superpoderes", "Superpoderes"), - Pair("vampiros", "Vampiros"), - Pair("artes-marciales", "Artes Marciales"), - Pair("samurai", "Samurái"), - Pair("genero-bender", "Género Bender"), - Pair("realidad-virtual", "Realidad Virtual"), - Pair("ciberpunk", "Ciberpunk"), - Pair("musica", "Musica"), - Pair("parodia", "Parodia"), - Pair("animacion", "Animación"), - Pair("demonios", "Demonios"), - Pair("familia", "Familia"), - Pair("extranjero", "Extranjero"), - Pair("ni%C3%B1os", "Niños"), - Pair("realidad", "Realidad"), - Pair("telenovela", "Telenovela"), - Pair("guerra", "Guerra"), - Pair("oeste", "Oeste"), - Pair("hentai", "hentai"), - Pair("Comics", "Comics") - ) - ) - - override fun getFilterList() = FilterList( - Filter.Header("NOTE: Filters are ignored if using text search."), - Filter.Header("Only one filter can be used at a time."), - TypeFilter(), - GenreFilter() - ) -}