From 7466ecbc2fddf02e987c4350c08ee69e551f02f0 Mon Sep 17 00:00:00 2001 From: LagradOst Date: Tue, 9 Nov 2021 22:15:11 +0100 Subject: [PATCH] general fixes to make app more primate friendly --- .../java/com/lagradost/cloudstream3/MainAPI.kt | 9 ++++++--- .../cloudstream3/animeproviders/ZoroProvider.kt | 3 +++ .../cloudstream3/movieproviders/SflixProvider.kt | 3 +++ .../cloudstream3/ui/home/HomeFragment.kt | 14 +++++++++----- .../ui/subtitles/SubtitlesFragment.kt | 13 ++++++++----- .../cloudstream3/utils/SingleSelectionHelper.kt | 3 ++- .../com/lagradost/cloudstream3/ProviderTests.kt | 15 ++++++++++++--- 7 files changed, 43 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index f2413231..18ad30e7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -55,8 +55,8 @@ object APIHolder { val restrictedApis = arrayListOf( TrailersToProvider(), // be aware that this is fuckery - //NyaaProvider(), //torrents in cs3 is wack - ThenosProvider(), + // NyaaProvider(), // torrents in cs3 is wack + // ThenosProvider(), // ddos protection and wacked links AsiaFlixProvider(), ) @@ -163,9 +163,12 @@ abstract class MainAPI { /**Set false if links require referer or for some reason cant be played on a chromecast*/ open val hasChromecastSupport = true - /**If all links are m3u8 then set this to false*/ + /**If all links are encrypted then set this to false*/ open val hasDownloadSupport = true + /**Used for testing and can be used to disable the providers if WebView is not available*/ + open val usesWebView = false + open val hasMainPage = false open val hasQuickSearch = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ZoroProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ZoroProvider.kt index 21ac1511..6d17ec20 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ZoroProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ZoroProvider.kt @@ -33,6 +33,9 @@ class ZoroProvider : MainAPI() { override val hasDownloadSupport: Boolean get() = true + override val usesWebView: Boolean + get() = true + override val supportedTypes: Set get() = setOf( TvType.Anime, diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt index 4ba21ac8..2b059ec6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt @@ -31,6 +31,9 @@ class SflixProvider : MainAPI() { override val hasDownloadSupport: Boolean get() = true + override val usesWebView: Boolean + get() = true + override val supportedTypes: Set get() = setOf( TvType.Movie, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 540ae5ff..a50431fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -108,7 +108,7 @@ class HomeFragment : Fragment() { savedInstanceState: Bundle? ): View? { //homeViewModel = - // ViewModelProvider(this).get(HomeViewModel::class.java) + // ViewModelProvider(this).get(HomeViewModel::class.java) return inflater.inflate(R.layout.fragment_home, container, false) } @@ -123,10 +123,14 @@ class HomeFragment : Fragment() { private fun chooseRandomMainPage() { val home = currentHomePage if (home != null && home.items.isNotEmpty()) { - val randomItems = home.items.shuffled().flatMap { it.list }.distinctBy { it.url }.toList().shuffled() - if (randomItems.isNullOrEmpty()) { + val currentList = + home.items.shuffled().filter { !it.list.isNullOrEmpty() }.flatMap { it.list }.distinctBy { it.url } + .toList() + + if (currentList.isNullOrEmpty()) { toggleMainVisibility(false) } else { + val randomItems = currentList.shuffled() val randomSize = randomItems.size home_main_poster_recyclerview.adapter = HomeChildItemAdapter(randomItems, R.layout.home_result_big_grid) { callback -> @@ -141,7 +145,7 @@ class HomeFragment : Fragment() { manager.snap { dx -> home_main_poster_recyclerview?.post { // this is the best I can do, fuck android for not including instant scroll - home_main_poster_recyclerview?.smoothScrollBy(dx,0) + home_main_poster_recyclerview?.smoothScrollBy(dx, 0) } } } @@ -429,7 +433,7 @@ class HomeFragment : Fragment() { for (syncApi in OAuth2Interface.OAuth2Apis) { val login = syncApi.loginInfo(ctx) val pic = login?.profilePicture - if(pic != null) { + if (pic != null) { home_profile_picture.setImage(pic) home_profile_picture_holder.isVisible = true break diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index b47ddab7..896d25d5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -25,7 +25,6 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.Event -import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper @@ -224,7 +223,8 @@ class SubtitlesFragment : Fragment() { Pair(40, "40"), ) - textView.context.showBottomDialog( + //showBottomDialog + textView.context.showDialog( elevationTypes.map { it.second }, elevationTypes.map { it.first }.indexOf(state.elevation), (textView as TextView).text.toString(), @@ -254,7 +254,8 @@ class SubtitlesFragment : Fragment() { Pair(CaptionStyleCompat.EDGE_TYPE_RAISED, "Raised"), ) - textView.context.showBottomDialog( + //showBottomDialog + textView.context.showDialog( edgeTypes.map { it.second }, edgeTypes.map { it.first }.indexOf(state.edgeType), (textView as TextView).text.toString(), @@ -304,7 +305,8 @@ class SubtitlesFragment : Fragment() { Pair(60f,"60$suffix"), ) - textView.context.showBottomDialog( + //showBottomDialog + textView.context.showDialog( fontSizes.map { it.second }, fontSizes.map { it.first }.indexOf(state.fixedTextSize), (textView as TextView).text.toString(), @@ -341,7 +343,8 @@ class SubtitlesFragment : Fragment() { Pair(R.font.poppins_regular, "Poppins"), ) - textView.context.showBottomDialog( + //showBottomDialog + textView.context.showDialog( fontTypes.map { it.second }, fontTypes.map { it.first }.indexOf(state.typeface), (textView as TextView).text.toString(), diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt index 5bb0d246..66592160 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt @@ -129,6 +129,7 @@ object SingleSelectionHelper { ) } + /** Only for a low amount of items */ fun Context.showBottomDialog( items: List, selectedIndex: Int, @@ -149,7 +150,7 @@ object SingleSelectionHelper { name, showApply, false, - { callback.invoke(it.first()) }, + { if(it.isNotEmpty()) callback.invoke(it.first()) }, dismissCallback ) } diff --git a/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt b/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt index 1a1ab555..f29be910 100644 --- a/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt +++ b/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt @@ -11,7 +11,7 @@ class ProviderTests { private fun getAllProviders(): List { val allApis = APIHolder.apis allApis.addAll(APIHolder.restrictedApis) - return allApis + return allApis.filter { !it.usesWebView } } private fun loadLinks(api: MainAPI, url: String?): Boolean { @@ -80,13 +80,14 @@ class ProviderTests { when (load) { is AnimeLoadResponse -> { val gotNoEpisodes = - load.dubEpisodes.isNullOrEmpty() && load.subEpisodes.isNullOrEmpty() + load.episodes.keys.isEmpty() || load.episodes.keys.any { load.episodes[it].isNullOrEmpty() } + if (gotNoEpisodes) { println("Api ${api.name} got no episodes on ${load.url}") continue } - val url = (load.dubEpisodes ?: load.subEpisodes)?.first()?.url + val url = (load.episodes[load.episodes.keys.first()])?.first()?.url validResults = loadLinks(api, url) if (!validResults) continue } @@ -176,6 +177,7 @@ class ProviderTests { @Test fun providerCorrect() { + val invalidProvider = ArrayList>() val providers = getAllProviders() providers.pmap { api -> try { @@ -184,10 +186,17 @@ class ProviderTests { println("Success $api") } else { System.err.println("Error $api") + invalidProvider.add(Pair(api, null)) } } catch (e: Exception) { logError(e) + invalidProvider.add(Pair(api,e)) } } + + println("Invalid providers are: ") + for (provider in invalidProvider) { + println("${provider.first}") + } } } \ No newline at end of file