[SKIP CI] use lib version 12
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
// used both in common.gradle and themesources library
|
// used both in common.gradle and themesources library
|
||||||
dependencies {
|
dependencies {
|
||||||
// Lib 1.3, but using specific commit so we don't need to bump up the version
|
// Lib 1.3, but using specific commit so we don't need to bump up the version
|
||||||
compileOnly "com.github.jmir1:extensions-lib:6467320"
|
compileOnly "com.github.jmir1:extensions-lib:632a3e4"
|
||||||
|
|
||||||
// These are provided by the app itself
|
// These are provided by the app itself
|
||||||
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||||
|
@ -6,7 +6,7 @@ ext {
|
|||||||
pkgNameSuffix = 'en.fouranime'
|
pkgNameSuffix = 'en.fouranime'
|
||||||
extClass = '.FourAnime'
|
extClass = '.FourAnime'
|
||||||
extVersionCode = 11
|
extVersionCode = 11
|
||||||
libVersion = '11'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
ext.coroutinesVersion = "1.4.3"
|
ext.coroutinesVersion = "1.4.3"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.fouranime
|
package eu.kanade.tachiyomi.animeextension.en.fouranime
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.Link
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
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.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
@ -58,12 +58,21 @@ class FourAnime : ParsedAnimeHttpSource() {
|
|||||||
text.replace("[^\\d]".toRegex(), "").toFloat() + firstLetterAsNumber
|
text.replace("[^\\d]".toRegex(), "").toFloat() + firstLetterAsNumber
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
override fun episodeLinkSelector() = "source"
|
|
||||||
|
|
||||||
override fun linksFromElement(element: Element): List<Link> {
|
override fun videoListSelector() = "source"
|
||||||
return mutableListOf(Link(element.attr("src"), "1080p"))
|
|
||||||
|
override fun videoFromElement(element: Element): Video {
|
||||||
|
return Video(element.attr("src"), "1080p", null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun fetchVideoUrl(video: Video): Observable<String> {
|
||||||
|
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 {
|
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
anime.setUrlWithoutDomain(element.select("a").attr("href"))
|
anime.setUrlWithoutDomain(element.select("a").attr("href"))
|
||||||
|
@ -6,7 +6,7 @@ ext {
|
|||||||
pkgNameSuffix = 'en.gogoanime'
|
pkgNameSuffix = 'en.gogoanime'
|
||||||
extClass = '.GogoAnime'
|
extClass = '.GogoAnime'
|
||||||
extVersionCode = 2
|
extVersionCode = 2
|
||||||
libVersion = '11'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
ext.coroutinesVersion = "1.4.3"
|
ext.coroutinesVersion = "1.4.3"
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.gogoanime
|
package eu.kanade.tachiyomi.animeextension.en.gogoanime
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.Link
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
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.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
|
||||||
import eu.kanade.tachiyomi.network.await
|
import eu.kanade.tachiyomi.network.await
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@ -14,7 +13,7 @@ import okhttp3.Request
|
|||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import rx.Observable
|
import java.lang.Exception
|
||||||
|
|
||||||
class GogoAnime : ParsedAnimeHttpSource() {
|
class GogoAnime : ParsedAnimeHttpSource() {
|
||||||
|
|
||||||
@ -57,23 +56,6 @@ class GogoAnime : ParsedAnimeHttpSource() {
|
|||||||
return document.select("a").map { episodeFromElement(it) }
|
return document.select("a").map { episodeFromElement(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun fetchEpisodeLink(episode: SEpisode): Observable<List<Link>> {
|
|
||||||
return client.newCall(GET(baseUrl + episode.url))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
runBlocking { linkRequest(response) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun linkRequest(response: Response): List<Link> {
|
|
||||||
val elements = response.asJsoup()
|
|
||||||
val link = elements.select("li.dowloads a").attr("href")
|
|
||||||
val dlResponse = client.newCall(GET(link))
|
|
||||||
.await()
|
|
||||||
val document = dlResponse.asJsoup()
|
|
||||||
return linksFromElement(document.select(episodeLinkSelector()).first())
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun episodeFromElement(element: Element): SEpisode {
|
override fun episodeFromElement(element: Element): SEpisode {
|
||||||
val episode = SEpisode.create()
|
val episode = SEpisode.create()
|
||||||
episode.setUrlWithoutDomain(baseUrl + element.attr("href").substringAfter(" "))
|
episode.setUrlWithoutDomain(baseUrl + element.attr("href").substringAfter(" "))
|
||||||
@ -84,16 +66,11 @@ class GogoAnime : ParsedAnimeHttpSource() {
|
|||||||
return episode
|
return episode
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun episodeLinkSelector() = "div.mirror_link:has(a[download])"
|
override fun videoListSelector() = "div.mirror_link a[download]"
|
||||||
|
|
||||||
override fun linksFromElement(element: Element): List<Link> {
|
override fun videoFromElement(element: Element): Video {
|
||||||
val links = mutableListOf<Link>()
|
val quality = element.text().substringAfter("Download (").replace("P - mp4)", "p")
|
||||||
val linkElements = element.select("a[download]")
|
return Video(element.attr("href"), quality, element.attr("href"), null)
|
||||||
for (e in linkElements) {
|
|
||||||
val quality = e.text().substringAfter("Download (").replace("P - mp4)", "p")
|
|
||||||
links.add(Link(e.attr("href"), quality))
|
|
||||||
}
|
|
||||||
return links
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||||
@ -141,4 +118,8 @@ class GogoAnime : ParsedAnimeHttpSource() {
|
|||||||
override fun latestUpdatesRequest(page: Int): Request = GET("https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1")
|
override fun latestUpdatesRequest(page: Int): Request = GET("https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1")
|
||||||
|
|
||||||
override fun latestUpdatesSelector(): String = "div.added_series_body.popular li a:has(div)"
|
override fun latestUpdatesSelector(): String = "div.added_series_body.popular li a:has(div)"
|
||||||
|
|
||||||
|
override fun videoUrlFromElement(element: Element) = throw Exception("not used")
|
||||||
|
|
||||||
|
override fun videoUrlSelector() = throw Exception("not used")
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ ext {
|
|||||||
pkgNameSuffix = 'en.hanime'
|
pkgNameSuffix = 'en.hanime'
|
||||||
extClass = '.Hanime'
|
extClass = '.Hanime'
|
||||||
extVersionCode = 6
|
extVersionCode = 6
|
||||||
libVersion = '11'
|
libVersion = '12'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -6,9 +6,9 @@ import com.google.gson.JsonObject
|
|||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||||
import eu.kanade.tachiyomi.animesource.model.Link
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -117,16 +117,16 @@ class Hanime : AnimeHttpSource() {
|
|||||||
return anime
|
return anime
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun episodeLinkParse(response: Response): List<Link> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val responseString = response.body!!.string()
|
val responseString = response.body!!.string()
|
||||||
val jElement: JsonElement = JsonParser.parseString(responseString)
|
val jElement: JsonElement = JsonParser.parseString(responseString)
|
||||||
val jObject: JsonObject = jElement.asJsonObject
|
val jObject: JsonObject = jElement.asJsonObject
|
||||||
val server = jObject.get("videos_manifest").asJsonObject.get("servers").asJsonArray[0].asJsonObject
|
val server = jObject.get("videos_manifest").asJsonObject.get("servers").asJsonArray[0].asJsonObject
|
||||||
val streams = server.get("streams").asJsonArray
|
val streams = server.get("streams").asJsonArray
|
||||||
val linkList = mutableListOf<Link>()
|
val linkList = mutableListOf<Video>()
|
||||||
for (stream in streams) {
|
for (stream in streams) {
|
||||||
if (stream.asJsonObject.get("kind").asString != "premium_alert") {
|
if (stream.asJsonObject.get("kind").asString != "premium_alert") {
|
||||||
linkList.add(Link(stream.asJsonObject.get("url").asString, stream.asJsonObject.get("height").asString + "p"))
|
linkList.add(Video(stream.asJsonObject.get("url").asString, stream.asJsonObject.get("height").asString + "p", stream.asJsonObject.get("url").asString, null))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return linkList
|
return linkList
|
||||||
|
@ -6,7 +6,7 @@ ext {
|
|||||||
pkgNameSuffix = 'en.tenshimoe'
|
pkgNameSuffix = 'en.tenshimoe'
|
||||||
extClass = '.TenshiMoe'
|
extClass = '.TenshiMoe'
|
||||||
extVersionCode = 15
|
extVersionCode = 15
|
||||||
libVersion = '11'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
ext.coroutinesVersion = "1.4.3"
|
ext.coroutinesVersion = "1.4.3"
|
||||||
|
@ -3,21 +3,20 @@ package eu.kanade.tachiyomi.animeextension.en.tenshimoe
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.Link
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
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.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
import eu.kanade.tachiyomi.network.await
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.coroutines.runBlocking
|
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
|
import java.lang.Exception
|
||||||
import java.lang.Float.parseFloat
|
import java.lang.Float.parseFloat
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
@ -85,34 +84,46 @@ class TenshiMoe : ParsedAnimeHttpSource() {
|
|||||||
return Date(-1L)
|
return Date(-1L)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun fetchEpisodeLink(episode: SEpisode): Observable<List<Link>> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
return client.newCall(GET(baseUrl + episode.url))
|
val document = response.asJsoup()
|
||||||
|
val iframe = document.selectFirst("iframe")
|
||||||
|
val referer = response.request.url.encodedPath
|
||||||
|
return document.select(videoListSelector()).map { videoFromElement(it, iframe, referer) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun videoListSelector() = "span.resolution a"
|
||||||
|
|
||||||
|
private fun videoFromElement(element: Element, iframe: Element, referer: String): Video {
|
||||||
|
Log.i("lol", iframe.attr("src") + "&referer=$referer")
|
||||||
|
return Video(iframe.attr("src") + "&referer=$referer", element.text(), null, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun videoFromElement(element: Element) = throw Exception("not used")
|
||||||
|
|
||||||
|
override fun videoUrlRequest(video: Video): Request {
|
||||||
|
Log.i("lol", baseUrl + video.url.substringAfter("&referer="))
|
||||||
|
return GET(video.url, Headers.headersOf("referer", baseUrl + video.url.substringAfter("&referer=")))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun fetchVideoUrl(video: Video): Observable<String> {
|
||||||
|
return client.newCall(videoUrlRequest(video))
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
.map { response ->
|
.map {
|
||||||
Log.w("tenshi", "linkReq")
|
Log.i("lol", it.code.toString())
|
||||||
runBlocking { linkRequest(response) }
|
videoUrlParse(it, video.quality)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun linkRequest(response: Response): List<Link> {
|
private fun videoUrlParse(response: Response, quality: String): String {
|
||||||
val elements = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val link = elements.select("iframe").attr("src")
|
return videoUrlFromElement(document.selectFirst(videoUrlSelector(quality)))
|
||||||
val dlResponse = client.newCall(GET(link, Headers.headersOf("referer", response.request.url.toString())))
|
|
||||||
.await()
|
|
||||||
val document = dlResponse.asJsoup()
|
|
||||||
return linksFromElement(document.select(episodeLinkSelector()).first())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun episodeLinkSelector() = "video#player"
|
override fun videoUrlFromElement(element: Element): String = element.attr("src")
|
||||||
|
|
||||||
override fun linksFromElement(element: Element): List<Link> {
|
private fun videoUrlSelector(quality: String) = "source[title=$quality]"
|
||||||
val linkList = mutableListOf<Link>()
|
|
||||||
val linkElements = element.select("source")
|
override fun videoUrlSelector() = throw Exception("not used")
|
||||||
for (link in linkElements) {
|
|
||||||
linkList.add(Link(link.attr("src"), link.attr("title")))
|
|
||||||
}
|
|
||||||
return linkList
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
|
Reference in New Issue
Block a user