diff --git a/src/vi/fecomic/build.gradle b/src/vi/fecomic/build.gradle new file mode 100644 index 000000000..46f81c125 --- /dev/null +++ b/src/vi/fecomic/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'Fecomic' + extClass = '.Fecomic' + themePkg = 'madara' + baseUrl = 'https://fecomicc.xyz' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/vi/fecomic/res/mipmap-hdpi/ic_launcher.png b/src/vi/fecomic/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..62c44940c Binary files /dev/null and b/src/vi/fecomic/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/vi/fecomic/res/mipmap-mdpi/ic_launcher.png b/src/vi/fecomic/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..0420d88a2 Binary files /dev/null and b/src/vi/fecomic/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/vi/fecomic/res/mipmap-xhdpi/ic_launcher.png b/src/vi/fecomic/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..19318a08d Binary files /dev/null and b/src/vi/fecomic/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/vi/fecomic/res/mipmap-xxhdpi/ic_launcher.png b/src/vi/fecomic/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..92fb68d0e Binary files /dev/null and b/src/vi/fecomic/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/vi/fecomic/res/mipmap-xxxhdpi/ic_launcher.png b/src/vi/fecomic/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4e61d518a Binary files /dev/null and b/src/vi/fecomic/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/vi/fecomic/src/eu/kanade/tachiyomi/extension/vi/fecomic/Fecomic.kt b/src/vi/fecomic/src/eu/kanade/tachiyomi/extension/vi/fecomic/Fecomic.kt new file mode 100644 index 000000000..fefa90e9a --- /dev/null +++ b/src/vi/fecomic/src/eu/kanade/tachiyomi/extension/vi/fecomic/Fecomic.kt @@ -0,0 +1,64 @@ +package eu.kanade.tachiyomi.extension.vi.fecomic + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import okhttp3.HttpUrl.Companion.toHttpUrl +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class Fecomic : Madara( + "Fecomic", + "https://fecomicc.xyz", + "vi", + dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.ROOT), +) { + override val useLoadMoreRequest = LoadMoreStrategy.Always + override val useNewChapterEndpoint = false + + override val mangaSubString = "comic" + + override val mangaDetailsSelectorStatus = "div.post-status" + override val mangaDetailsSelectorDescription = "div.desc div.more" + override val mangaDetailsSelectorGenre = "div.genres a" + + override fun popularMangaFromElement(element: Element): SManga { + return super.popularMangaFromElement(element).apply { + // Skip 301 redirect + url = url.asHttps() + thumbnail_url = thumbnail_url.asHttpsOrNull() + } + } + + override fun searchMangaFromElement(element: Element): SManga { + return super.searchMangaFromElement(element).apply { + // Skip 301 redirect + url = url.asHttps() + thumbnail_url = thumbnail_url.asHttpsOrNull() + } + } + + override fun chapterFromElement(element: Element): SChapter { + return super.chapterFromElement(element).apply { + // Skip 301 redirect + val httpUrl = url.toHttpUrl() + // Removes trailing slash, keeps query parameters + if (httpUrl.pathSegments.lastOrNull()?.isEmpty() == true) { + url = httpUrl.newBuilder().removePathSegment(httpUrl.pathSegments.size - 1).build().toString() + } + } + } + + private fun String.asHttps(): String { + return if (this.startsWith("http://")) { + "https://${this.removePrefix("http://")}" + } else { + this + } + } + + private fun String?.asHttpsOrNull(): String? { + return this?.asHttps() + } +}