diff --git a/src/fr/starboundscans/build.gradle b/src/fr/starboundscans/build.gradle index 0964cdf45..7c2a9e6d8 100644 --- a/src/fr/starboundscans/build.gradle +++ b/src/fr/starboundscans/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Starbound Scans' extClass = '.StarboundScans' - themePkg = 'keyoapp' + themePkg = 'madara' baseUrl = 'https://starboundscans.com' overrideVersionCode = 0 isNsfw = false diff --git a/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt b/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt index fbebdc4c6..17dfeba51 100644 --- a/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt +++ b/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt @@ -1,7 +1,72 @@ package eu.kanade.tachiyomi.extension.fr.starboundscans -import eu.kanade.tachiyomi.multisrc.keyoapp.Keyoapp +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.util.asJsoup +import keiyoushi.utils.tryParse +import okhttp3.Headers +import okhttp3.Response +import org.jsoup.nodes.Document +import java.text.SimpleDateFormat +import java.util.Locale -class StarboundScans : Keyoapp("Starbound Scans", "https://starboundscans.com", "fr") { - override val dateSelector = "[class='text-xs text-white/50 w-fit']" +class StarboundScans : Madara( + "Starbound Scans", + "https://starboundscans.com", + "fr", + dateFormat = SimpleDateFormat("d MMMM yyyy", Locale.FRENCH), +) { + override val useNewChapterEndpoint = true + override val useLoadMoreRequest = LoadMoreStrategy.Never + override val versionId = 2 + + override val client = network.cloudflareClient + + override fun headersBuilder(): Headers.Builder = super.headersBuilder() + .add("Referer", "$baseUrl/") + + override val mangaDetailsSelectorTitle = "h1" + override val mangaDetailsSelectorThumbnail = ".project-cover" + override val mangaDetailsSelectorDescription = ".card-body .black-orion-article-content p" + override val mangaDetailsSelectorStatus = ".info-item:contains(Statut) .info-value" + override val mangaDetailsSelectorAuthor = ".info-item:contains(Auteur) a" + override val mangaDetailsSelectorArtist = ".info-item:contains(Auteur) a" + override val mangaDetailsSelectorGenre = ".info-item:contains(Genres) .genre-tag" + + private val customDateFormat = SimpleDateFormat("d MMMM yyyy", Locale.FRENCH) + + override fun chapterListParse(response: Response): List { + val document = response.asJsoup() + return document.select(".chapter-item").mapNotNull { element -> + val link = element.selectFirst("a.chapter-link")!! + val href = link.attr("abs:href") + + if (href == "#" || href.isEmpty() || element.text().contains("VIP") || element.text().contains("Réservé")) { + return@mapNotNull null + } + + SChapter.create().apply { + val urlWithSuffix = if (href.contains("?")) { + "$href&style=list" + } else { + "$href?style=list" + } + setUrlWithoutDomain(urlWithSuffix) + + val rawName = link.selectFirst("h3")!!.text() + name = rawName.replace("NEW", "").trim() + + val dateText = element.selectFirst(".chapter-meta")!!.text() + date_upload = customDateFormat.tryParse(dateText) + } + } + } + + override fun pageListParse(document: Document): List { + return document.select("img.wp-manga-chapter-img").mapIndexed { index, element -> + val imageUrl = element.attr("abs:src") + Page(index, url = document.location(), imageUrl = imageUrl) + } + } }