From 67e444b8b41ccef59775373c99d62bf8332676a3 Mon Sep 17 00:00:00 2001 From: Samfun75 <38332931+Samfun75@users.noreply.github.com> Date: Fri, 11 Nov 2022 20:02:52 +0300 Subject: [PATCH] SuperStream: Add Latest (#1013) --- src/en/superstream/build.gradle | 2 +- .../en/superstream/SuperStream.kt | 13 +++++-- .../en/superstream/SuperStreamAPI.kt | 34 +++++++++++++++---- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/en/superstream/build.gradle b/src/en/superstream/build.gradle index 90a68a30f..178b1efef 100644 --- a/src/en/superstream/build.gradle +++ b/src/en/superstream/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'SuperStream' pkgNameSuffix = 'en.superstream' extClass = '.SuperStream' - extVersionCode = 3 + extVersionCode = 4 libVersion = '13' } diff --git a/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStream.kt b/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStream.kt index ea0991c07..01970658b 100644 --- a/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStream.kt +++ b/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStream.kt @@ -31,7 +31,7 @@ class SuperStream : ConfigurableAnimeSource, AnimeHttpSource() { override val lang = "en" - override val supportsLatest = false + override val supportsLatest = true private val json: Json by injectLazy() @@ -87,6 +87,11 @@ class SuperStream : ConfigurableAnimeSource, AnimeHttpSource() { override fun episodeListParse(response: Response) = throw Exception("not used") + override fun fetchLatestUpdates(page: Int): Observable { + val animes = superStreamAPI.getLatest(page) + return Observable.just(animes) + } + override fun latestUpdatesParse(response: Response) = throw Exception("not used") override fun latestUpdatesRequest(page: Int) = throw Exception("not used") @@ -143,7 +148,8 @@ class SuperStream : ConfigurableAnimeSource, AnimeHttpSource() { } ani.description = movie.description ani.status = SAnime.COMPLETED - ani.author = movie.writer!!.substringBefore("\n") + ani.author = movie.writer!!.substringBefore("\n").split(",").distinct().joinToString { it } + ani.artist = movie.director!!.substringBefore("\n").split(",").distinct().joinToString { it } val releasedDate = "Released: " movie.released?.let { date -> @@ -162,7 +168,8 @@ class SuperStream : ConfigurableAnimeSource, AnimeHttpSource() { } ani.description = it.description ani.status = SAnime.UNKNOWN - ani.author = it.writer!!.substringBefore("\n") + ani.author = it.writer!!.substringBefore("\n").split(",").distinct().joinToString() + ani.artist = it.director!!.substringBefore("\n").split(",").distinct().joinToString() val releasedDate = "Released: " it.released?.let { date -> diff --git a/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStreamAPI.kt b/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStreamAPI.kt index d41b5ee37..542c775ea 100644 --- a/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStreamAPI.kt +++ b/src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStreamAPI.kt @@ -866,10 +866,7 @@ class SuperStreamAPI(val json: Json) { private val appId = base64Decode("Y29tLnRkby5zaG93Ym94") fun getMainPage(page: Int): AnimesPage { - val json = queryApi( - """{"childmode":"$hideNsfw","app_version":"11.5","appid":"$appId","module":"Home_list_type_v2","channel":"Website","page":"$page","lang":"en","type":"all","pagelimit":"10","expired_date":"${getExpiryDate()}","platform":"android"} - """.trimIndent() - ).body!!.string() + val json = sendQuery(page) val animes = mutableListOf() // Cut off the first row (featured) @@ -888,6 +885,31 @@ class SuperStreamAPI(val json: Json) { return AnimesPage(animes, animes.isNotEmpty()) } + fun getLatest(page: Int): AnimesPage { + val json = sendQuery(page) + val animes = mutableListOf() + + parseJson(json).data.let { it.filter { item -> item.type == "newupload" || item.type == "newupdate" } } + .mapNotNull { + it.list.mapNotNull second@{ post -> + animes.add( + SAnime.create().apply { + url = LoadData(post.id ?: return@mapNotNull null, post.box_type).toJson() + thumbnail_url = post.poster ?: post.poster_2 + title = post.title ?: return@second null + } + ) + } + } + return AnimesPage(animes, animes.isNotEmpty()) + } + + private fun sendQuery(page: Int): String { + return queryApi( + """{"childmode":"$hideNsfw","app_version":"11.5","appid":"$appId","module":"Home_list_type_v2","channel":"Website","page":"$page","lang":"en","type":"all","pagelimit":"20","expired_date":"${getExpiryDate()}","platform":"android"}""".trimIndent() + ).body!!.string() + } + private fun Data.toSearchResponse(): SAnime? { val it = this return SAnime.create().apply { @@ -989,9 +1011,9 @@ class SuperStreamAPI(val json: Json) { } } } - } catch (e: Error) {} + } catch (_: Error) {} - linkData.data!!.list.forEach { + linkData.data.list.forEach { if (it.path.isNullOrBlank().not()) { val videoUrl = it.path?.replace("\\/", "") ?: "" try {