From 61fb302a373814380257eac5f0e03d2d96a3d99f Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Sun, 9 Oct 2022 01:36:06 +0200 Subject: [PATCH] delay mainpage --- .../com/lagradost/cloudstream3/MainAPI.kt | 11 +++++++- .../cloudstream3/ui/APIRepository.kt | 27 +++++++++++++++++-- .../cloudstream3/ui/home/HomeViewModel.kt | 2 ++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 47afbc42..416a7238 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -381,7 +381,16 @@ abstract class MainAPI { open var storedCredentials: String? = null open var canBeOverridden: Boolean = true - //open val uniqueId : Int by lazy { this.name.hashCode() } // in case of duplicate providers you can have a shared id + /** if this is turned on then it will request the homepage one after the other, + used to delay if they block many request at the same time*/ + open var sequentialMainPage : Boolean = false + /** in milliseconds, this can be used to add more delay between homepage requests + * on first load if sequentialMainPage is turned on */ + open var sequentialMainPageDelay : Long = 0L + /** in milliseconds, this can be used to add more delay between homepage requests when scrolling */ + open var sequentialMainPageScrollDelay : Long = 0L + /** used to keep track when last homepage request was in unixtime ms */ + var lastHomepageRequest : Long = 0L open var lang = "en" // ISO_639_1 check SubtitleHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt index 34cb262c..b43b1434 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt @@ -1,10 +1,12 @@ package com.lagradost.cloudstream3.ui import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink +import kotlinx.coroutines.delay class APIRepository(val api: MainAPI) { companion object { @@ -62,12 +64,33 @@ class APIRepository(val api: MainAPI) { } } + suspend fun waitForHomeDelay() { + val delta = api.sequentialMainPageScrollDelay + api.lastHomepageRequest - unixTimeMS + if(delta < 0) return + delay(delta) + } + suspend fun getMainPage(page: Int, nameIndex: Int? = null): Resource> { return safeApiCall { + api.lastHomepageRequest = unixTimeMS + nameIndex?.let { api.mainPage.getOrNull(it) }?.let { data -> listOf(api.getMainPage(page, MainPageRequest(data.name, data.data))) - } ?: api.mainPage.apmap { data -> - api.getMainPage(page, MainPageRequest(data.name, data.data)) + } ?: run { + if (api.sequentialMainPage) { + var first = true + api.mainPage.map { data -> + if (!first) // dont want to sleep on first request + delay(api.sequentialMainPageDelay) + first = false + + api.getMainPage(page, MainPageRequest(data.name, data.data)) + } + } else { + api.mainPage.apmap { data -> + api.getMainPage(page, MainPageRequest(data.name, data.data)) + } + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index d8497876..30fd45c1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -162,6 +162,8 @@ class HomeViewModel : ViewModel() { lock += name repo?.apply { + waitForHomeDelay() + expandable[name]?.let { current -> debugAssert({ !current.hasNext }) { "Expand called when not needed"