From 801106dee5cfa82e361aab75713dfc52275dbdfc Mon Sep 17 00:00:00 2001 From: Chopper <156493704+choppeh@users.noreply.github.com> Date: Sat, 7 Jun 2025 23:52:53 -0300 Subject: [PATCH] Add GeassComics (#9074) * Add GeassComics * Add suggested changes --- src/pt/geasscomics/build.gradle | 8 ++ .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2845 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1599 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3489 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6246 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8680 bytes .../extension/pt/geasscomics/GeassComics.kt | 118 ++++++++++++++++ .../pt/geasscomics/GeassComicsDto.kt | 131 ++++++++++++++++++ .../pt/geasscomics/GeassComicsFilter.kt | 43 ++++++ 9 files changed, 300 insertions(+) create mode 100644 src/pt/geasscomics/build.gradle create mode 100644 src/pt/geasscomics/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/geasscomics/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/geasscomics/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/geasscomics/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/geasscomics/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComics.kt create mode 100644 src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsDto.kt create mode 100644 src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsFilter.kt diff --git a/src/pt/geasscomics/build.gradle b/src/pt/geasscomics/build.gradle new file mode 100644 index 000000000..e13c0153e --- /dev/null +++ b/src/pt/geasscomics/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'Geass Comics' + extClass = '.GeassComics' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/pt/geasscomics/res/mipmap-hdpi/ic_launcher.png b/src/pt/geasscomics/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..18f7f1c6c9b4a8800ad574566cc37a0acf8af791 GIT binary patch literal 2845 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 P00000NkvXXu0mjf|EF;u literal 0 HcmV?d00001 diff --git a/src/pt/geasscomics/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/geasscomics/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cdba13e885589df6a277a2d220cea69b8b7a6e68 GIT binary patch literal 6246 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 QK>z>%07*qoM6N<$f}hmaegFUf literal 0 HcmV?d00001 diff --git a/src/pt/geasscomics/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/geasscomics/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c968c8bba891c35113cc359e7ac2f5c784317dce GIT binary patch literal 8680 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 + return MangasPage(dto.mangas.map(MangaDto::toSManga), dto.hasNextPage()) + } + + // ========================= Latest ===================================== + + override fun latestUpdatesRequest(page: Int) = GET("$apiUrl/capitulos/recentes?page=$page&limit=150", headers) + + override fun latestUpdatesParse(response: Response): MangasPage { + val dto = response.parseAs() + return MangasPage(dto.mangas.map(SimpleMangaDto::toSManga).distinctBy(SManga::url), false) + } + + // ========================= Search ===================================== + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$apiUrl/obras".toHttpUrl().newBuilder() + .addQueryParameter("page", page.toString()) + .addQueryParameter("limit", "12") + + if (query.isNotBlank()) { + url.addPathSegment("search") + url.addQueryParameter("q", query) + } + + filters.forEach { filter -> + when (filter) { + is GenreList -> { + val genres = filter.state.filter(GenreCheckBox::state) + if (genres.isEmpty()) return@forEach + url.addQueryParameter("generos", genres.joinToString { it.id }) + } + else -> {} + } + } + return GET(url.build(), headers) + } + + override fun searchMangaParse(response: Response): MangasPage = popularMangaParse(response) + + // ========================= Details ==================================== + + override fun getMangaUrl(manga: SManga) = "$baseUrl/manga/${manga.url}" + + override fun mangaDetailsRequest(manga: SManga) = + GET("$apiUrl/obras/${manga.url}/info", headers) + + override fun mangaDetailsParse(response: Response): SManga = + response.parseAs().manga.toSManga() + + // ========================= Chapters =================================== + + override fun getChapterUrl(chapter: SChapter): String = "$baseUrl/${chapter.url}" + + override fun chapterListRequest(manga: SManga): Request = mangaDetailsRequest(manga) + + override fun chapterListParse(response: Response): List = + response.parseAs().toChapters() + + // ========================= Pages ====================================== + + override fun pageListRequest(chapter: SChapter) = + GET("$apiUrl${chapter.url.replace("manga", "obras").replace("chapter", "capitulos")}", headers) + + override fun pageListParse(response: Response): List = + response.parseAs().toPages() + + override fun imageUrlParse(response: Response): String = "" + + // ========================= Filters ==================================== + + override fun getFilterList(): FilterList { + return FilterList( + listOf( + GenreList( + title = "Gêneros", + genres = genresList.sortedBy(Genre::name), + ), + ), + ) + } +} diff --git a/src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsDto.kt b/src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsDto.kt new file mode 100644 index 000000000..23d282b4f --- /dev/null +++ b/src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsDto.kt @@ -0,0 +1,131 @@ +package eu.kanade.tachiyomi.extension.pt.geasscomics + +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +class Pagination( + @SerialName("has_next") + val hasNext: Boolean = false, +) + +@Serializable +class PopularDto( + @SerialName("obras") + val mangas: List = emptyList(), + val pagination: Pagination = Pagination(), +) { + fun hasNextPage() = pagination.hasNext +} + +@Serializable +class LatestDto( + @SerialName("recentes") + val mangas: List = emptyList(), +) + +@Serializable +class DetailsDto( + @SerialName("obra") + val manga: MangaDto, +) { + fun toChapters(): List { + return manga.chapters.map { + SChapter.create().apply { + name = it.name + chapter_number = it.number.toFloat() + url = "/manga/${manga.id}/chapter/${it.number}" + } + }.sortedBy(SChapter::chapter_number).reversed() + } +} + +@Serializable +class SimpleMangaDto( + @SerialName("obra_id") + val id: Int, + @SerialName("titulo_obra") + val title: String, + @SerialName("capa") + val thumbnail_url: String, +) { + fun toSManga() = SManga.create().apply { + title = this@SimpleMangaDto.title + thumbnail_url = this@SimpleMangaDto.thumbnail_url + url = this@SimpleMangaDto.id.toString() + } +} + +@Serializable +class MangaDto( + val id: Int, + @SerialName("titulo") + val title: String, + @SerialName("artista") + val artist: String, + @SerialName("autor") + val author: String, + @SerialName("capa") + val thumbnail_url: String, + @SerialName("generos") + val genres: List, + val sinopse: String, + val status: String, + @SerialName("capitulos") + val chapters: List = emptyList(), +) { + + fun toSManga() = SManga.create().apply { + title = this@MangaDto.title + description = this@MangaDto.sinopse + thumbnail_url = this@MangaDto.thumbnail_url + artist = this@MangaDto.artist + author = this@MangaDto.author + genre = genres.joinToString { it.name } + url = this@MangaDto.id.toString() + status = when (this@MangaDto.status) { + "EM ANDAMENTO" -> SManga.ONGOING + "COMPLETO" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + initialized = true + } + + @Serializable + class Genre( + @SerialName("nome") + val name: String, + ) +} + +@Serializable +class ChapterDto( + val id: Long, + @SerialName("numero") + val number: String, + @SerialName("titulo") + val name: String, +) + +@Serializable +class PageDto( + @SerialName("capitulo") + val chapter: Image, +) { + fun toPages(): List = + chapter.images.mapIndexed { index, source -> Page(index, imageUrl = source.url) } + + @Serializable + class Source( + val url: String, + ) + + @Serializable + class Image( + @SerialName("imagens") + val images: List = emptyList(), + ) +} diff --git a/src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsFilter.kt b/src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsFilter.kt new file mode 100644 index 000000000..04f48cc3e --- /dev/null +++ b/src/pt/geasscomics/src/eu/kanade/tachiyomi/extension/pt/geasscomics/GeassComicsFilter.kt @@ -0,0 +1,43 @@ +package eu.kanade.tachiyomi.extension.pt.geasscomics + +import eu.kanade.tachiyomi.source.model.Filter + +class GenreList(title: String, genres: List) : Filter.Group(title, genres.map { GenreCheckBox(it.name, it.id.toString()) }) +class GenreCheckBox(name: String, val id: String = name) : Filter.CheckBox(name) +class Genre(val id: Int, val name: String) + +val genresList = listOf( + Genre(10, "Isekai"), + Genre(11, "Sistema"), + Genre(12, "Shonen"), + Genre(13, "Shojo"), + Genre(14, "Seinen"), + Genre(15, "Josei"), + Genre(16, "Slice of Life"), + Genre(17, "Horror"), + Genre(18, "Fantasy"), + Genre(19, "Romance"), + Genre(20, "Comedia"), + Genre(21, "Sports"), + Genre(22, "Supernatural"), + Genre(23, "Mystery"), + Genre(24, "Psychological"), + Genre(25, "Aventura"), + Genre(26, "Adulto"), + Genre(27, "Hentai"), + Genre(29, "Harém"), + Genre(30, "Ação"), + Genre(31, "Drama"), + Genre(32, "Escolar"), + Genre(35, "Monstros"), + Genre(36, "Ecchi"), + Genre(37, "Magia"), + Genre(38, "Demônios"), + Genre(40, "Dungeons"), + Genre(41, "Manga"), + Genre(42, "Apocalipse"), + Genre(43, "Manhwa"), + Genre(44, "Ficção Científica"), + Genre(45, "Sugestivo"), + Genre(46, "Loli"), +)