forked from recloudstream/cloudstream
delay mainpage
This commit is contained in:
parent
020b3b7472
commit
61fb302a37
3 changed files with 37 additions and 3 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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<List<HomePageResponse?>> {
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -162,6 +162,8 @@ class HomeViewModel : ViewModel() {
|
|||
lock += name
|
||||
|
||||
repo?.apply {
|
||||
waitForHomeDelay()
|
||||
|
||||
expandable[name]?.let { current ->
|
||||
debugAssert({ !current.hasNext }) {
|
||||
"Expand called when not needed"
|
||||
|
|
Loading…
Reference in a new issue