forked from recloudstream/cloudstream
zoro stuff (1/2)
This commit is contained in:
parent
b7d90cad08
commit
fe2123c04a
16 changed files with 97 additions and 106 deletions
|
@ -323,12 +323,12 @@ data class AnimeSearchResponse(
|
|||
override val type: TvType,
|
||||
|
||||
override val posterUrl: String?,
|
||||
val year: Int?,
|
||||
|
||||
val otherName: String?,
|
||||
val year: Int? = null,
|
||||
val dubStatus: EnumSet<DubStatus>?,
|
||||
val dubEpisodes: Int?,
|
||||
val subEpisodes: Int?,
|
||||
|
||||
val otherName: String? = null,
|
||||
val dubEpisodes: Int? = null,
|
||||
val subEpisodes: Int? = null,
|
||||
override val id: Int? = null,
|
||||
) : SearchResponse
|
||||
|
||||
|
|
|
@ -51,10 +51,7 @@ class AnimeFlickProvider : MainAPI() {
|
|||
getType(title),
|
||||
poster,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -93,9 +93,9 @@ class AnimePaheProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
it.snapshot,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null,
|
||||
it.episode
|
||||
)
|
||||
}
|
||||
|
@ -159,9 +159,9 @@ class AnimePaheProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
it.poster,
|
||||
it.year,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null,
|
||||
it.episodes
|
||||
)
|
||||
})
|
||||
|
|
|
@ -11,7 +11,6 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
|
|||
import com.lagradost.cloudstream3.utils.getQualityFromName
|
||||
import org.jsoup.Jsoup
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
class DubbedAnimeProvider : MainAPI() {
|
||||
override val mainUrl: String
|
||||
|
@ -76,10 +75,7 @@ class DubbedAnimeProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
poster,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Dubbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -98,10 +94,7 @@ class DubbedAnimeProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
poster,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Dubbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -164,10 +157,7 @@ class DubbedAnimeProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
img,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Dubbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
|
@ -201,10 +191,7 @@ class DubbedAnimeProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
img,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Dubbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -79,6 +79,7 @@ class GogoanimeProvider : MainAPI() {
|
|||
).text
|
||||
items.add(HomePageList(i.second, (parseRegex.findAll(html).map {
|
||||
val (link, epNum, title, poster) = it.destructured
|
||||
val isSub = listOf(1, 3).contains(i.first.toInt())
|
||||
AnimeSearchResponse(
|
||||
title,
|
||||
link,
|
||||
|
@ -86,12 +87,12 @@ class GogoanimeProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
poster,
|
||||
null,
|
||||
null,
|
||||
if (listOf(1, 3).contains(i.first.toInt())) EnumSet.of(DubStatus.Subbed) else EnumSet.of(
|
||||
if (isSub) EnumSet.of(DubStatus.Subbed) else EnumSet.of(
|
||||
DubStatus.Dubbed
|
||||
),
|
||||
null,
|
||||
epNum.toIntOrNull()
|
||||
if (!isSub) epNum.toIntOrNull() else null,
|
||||
if (isSub) epNum.toIntOrNull() else null,
|
||||
)
|
||||
}).toList()))
|
||||
} catch (e: Exception) {
|
||||
|
@ -115,12 +116,9 @@ class GogoanimeProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
it.selectFirst("img").attr("src"),
|
||||
it.selectFirst(".released")?.text()?.split(":")?.getOrNull(1)?.trim()?.toIntOrNull(),
|
||||
null,
|
||||
if (it.selectFirst(".name").text().contains("Dub")) EnumSet.of(DubStatus.Dubbed) else EnumSet.of(
|
||||
DubStatus.Subbed
|
||||
),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -37,10 +37,7 @@ class KawaiifuProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
it.selectFirst("img").attr("src"),
|
||||
it.selectFirst("h4 > a").attr("href").split("-").last().toIntOrNull(),
|
||||
null,
|
||||
if (title.contains("(DUB)")) EnumSet.of(DubStatus.Dubbed) else EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}))
|
||||
for (section in soup.select(".section")) {
|
||||
|
@ -55,10 +52,7 @@ class KawaiifuProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
ani.selectFirst("img").attr("src"),
|
||||
ani.selectFirst(".vl-chil-date").text().toIntOrNull(),
|
||||
null,
|
||||
if (animTitle.contains("(DUB)")) EnumSet.of(DubStatus.Dubbed) else EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
items.add(HomePageList(title, anime))
|
||||
|
@ -89,10 +83,7 @@ class KawaiifuProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
poster,
|
||||
year,
|
||||
null,
|
||||
if (title.contains("(DUB)")) EnumSet.of(DubStatus.Dubbed) else EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -66,10 +66,7 @@ class TenshiProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
it.selectFirst("img").attr("src"),
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
items.add(HomePageList(title, anime))
|
||||
|
@ -84,10 +81,7 @@ class TenshiProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
it.selectFirst("img").attr("src"),
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
items.add(HomePageList(title, anime))
|
||||
|
@ -130,10 +124,7 @@ class TenshiProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
img,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -63,10 +63,7 @@ class WatchCartoonOnlineProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
poster,
|
||||
null,
|
||||
null,
|
||||
set,
|
||||
null,
|
||||
null
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
package com.lagradost.cloudstream3.animeproviders
|
||||
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.extractors.WcoStream
|
||||
import com.lagradost.cloudstream3.network.get
|
||||
import com.lagradost.cloudstream3.network.post
|
||||
import com.lagradost.cloudstream3.network.text
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import org.json.JSONObject
|
||||
import org.jsoup.Jsoup
|
||||
import org.jsoup.nodes.Document
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
|
||||
class WcoProvider : MainAPI() {
|
||||
|
@ -64,7 +63,7 @@ class WcoProvider : MainAPI() {
|
|||
val poster = filmPoster.selectFirst("> img").attr("data-src")
|
||||
val set: EnumSet<DubStatus> =
|
||||
EnumSet.of(if (isDub) DubStatus.Dubbed else DubStatus.Subbed)
|
||||
AnimeSearchResponse(title, href, this.name, TvType.Anime, poster, null, null, set, null, null)
|
||||
AnimeSearchResponse(title, href, this.name, TvType.Anime, poster,null, set)
|
||||
}
|
||||
items.add(HomePageList(i.second, results))
|
||||
} catch (e: Exception) {
|
||||
|
@ -107,10 +106,7 @@ class WcoProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
img,
|
||||
year,
|
||||
null,
|
||||
EnumSet.of(if (isDub) DubStatus.Dubbed else DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
|
@ -169,10 +165,7 @@ class WcoProvider : MainAPI() {
|
|||
TvType.Anime,
|
||||
img,
|
||||
year,
|
||||
null,
|
||||
EnumSet.of(if (isDub) DubStatus.Dubbed else DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -56,9 +56,14 @@ class ZoroProvider : MainAPI() {
|
|||
}
|
||||
}
|
||||
|
||||
fun Element.toSearchResult(): SearchResponse? {
|
||||
private fun Element.toSearchResult(): SearchResponse? {
|
||||
val href = fixUrl(this.select("a").attr("href"))
|
||||
val title = this.select("h3.film-name").text()
|
||||
/*val episodes = this.select("div.fd-infor > span.fdi-item")?.get(1)?.text()?.let { eps ->
|
||||
// current episode / max episode
|
||||
val epRegex = Regex("Ep (\\d+)/")//Regex("Ep (\\d+)/(\\d+)")
|
||||
epRegex.find(eps)?.groupValues?.get(1)?.toIntOrNull()
|
||||
}*/
|
||||
if (href.contains("/news/") || title.trim().equals("News", ignoreCase = true)) return null
|
||||
val posterUrl = fixUrl(this.select("img").attr("data-src"))
|
||||
val type = getType(this.select("div.fd-infor > span.fdi-item").text())
|
||||
|
@ -71,9 +76,6 @@ class ZoroProvider : MainAPI() {
|
|||
posterUrl,
|
||||
null,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -142,7 +144,25 @@ class ZoroProvider : MainAPI() {
|
|||
|
||||
return document.select(".flw-item").map {
|
||||
val title = it.selectFirst(".film-detail > .film-name > a")?.attr("title").toString()
|
||||
val poster = it.selectFirst(".film-poster > img")?.attr("data-src")
|
||||
val filmPoster = it.selectFirst(".film-poster")
|
||||
val poster = filmPoster.selectFirst("img")?.attr("data-src")
|
||||
|
||||
val episodes = filmPoster.selectFirst("div.rtl > div.tick-eps")?.text()?.let { eps ->
|
||||
// current episode / max episode
|
||||
val epRegex = Regex("Ep (\\d+)/")//Regex("Ep (\\d+)/(\\d+)")
|
||||
epRegex.find(eps)?.groupValues?.get(1)?.toIntOrNull()
|
||||
}
|
||||
val dubsub = filmPoster.selectFirst("div.ltr")?.text()
|
||||
val dubExist = dubsub?.contains("DUB") ?: false
|
||||
val subExist = dubsub?.contains("SUB") ?: false || dubsub?.contains("RAW") ?: false
|
||||
|
||||
val set = if (dubExist && subExist) {
|
||||
EnumSet.of(DubStatus.Dubbed, DubStatus.Subbed)
|
||||
} else if (dubExist) {
|
||||
EnumSet.of(DubStatus.Dubbed)
|
||||
} else {
|
||||
EnumSet.of(DubStatus.Subbed)
|
||||
}
|
||||
|
||||
val tvType = getType(it.selectFirst(".film-detail > .fd-infor > .fdi-item")?.text().toString())
|
||||
val href = fixUrl(it.selectFirst(".film-name a").attr("href"))
|
||||
|
@ -154,15 +174,15 @@ class ZoroProvider : MainAPI() {
|
|||
tvType,
|
||||
poster,
|
||||
null,
|
||||
set,
|
||||
null,
|
||||
EnumSet.of(DubStatus.Subbed),
|
||||
null,
|
||||
null
|
||||
if (dubExist) episodes else null,
|
||||
if (subExist) episodes else null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun load(url: String): LoadResponse? {
|
||||
override fun load(url: String): LoadResponse {
|
||||
val html = get(url).text
|
||||
val document = Jsoup.parse(html)
|
||||
|
||||
|
@ -174,7 +194,6 @@ class ZoroProvider : MainAPI() {
|
|||
var japaneseTitle: String? = null
|
||||
var status: ShowStatus? = null
|
||||
|
||||
|
||||
for (info in document.select(".anisc-info > .item.item-title")) {
|
||||
val text = info?.text().toString()
|
||||
when {
|
||||
|
|
|
@ -36,7 +36,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
|||
import com.lagradost.cloudstream3.utils.UIHelper.getGridIsCompact
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||
import kotlinx.android.synthetic.main.fragment_search.*
|
||||
import java.lang.Exception
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
|
||||
class SearchFragment : Fragment() {
|
||||
|
@ -44,7 +43,7 @@ class SearchFragment : Fragment() {
|
|||
fun List<SearchResponse>.filterSearchResponse(): List<SearchResponse> {
|
||||
return this.filter { response ->
|
||||
if (response is AnimeSearchResponse) {
|
||||
response.dubStatus?.any { APIRepository.dubStatusActive.contains(it) } ?: false
|
||||
(response.dubStatus.isNullOrEmpty()) || (response.dubStatus.any { APIRepository.dubStatusActive.contains(it) })
|
||||
} else {
|
||||
true
|
||||
}
|
||||
|
|
|
@ -5,10 +5,7 @@ import android.widget.ImageView
|
|||
import android.widget.ProgressBar
|
||||
import android.widget.TextView
|
||||
import androidx.cardview.widget.CardView
|
||||
import com.lagradost.cloudstream3.AnimeSearchResponse
|
||||
import com.lagradost.cloudstream3.DubStatus
|
||||
import com.lagradost.cloudstream3.SearchResponse
|
||||
import com.lagradost.cloudstream3.isMovieType
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.getNameFull
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual
|
||||
|
@ -24,8 +21,9 @@ object SearchResultBuilder {
|
|||
val cardView: ImageView = itemView.imageView
|
||||
val cardText: TextView = itemView.imageText
|
||||
|
||||
val textIsDub: View? = itemView.text_is_dub
|
||||
val textIsSub: View? = itemView.text_is_sub
|
||||
val textIsDub: TextView? = itemView.text_is_dub
|
||||
val textIsSub: TextView? = itemView.text_is_sub
|
||||
println(card.name)
|
||||
|
||||
val bg: CardView = itemView.backgroundCard
|
||||
|
||||
|
@ -45,7 +43,13 @@ object SearchResultBuilder {
|
|||
cardView.setImage(card.posterUrl)
|
||||
|
||||
bg.setOnClickListener {
|
||||
clickCallback.invoke(SearchClickCallback(if(card is DataStoreHelper.ResumeWatchingResult) SEARCH_ACTION_PLAY_FILE else SEARCH_ACTION_LOAD, it, card))
|
||||
clickCallback.invoke(
|
||||
SearchClickCallback(
|
||||
if (card is DataStoreHelper.ResumeWatchingResult) SEARCH_ACTION_PLAY_FILE else SEARCH_ACTION_LOAD,
|
||||
it,
|
||||
card
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
bg.setOnLongClickListener {
|
||||
|
@ -69,16 +73,32 @@ object SearchResultBuilder {
|
|||
}
|
||||
}
|
||||
is AnimeSearchResponse -> {
|
||||
if (card.dubStatus?.size == 1) {
|
||||
//search_result_lang?.visibility = View.VISIBLE
|
||||
if (card.dubStatus != null && card.dubStatus.size > 0) {
|
||||
if (card.dubStatus.contains(DubStatus.Dubbed)) {
|
||||
textIsDub?.visibility = View.VISIBLE
|
||||
//search_result_lang?.setColorFilter(ContextCompat.getColor(activity, R.color.dubColor))
|
||||
} else if (card.dubStatus.contains(DubStatus.Subbed)) {
|
||||
//search_result_lang?.setColorFilter(ContextCompat.getColor(activity, R.color.subColor))
|
||||
}
|
||||
if (card.dubStatus.contains(DubStatus.Subbed)) {
|
||||
textIsSub?.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
textIsDub?.apply {
|
||||
val dubText = context.getString(R.string.app_dubbed_text)
|
||||
text = if (card.dubEpisodes != null && card.dubEpisodes > 0) {
|
||||
context.getString(R.string.app_dub_sub_episode_text_format).format(dubText, card.dubEpisodes)
|
||||
} else {
|
||||
dubText
|
||||
}
|
||||
}
|
||||
|
||||
textIsSub?.apply {
|
||||
val subText = context.getString(R.string.app_subbed_text)
|
||||
text = if (card.subEpisodes != null && card.subEpisodes > 0) {
|
||||
context.getString(R.string.app_dub_sub_episode_text_format).format(subText, card.subEpisodes)
|
||||
} else {
|
||||
subText
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,7 +123,6 @@
|
|||
android:gravity="center"
|
||||
android:background="@drawable/sub_bg_color"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"
|
||||
>
|
||||
</TextView>
|
||||
/>
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
|
|
@ -55,23 +55,6 @@
|
|||
android:paddingEnd="5dp"
|
||||
android:ellipsize="end"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/text_type"
|
||||
|
||||
tools:text="Movie"
|
||||
android:visibility="gone"
|
||||
android:textColor="@color/textColor"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingTop="4dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_gravity="start"
|
||||
android:paddingBottom="8dp"
|
||||
android:minWidth="50dp"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/type_bg_color"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content">
|
||||
</TextView>
|
||||
<!--<View
|
||||
android:id="@+id/search_result_lang"
|
||||
android:layout_gravity="bottom"
|
||||
|
@ -95,6 +78,22 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<!-- <TextView
|
||||
android:text="Movie"
|
||||
android:textColor="@color/textColor"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingTop="4dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_gravity="end"
|
||||
android:paddingBottom="8dp"
|
||||
android:minWidth="50dp"
|
||||
android:gravity="end"
|
||||
android:background="@drawable/type_bg_color"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
</TextView>-->
|
||||
|
||||
<!--
|
||||
<ImageView android:id="@+id/text_is_dub" android:tint="?attr/colorPrimary"
|
||||
android:src="@drawable/ic_baseline_subtitles_24" android:layout_width="wrap_content"
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
<color name="dubColorBg">#803B65F5</color>
|
||||
<color name="subColor">#F54A3B</color> <!--F53B66 FA3D79-->
|
||||
<color name="subColorBg">#80F53B66</color>
|
||||
<color name="typeColor">#F54A3B</color>
|
||||
<color name="typeColorBg">#4DF54A3B</color>
|
||||
<color name="typeColor">#3BF585</color>
|
||||
<color name="typeColorBg">#803BF585</color>
|
||||
|
||||
<color name="video_ripple">#73FFFFFF</color>
|
||||
<color name="black_overlay">#66000000</color>
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
<string name="rew_text_format" translatable="false" formatted="true">-%d</string>
|
||||
<string name="ffw_text_regular_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="rew_text_regular_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="app_dub_sub_episode_text_format">%s Ep %d</string>
|
||||
|
||||
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||
<string name="result_poster_img_des">Poster</string>
|
||||
|
|
Loading…
Reference in a new issue