mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
fix
This commit is contained in:
parent
6957a8f95d
commit
a82059cb57
1 changed files with 33 additions and 12 deletions
|
@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.lagradost.cloudstream3.mvvm.Resource
|
import com.lagradost.cloudstream3.mvvm.Resource
|
||||||
import com.lagradost.cloudstream3.mvvm.launchSafe
|
import com.lagradost.cloudstream3.mvvm.launchSafe
|
||||||
|
import com.lagradost.cloudstream3.mvvm.logError
|
||||||
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
||||||
import com.lagradost.cloudstream3.mvvm.safeApiCall
|
import com.lagradost.cloudstream3.mvvm.safeApiCall
|
||||||
import com.lagradost.cloudstream3.ui.result.ResultEpisode
|
import com.lagradost.cloudstream3.ui.result.ResultEpisode
|
||||||
|
@ -15,6 +16,7 @@ import com.lagradost.cloudstream3.utils.EpisodeSkip
|
||||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
import com.lagradost.cloudstream3.utils.ExtractorUri
|
import com.lagradost.cloudstream3.utils.ExtractorUri
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class PlayerGeneratorViewModel : ViewModel() {
|
class PlayerGeneratorViewModel : ViewModel() {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -38,6 +40,11 @@ class PlayerGeneratorViewModel : ViewModel() {
|
||||||
private val _currentSubtitleYear = MutableLiveData<Int?>(null)
|
private val _currentSubtitleYear = MutableLiveData<Int?>(null)
|
||||||
val currentSubtitleYear: LiveData<Int?> = _currentSubtitleYear
|
val currentSubtitleYear: LiveData<Int?> = _currentSubtitleYear
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the Episode ID to prevent starting multiple link loading Jobs when preloading links.
|
||||||
|
*/
|
||||||
|
private var currentLoadingEpisodeId: Int? = null
|
||||||
|
|
||||||
fun setSubtitleYear(year: Int?) {
|
fun setSubtitleYear(year: Int?) {
|
||||||
_currentSubtitleYear.postValue(year)
|
_currentSubtitleYear.postValue(year)
|
||||||
}
|
}
|
||||||
|
@ -72,18 +79,32 @@ class PlayerGeneratorViewModel : ViewModel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun preLoadNextLinks() {
|
fun preLoadNextLinks() {
|
||||||
|
val id = getId()
|
||||||
|
// Do not preload if already loading
|
||||||
|
if (id == currentLoadingEpisodeId) return
|
||||||
|
|
||||||
Log.i(TAG, "preLoadNextLinks")
|
Log.i(TAG, "preLoadNextLinks")
|
||||||
currentJob?.cancel()
|
currentJob?.cancel()
|
||||||
currentJob = viewModelScope.launchSafe {
|
currentLoadingEpisodeId = id
|
||||||
if (generator?.hasCache == true && generator?.hasNext() == true) {
|
|
||||||
safeApiCall {
|
currentJob = viewModelScope.launch {
|
||||||
generator?.generateLinks(
|
try {
|
||||||
type = LoadType.InApp,
|
if (generator?.hasCache == true && generator?.hasNext() == true) {
|
||||||
clearCache = false,
|
safeApiCall {
|
||||||
callback = {},
|
generator?.generateLinks(
|
||||||
subtitleCallback = {},
|
type = LoadType.InApp,
|
||||||
offset = 1
|
clearCache = false,
|
||||||
)
|
callback = {},
|
||||||
|
subtitleCallback = {},
|
||||||
|
offset = 1
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (t: Throwable) {
|
||||||
|
logError(t)
|
||||||
|
} finally {
|
||||||
|
if (currentLoadingEpisodeId == id) {
|
||||||
|
currentLoadingEpisodeId = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,14 +183,14 @@ class PlayerGeneratorViewModel : ViewModel() {
|
||||||
// load more data
|
// load more data
|
||||||
_loadingLinks.postValue(Resource.Loading())
|
_loadingLinks.postValue(Resource.Loading())
|
||||||
val loadingState = safeApiCall {
|
val loadingState = safeApiCall {
|
||||||
generator?.generateLinks(type = type,clearCache = clearCache, callback = {
|
generator?.generateLinks(type = type, clearCache = clearCache, callback = {
|
||||||
currentLinks.add(it)
|
currentLinks.add(it)
|
||||||
// Clone to prevent ConcurrentModificationException
|
// Clone to prevent ConcurrentModificationException
|
||||||
normalSafeApiCall {
|
normalSafeApiCall {
|
||||||
// Extra normalSafeApiCall since .toSet() iterates.
|
// Extra normalSafeApiCall since .toSet() iterates.
|
||||||
_currentLinks.postValue(currentLinks.toSet())
|
_currentLinks.postValue(currentLinks.toSet())
|
||||||
}
|
}
|
||||||
}, subtitleCallback = {
|
}, subtitleCallback = {
|
||||||
currentSubs.add(it)
|
currentSubs.add(it)
|
||||||
normalSafeApiCall {
|
normalSafeApiCall {
|
||||||
_currentSubs.postValue(currentSubs.toSet())
|
_currentSubs.postValue(currentSubs.toSet())
|
||||||
|
|
Loading…
Reference in a new issue