2021-04-30 17:20:15 +00:00
|
|
|
package com.lagradost.cloudstream3.ui.home
|
|
|
|
|
2021-07-30 21:03:46 +00:00
|
|
|
import android.content.Context
|
2021-04-30 17:20:15 +00:00
|
|
|
import androidx.lifecycle.LiveData
|
|
|
|
import androidx.lifecycle.MutableLiveData
|
|
|
|
import androidx.lifecycle.ViewModel
|
2021-07-29 00:19:42 +00:00
|
|
|
import androidx.lifecycle.viewModelScope
|
|
|
|
import com.lagradost.cloudstream3.APIHolder.apis
|
|
|
|
import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull
|
|
|
|
import com.lagradost.cloudstream3.HomePageResponse
|
2021-07-29 15:16:08 +00:00
|
|
|
import com.lagradost.cloudstream3.MainAPI
|
2021-07-30 21:03:46 +00:00
|
|
|
import com.lagradost.cloudstream3.SearchResponse
|
2021-07-29 00:19:42 +00:00
|
|
|
import com.lagradost.cloudstream3.mvvm.Resource
|
|
|
|
import com.lagradost.cloudstream3.ui.APIRepository
|
2021-07-30 21:03:46 +00:00
|
|
|
import com.lagradost.cloudstream3.ui.WatchType
|
|
|
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds
|
|
|
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData
|
|
|
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
2021-07-29 00:19:42 +00:00
|
|
|
import kotlinx.coroutines.launch
|
2021-07-30 21:03:46 +00:00
|
|
|
import kotlinx.coroutines.withContext
|
2021-04-30 17:20:15 +00:00
|
|
|
|
|
|
|
class HomeViewModel : ViewModel() {
|
2021-07-29 00:19:42 +00:00
|
|
|
var repo: APIRepository? = null
|
2021-04-30 17:20:15 +00:00
|
|
|
|
2021-07-29 00:19:42 +00:00
|
|
|
private val _apiName = MutableLiveData<String>()
|
|
|
|
val apiName: LiveData<String> = _apiName
|
|
|
|
|
|
|
|
private val _page = MutableLiveData<Resource<HomePageResponse>>()
|
|
|
|
val page: LiveData<Resource<HomePageResponse>> = _page
|
|
|
|
|
|
|
|
private fun autoloadRepo(): APIRepository {
|
|
|
|
return APIRepository(apis.first { it.hasMainPage })
|
|
|
|
}
|
|
|
|
|
2021-07-30 23:41:54 +00:00
|
|
|
private val _availableWatchStatusTypes = MutableLiveData<Pair<WatchType, List<WatchType>>>()
|
|
|
|
val availableWatchStatusTypes: LiveData<Pair<WatchType, List<WatchType>>> = _availableWatchStatusTypes
|
|
|
|
private val _bookmarks = MutableLiveData<List<SearchResponse>>()
|
|
|
|
val bookmarks: LiveData<List<SearchResponse>> = _bookmarks
|
2021-07-30 21:03:46 +00:00
|
|
|
|
|
|
|
fun loadStoredData(context: Context, preferredWatchStatus: WatchType?) = viewModelScope.launch {
|
|
|
|
val watchStatusIds = withContext(Dispatchers.IO) {
|
|
|
|
context.getAllWatchStateIds().map { id ->
|
|
|
|
Pair(id, context.getResultWatchState(id))
|
|
|
|
}
|
2021-07-30 23:41:54 +00:00
|
|
|
}.distinctBy { it.first }
|
2021-07-30 21:03:46 +00:00
|
|
|
val length = WatchType.values().size
|
|
|
|
val currentWatchTypes = HashSet<WatchType>()
|
|
|
|
|
|
|
|
for (watch in watchStatusIds) {
|
|
|
|
currentWatchTypes.add(watch.second)
|
|
|
|
if (currentWatchTypes.size >= length) {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-30 23:41:54 +00:00
|
|
|
currentWatchTypes.remove(WatchType.NONE)
|
|
|
|
|
2021-07-30 21:03:46 +00:00
|
|
|
if (currentWatchTypes.size <= 0) {
|
2021-07-30 23:41:54 +00:00
|
|
|
_bookmarks.postValue(ArrayList())
|
2021-07-30 21:03:46 +00:00
|
|
|
return@launch
|
|
|
|
}
|
|
|
|
|
2021-07-30 23:41:54 +00:00
|
|
|
val watchPrefNotNull = preferredWatchStatus ?: currentWatchTypes.first()
|
|
|
|
val watchStatus =
|
|
|
|
if (currentWatchTypes.contains(watchPrefNotNull)) watchPrefNotNull else currentWatchTypes.first()
|
|
|
|
_availableWatchStatusTypes.postValue(
|
2021-07-30 21:03:46 +00:00
|
|
|
Pair(
|
|
|
|
watchStatus,
|
|
|
|
currentWatchTypes.sortedBy { it.internalId }.toList()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
val list = withContext(Dispatchers.IO) {
|
2021-07-30 23:41:54 +00:00
|
|
|
watchStatusIds.filter { it.second == watchStatus }
|
|
|
|
.mapNotNull { context.getBookmarkedData(it.first) }
|
|
|
|
.sortedBy { -it.latestUpdatedTime }
|
2021-07-30 21:03:46 +00:00
|
|
|
}
|
2021-07-30 23:41:54 +00:00
|
|
|
_bookmarks.postValue(list)
|
2021-07-30 21:03:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fun load(api: MainAPI?) = viewModelScope.launch {
|
2021-07-29 00:19:42 +00:00
|
|
|
repo = if (api?.hasMainPage == true) {
|
|
|
|
APIRepository(api)
|
|
|
|
} else {
|
|
|
|
autoloadRepo()
|
|
|
|
}
|
2021-07-29 15:44:16 +00:00
|
|
|
_apiName.postValue(repo?.name)
|
2021-07-29 00:19:42 +00:00
|
|
|
_page.postValue(Resource.Loading())
|
|
|
|
_page.postValue(repo?.getMainPage())
|
2021-04-30 17:20:15 +00:00
|
|
|
}
|
2021-07-29 15:16:08 +00:00
|
|
|
|
|
|
|
fun load(preferredApiName: String?) = viewModelScope.launch {
|
|
|
|
val api = getApiFromNameNull(preferredApiName)
|
|
|
|
load(api)
|
|
|
|
}
|
2021-04-30 17:20:15 +00:00
|
|
|
}
|