diff --git a/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..803527ed8 Binary files /dev/null and b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..24fd95428 Binary files /dev/null and b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..d65e4d9b6 Binary files /dev/null and b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..c14b725c4 Binary files /dev/null and b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4619dd2f0 Binary files /dev/null and b/multisrc/overrides/mangathemesia/lunarscans/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mangathemesia/lunarscans/res/web_hi_res_512.png b/multisrc/overrides/mangathemesia/lunarscans/res/web_hi_res_512.png new file mode 100644 index 000000000..6dfd3fe6a Binary files /dev/null and b/multisrc/overrides/mangathemesia/lunarscans/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/mangathemesia/lunarscans/src/LunarScans.kt b/multisrc/overrides/mangathemesia/lunarscans/src/LunarScans.kt new file mode 100644 index 000000000..e2f4e9b50 --- /dev/null +++ b/multisrc/overrides/mangathemesia/lunarscans/src/LunarScans.kt @@ -0,0 +1,77 @@ +package eu.kanade.tachiyomi.extension.en.lunarscans + +import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimit +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.Page +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import okhttp3.Request +import org.jsoup.nodes.Document + +class LunarScans : MangaThemesia( + "Lunar Scans", + "https://lunarscan.org", + "en", + "/series", +) { + override val client = super.client.newBuilder() + .rateLimit(1) + .build() + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + return if (query.isEmpty()) { + super.searchMangaRequest(page, query, filters) + } else { + GET("$baseUrl/?s=$query&page=$page", headers) + } + } + + override fun getFilterList(): FilterList { + val filters = mutableListOf>( + Filter.Header("Note: Can't be used with text search!"), + Filter.Separator(), + StatusFilter(), + TypeFilter(), + OrderByFilter(), + Filter.Header("Genre exclusion is not available for all sources"), + GenreListFilter(getGenreList()), + ) + if (hasProjectPage) { + filters.addAll( + mutableListOf>( + Filter.Separator(), + Filter.Header("NOTE: Can't be used with other filter!"), + Filter.Header("$name Project List page"), + ProjectFilter(), + ), + ) + } + return FilterList(filters) + } + + override fun pageListParse(document: Document): List { + val scriptContent = document.selectFirst("script:containsData(ts_reader)")?.data() + ?: return super.pageListParse(document) + val jsonString = scriptContent.substringAfter("ts_reader.run(").substringBefore(");") + val tsReader = json.decodeFromString(jsonString) + val imageUrls = tsReader.sources.firstOrNull()?.images ?: return emptyList() + return imageUrls.mapIndexed { index, imageUrl -> Page(index, imageUrl = imageUrl) } + } + + @Serializable + data class TSReader( + val sources: List, + ) + + @Serializable + data class ReaderImageSource( + val source: String, + val images: List, + ) +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt index 9de8f7f9e..3c91e0b6c 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt @@ -61,6 +61,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans", overrideVersionCode = 1), SingleLang("Legacy Scans", "https://legacy-scans.com", "fr", pkgName = "flamescansfr"), SingleLang("LianScans", "https://www.lianscans.my.id", "id", isNsfw = true), + SingleLang("Lunar Scans", "https://lunarscan.org", "en", isNsfw = true), SingleLang("Magus Manga", "https://magusmanga.com", "ar"), SingleLang("Manga Indo.me", "https://mangaindo.me", "id", className = "MangaIndoMe"), SingleLang("Manga Raw.org", "https://mangaraw.org", "ja", className = "MangaRawOrg", overrideVersionCode = 1),