diff --git a/common-dependencies.gradle b/common-dependencies.gradle
index 61899dd79..30dd9fd30 100644
--- a/common-dependencies.gradle
+++ b/common-dependencies.gradle
@@ -1,7 +1,7 @@
// used both in common.gradle and themesources library
dependencies {
// Lib 1.3, but using specific commit so we don't need to bump up the version
- compileOnly "com.github.jmir1:extensions-lib:632a3e4"
+ compileOnly "com.github.jmir1:extensions-lib:c6577ab"
// These are provided by the app itself
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
diff --git a/src/en/fouranime/AndroidManifest.xml b/src/en/fouranime/AndroidManifest.xml
deleted file mode 100644
index acb4de356..000000000
--- a/src/en/fouranime/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/en/fouranime/build.gradle b/src/en/fouranime/build.gradle
deleted file mode 100644
index b4792b2b2..000000000
--- a/src/en/fouranime/build.gradle
+++ /dev/null
@@ -1,17 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-
-ext {
- extName = '4anime.to'
- pkgNameSuffix = 'en.fouranime'
- extClass = '.FourAnime'
- extVersionCode = 12
- libVersion = '12'
-}
-dependencies {
- ext.coroutinesVersion = "1.4.3"
- implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
- implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion")
-}
-
-apply from: "$rootDir/common.gradle"
\ No newline at end of file
diff --git a/src/en/fouranime/res/mipmap-hdpi/ic_launcher.png b/src/en/fouranime/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 5a376cfaf..000000000
Binary files a/src/en/fouranime/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/en/fouranime/res/mipmap-mdpi/ic_launcher.png b/src/en/fouranime/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index eb4ad9aeb..000000000
Binary files a/src/en/fouranime/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/en/fouranime/res/mipmap-xhdpi/ic_launcher.png b/src/en/fouranime/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index c17cfc623..000000000
Binary files a/src/en/fouranime/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/en/fouranime/res/mipmap-xxhdpi/ic_launcher.png b/src/en/fouranime/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 26838ce08..000000000
Binary files a/src/en/fouranime/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/en/fouranime/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/fouranime/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index b0b87c780..000000000
Binary files a/src/en/fouranime/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/en/fouranime/res/web_hi_res_512.png b/src/en/fouranime/res/web_hi_res_512.png
deleted file mode 100644
index 429d5e0b8..000000000
Binary files a/src/en/fouranime/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/en/fouranime/src/eu/kanade/tachiyomi/animeextension/en/fouranime/FourAnime.kt b/src/en/fouranime/src/eu/kanade/tachiyomi/animeextension/en/fouranime/FourAnime.kt
deleted file mode 100644
index 038e3eb04..000000000
--- a/src/en/fouranime/src/eu/kanade/tachiyomi/animeextension/en/fouranime/FourAnime.kt
+++ /dev/null
@@ -1,121 +0,0 @@
-package eu.kanade.tachiyomi.animeextension.en.fouranime
-
-import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
-import eu.kanade.tachiyomi.animesource.model.SAnime
-import eu.kanade.tachiyomi.animesource.model.SEpisode
-import eu.kanade.tachiyomi.animesource.model.Video
-import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
-import eu.kanade.tachiyomi.network.GET
-import okhttp3.Request
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-import rx.Observable
-
-class FourAnime : ParsedAnimeHttpSource() {
-
- override val name = "4anime.to"
-
- override val baseUrl = "https://4anime.to"
-
- override val lang = "en"
-
- override val supportsLatest = true
-
- override fun popularAnimeSelector(): String = "#headerDIV_4"
-
- override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/popular-this-week/page/$page")
-
- override fun popularAnimeFromElement(element: Element): SAnime {
- val anime = SAnime.create()
- anime.setUrlWithoutDomain(element.select("#headerA_5").first().attr("href"))
- anime.thumbnail_url = element.select("#headerIMG_6").first().attr("src")
- anime.title = element.select("#headerIMG_6").first().attr("title")
- return anime
- }
-
- override fun popularAnimeNextPageSelector(): String? = "a.nextpostslink"
-
- override fun episodeListSelector() = "ul.episodes.active.range li a"
-
- override fun fetchEpisodeList(anime: SAnime): Observable> {
- return super.fetchEpisodeList(anime).flatMap { Observable.just(it.reversed()) }
- }
-
- override fun episodeFromElement(element: Element): SEpisode {
- val episode = SEpisode.create()
- episode.setUrlWithoutDomain(element.attr("href"))
- episode.episode_number = episodeNumberFromText(element.text())
- episode.name = "Episode " + element.text()
- episode.date_upload = System.currentTimeMillis()
- return episode
- }
-
- private fun episodeNumberFromText(text: String): Float {
- return try {
- text.toFloat()
- } catch (e: NumberFormatException) {
- val firstLetterAsNumber = (text.replace("[\\d]".toRegex(), "").first().toFloat() - 64F) / 100F
- text.replace("[^\\d]".toRegex(), "").toFloat() + firstLetterAsNumber
- }
- }
-
- override fun videoListSelector() = "source"
-
- override fun videoFromElement(element: Element): Video {
- return Video(element.attr("src"), "1080p", null, null)
- }
-
- override fun fetchVideoUrl(video: Video): Observable {
- return Observable.just(video.url)
- }
-
- override fun videoUrlSelector() = throw Exception("not used")
-
- override fun videoUrlFromElement(element: Element) = throw Exception("not used")
-
- override fun searchAnimeFromElement(element: Element): SAnime {
- val anime = SAnime.create()
- anime.setUrlWithoutDomain(element.select("a").attr("href"))
- anime.thumbnail_url = element.select("img").first().attr("src")
- anime.title = element.select("div div").first().text()
- return anime
- }
-
- override fun searchAnimeNextPageSelector(): String = "a.nextpostslink"
-
- override fun searchAnimeSelector(): String = "#headerDIV_95"
-
- override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = GET("$baseUrl/?s=$query")
-
- override fun animeDetailsParse(document: Document): SAnime {
- val anime = SAnime.create()
- anime.title = document.select("p.single-anime-desktop").text()
- anime.genre = document.select("div.tag a").joinToString(", ") { it.text() }
- anime.description = document.select("div#description-mob p[class!=description-mobile]").text()
- anime.author = document.select("div.detail a[data-reactid=\".0.1.0.0.2.0.0.1.1.1.1\"]").text()
- anime.status = parseStatus(document.select("div.detail a[data-reactid=\".0.1.0.0.2.0.0.1.1.3.1\"]").text())
- return anime
- }
-
- private fun parseStatus(statusString: String): Int {
- return when (statusString) {
- "Currently Airing" -> SAnime.ONGOING
- "Completed" -> SAnime.COMPLETED
- else -> SAnime.UNKNOWN
- }
- }
-
- override fun latestUpdatesNextPageSelector(): String = "a.nextpostslink"
-
- override fun latestUpdatesFromElement(element: Element): SAnime {
- val anime = SAnime.create()
- anime.setUrlWithoutDomain("https://4anime.to/anime" + element.select("#headerA_5").first().attr("href").removePrefix("https://4anime.to").split("-episode-").first())
- anime.thumbnail_url = element.select("#headerIMG_6").first().attr("src")
- anime.title = element.select("#headerA_5").first().attr("alt")
- return anime
- }
-
- override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/recently-added/page/$page")
-
- override fun latestUpdatesSelector(): String = "#headerDIV_4"
-}
diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle
index 217f9d1d3..20c671230 100644
--- a/src/en/gogoanime/build.gradle
+++ b/src/en/gogoanime/build.gradle
@@ -5,7 +5,7 @@ ext {
extName = 'Gogoanime'
pkgNameSuffix = 'en.gogoanime'
extClass = '.GogoAnime'
- extVersionCode = 6
+ extVersionCode = 7
libVersion = '12'
}
dependencies {
diff --git a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt
index 1966a5b0c..d3e54017b 100644
--- a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt
+++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt
@@ -131,9 +131,7 @@ class GogoAnime : ParsedAnimeHttpSource() {
return linkList.reversed()
}
- override fun videoUrlFromElement(element: Element): String = throw Exception("not used")
-
- override fun videoUrlSelector() = throw Exception("not used")
+ override fun videoUrlParse(document: Document) = throw Exception("not used")
override fun searchAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create()
diff --git a/src/en/tenshimoe/build.gradle b/src/en/tenshimoe/build.gradle
index f90baac35..a900ca796 100644
--- a/src/en/tenshimoe/build.gradle
+++ b/src/en/tenshimoe/build.gradle
@@ -5,7 +5,7 @@ ext {
extName = 'tenshi.moe'
pkgNameSuffix = 'en.tenshimoe'
extClass = '.TenshiMoe'
- extVersionCode = 17
+ extVersionCode = 18
libVersion = '12'
}
dependencies {
diff --git a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt
index 2abfdf206..4d2918a39 100644
--- a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt
+++ b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt
@@ -107,9 +107,7 @@ class TenshiMoe : ParsedAnimeHttpSource() {
return Video(element.attr("src"), element.attr("title"), element.attr("src"), null)
}
- override fun videoUrlFromElement(element: Element): String = throw Exception("not used")
-
- override fun videoUrlSelector() = throw Exception("not used")
+ override fun videoUrlParse(document: Document) = throw Exception("not used")
override fun searchAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create()