zoro stuff (1/2)

This commit is contained in:
LagradOst 2021-10-10 04:26:18 +02:00
parent b7d90cad08
commit fe2123c04a
16 changed files with 97 additions and 106 deletions

View File

@ -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

View File

@ -51,10 +51,7 @@ class AnimeFlickProvider : MainAPI() {
getType(title),
poster,
null,
null,
EnumSet.of(DubStatus.Subbed),
null,
null
)
})
}

View File

@ -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
)
})

View File

@ -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
)
}
)

View File

@ -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
)
}
@ -236,7 +234,7 @@ class GogoanimeProvider : MainAPI() {
val url = it.attr("href")
val extractorLinks = ArrayList<ExtractorLink>()
for (api in extractorApis) {
if (url.startsWith(api.mainUrl) ) {
if (url.startsWith(api.mainUrl)) {
extractorLinks.addAll(api.getSafeUrl(url) ?: listOf())
break
}

View File

@ -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,
)
})
}

View File

@ -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
)
}
)

View File

@ -63,10 +63,7 @@ class WatchCartoonOnlineProvider : MainAPI() {
TvType.Anime,
poster,
null,
null,
set,
null,
null
)
)
}

View File

@ -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,11 +106,8 @@ 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
)
}
)

View File

@ -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 {

View File

@ -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
}

View File

@ -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
}
}
}
}
}

View File

@ -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>

View File

@ -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"

View File

@ -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>

View File

@ -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>