diff --git a/src/all/wpcomics/build.gradle b/src/all/wpcomics/build.gradle index 6b21872df..884294c9b 100644 --- a/src/all/wpcomics/build.gradle +++ b/src/all/wpcomics/build.gradle @@ -5,7 +5,7 @@ ext { appName = 'Tachiyomi: WP-Comics' pkgNameSuffix = 'all.wpcomics' extClass = '.WPComicsFactory' - extVersionCode = 2 + extVersionCode = 3 libVersion = '1.2' } diff --git a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt index 74bd321fe..771679fd0 100644 --- a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt +++ b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt @@ -44,7 +44,7 @@ abstract class WPComics( } } - override fun popularMangaNextPageSelector() = "a.next-page" + override fun popularMangaNextPageSelector() = "a.next-page, a[rel=next]" // Latest @@ -137,10 +137,19 @@ abstract class WPComics( // sources sometimes have an image element with an empty attr that isn't really an image private fun imageOrNull(element: Element): String? { + fun Element.hasValidAttr(attr: String): Boolean { + val regex = Regex("""https?://.*""", RegexOption.IGNORE_CASE) + return when { + this.attr(attr).isNullOrBlank() -> false + this.attr("abs:$attr").matches(regex) -> true + else -> false + } + } + return when { - element.attr("data-original").contains(Regex("""\.(jpg|png)""", RegexOption.IGNORE_CASE)) -> element.attr("abs:data-original") - element.attr("data-src").contains(Regex("""\.(jpg|png)""", RegexOption.IGNORE_CASE)) -> element.attr("abs:data-src") - element.attr("src").contains(Regex("""\.(jpg|png)""", RegexOption.IGNORE_CASE)) -> element.attr("abs:src") + element.hasValidAttr("data-original") -> element.attr("abs:data-original") + element.hasValidAttr("data-src") -> element.attr("abs:data-src") + element.hasValidAttr("src") -> element.attr("abs:src") else -> null } } diff --git a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt index b36603675..a594dbedd 100644 --- a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt +++ b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import okhttp3.Request import org.jsoup.nodes.Element @@ -14,7 +15,8 @@ class WPComicsFactory : SourceFactory { override fun createSources(): List<Source> = listOf( ManhuaPlus(), ManhuaES(), - MangaSum() + MangaSum(), + XoxoComics() ) } @@ -53,3 +55,21 @@ private class MangaSum : WPComics("MangaSum", "https://mangasum.com", "en", Simp * and MM/dd/yy; see about getting all 3 working (currently at 2/3) */ } + +private class XoxoComics : WPComics("XOXO Comics", "https://xoxocomics.com", "en", SimpleDateFormat("MM/dd/yy", Locale.US), null) { + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/comic-updates?page=$page", headers) + override fun latestUpdatesSelector() = "li.row" + override fun latestUpdatesFromElement(element: Element): SManga { + return SManga.create().apply { + element.select("h3 a").let { + title = it.text() + setUrlWithoutDomain(it.attr("href")) + } + thumbnail_url = element.select("img").attr("data-original") + } + } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + return GET("$baseUrl/search?keyword=$query&page=$page", headers) + } + override fun pageListRequest(chapter: SChapter): Request = GET(baseUrl + "${chapter.url}/all") +}