diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/FlameComics.kt similarity index 99% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/FlameComics.kt index d94b7248..1dc95fa7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/FlameComics.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.en +package org.koitharu.kotatsu.parsers.site.en import androidx.collection.ArraySet import okhttp3.HttpUrl diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt index 0b3c29c4..f843df58 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt @@ -6,7 +6,9 @@ import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import org.jsoup.nodes.Document +import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey @@ -43,9 +45,6 @@ internal abstract class WpComicsParser( isSearchSupported = true, ) - @JvmField - protected val coverSrcAttrs = arrayOf("data-original", "src") - override suspend fun getFilterOptions() = MangaListFilterOptions( availableTags = fetchAvailableTags(), availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED), @@ -164,7 +163,7 @@ internal abstract class WpComicsParser( publicUrl = absUrl, rating = RATING_UNKNOWN, isNsfw = false, - coverUrl = item.selectFirst("div.image a img")?.src(coverSrcAttrs).orEmpty(), + coverUrl = item.selectFirst("div.image a img")?.findImageUrl().orEmpty(), largeCoverUrl = null, tags = mangaTags, state = mangaState, @@ -333,4 +332,12 @@ internal abstract class WpComicsParser( else -> 0 } } + + protected fun Element.findImageUrl(): String? { + val attrs = attributes().filter { attr -> + attr.value.toHttpUrlOrNull() != null + } + // src attribute should have a lowest priority + return attrs.maxByOrNull { it.key != "src" }?.value + } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt index 201e760f..ebc7efc5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt @@ -98,7 +98,7 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : id = generateUid(href), url = href, publicUrl = href.toAbsoluteUrl(div.host ?: domain), - coverUrl = div.selectFirst("div.image-item img")?.src(coverSrcAttrs).orEmpty(), + coverUrl = div.selectFirst("div.image-item img")?.findImageUrl().orEmpty(), title = div.selectFirst("h3 a")?.text().orEmpty(), altTitle = null, rating = RATING_UNKNOWN, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt index 1ce69a74..4a0f246d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt @@ -99,7 +99,7 @@ internal class TopTruyen(context: MangaLoaderContext) : id = generateUid(href), url = href, publicUrl = href.toAbsoluteUrl(div.host ?: domain), - coverUrl = div.selectFirst("div.image-item img")?.src(coverSrcAttrs).orEmpty(), + coverUrl = div.selectFirst("div.image-item img")?.findImageUrl().orEmpty(), title = div.selectFirst("h3 a")?.text().orEmpty(), altTitle = null, rating = RATING_UNKNOWN,