mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Make account homepage persistent
This commit is contained in:
parent
71ae9a59a1
commit
65c927496d
6 changed files with 55 additions and 18 deletions
app/src/main/java/com/lagradost/cloudstream3
|
@ -128,6 +128,7 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
|||
import com.lagradost.cloudstream3.utils.Coroutines.main
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||
import com.lagradost.cloudstream3.utils.DataStore.setKey
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.migrateResumeWatching
|
||||
import com.lagradost.cloudstream3.utils.Event
|
||||
import com.lagradost.cloudstream3.utils.IOnBackPressed
|
||||
|
@ -305,6 +306,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
|
||||
// kinda shitty solution, but cant com main->home otherwise for popups
|
||||
val bookmarksUpdatedEvent = Event<Boolean>()
|
||||
/**
|
||||
* Used by data store helper to fully reload home when switching accounts
|
||||
*/
|
||||
val reloadHomeEvent = Event<Boolean>()
|
||||
|
||||
|
||||
/**
|
||||
|
@ -1187,7 +1192,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
}
|
||||
} else if (lastError == null) {
|
||||
ioSafe {
|
||||
getKey<String>(USER_SELECTED_HOMEPAGE_API)?.let { homeApi ->
|
||||
DataStoreHelper.currentHomePage?.let { homeApi ->
|
||||
mainPluginsLoadedEvent.invoke(loadSinglePlugin(this@MainActivity, homeApi))
|
||||
} ?: run {
|
||||
mainPluginsLoadedEvent.invoke(false)
|
||||
|
@ -1548,6 +1553,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
migrateResumeWatching()
|
||||
}
|
||||
|
||||
getKey<String>(USER_SELECTED_HOMEPAGE_API)?.let { homepage ->
|
||||
DataStoreHelper.currentHomePage = homepage
|
||||
removeKey(USER_SELECTED_HOMEPAGE_API)
|
||||
}
|
||||
|
||||
try {
|
||||
if (getKey(HAS_DONE_SETUP_KEY, false) != true) {
|
||||
navController.navigate(R.id.navigation_setup_language)
|
||||
|
|
|
@ -69,7 +69,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
|||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
|
||||
import java.util.*
|
||||
|
||||
|
@ -669,7 +668,7 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
|
||||
homeViewModel.reloadStored()
|
||||
homeViewModel.loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), false)
|
||||
homeViewModel.loadAndCancel(DataStoreHelper.currentHomePage, false)
|
||||
//loadHomePage(false)
|
||||
|
||||
// nice profile pic on homepage
|
||||
|
|
|
@ -49,7 +49,6 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData
|
|||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
|
@ -426,23 +425,29 @@ class HomeViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
private fun afterPluginsLoaded(forceReload: Boolean) {
|
||||
loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), forceReload)
|
||||
loadAndCancel(DataStoreHelper.currentHomePage, forceReload)
|
||||
}
|
||||
|
||||
private fun afterMainPluginsLoaded(unused: Boolean = false) {
|
||||
loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), false)
|
||||
loadAndCancel(DataStoreHelper.currentHomePage, false)
|
||||
}
|
||||
|
||||
private fun reloadHome(unused: Boolean = false) {
|
||||
loadAndCancel(DataStoreHelper.currentHomePage, true)
|
||||
}
|
||||
|
||||
init {
|
||||
MainActivity.bookmarksUpdatedEvent += ::bookmarksUpdated
|
||||
MainActivity.afterPluginsLoadedEvent += ::afterPluginsLoaded
|
||||
MainActivity.mainPluginsLoadedEvent += ::afterMainPluginsLoaded
|
||||
MainActivity.reloadHomeEvent += ::reloadHome
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
MainActivity.bookmarksUpdatedEvent -= ::bookmarksUpdated
|
||||
MainActivity.afterPluginsLoadedEvent -= ::afterPluginsLoaded
|
||||
MainActivity.mainPluginsLoadedEvent -= ::afterMainPluginsLoaded
|
||||
MainActivity.reloadHomeEvent -= ::reloadHome
|
||||
super.onCleared()
|
||||
}
|
||||
|
||||
|
@ -495,7 +500,7 @@ class HomeViewModel : ViewModel() {
|
|||
val api = getApiFromNameNull(preferredApiName)
|
||||
if (preferredApiName == noneApi.name) {
|
||||
// just set to random
|
||||
if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name)
|
||||
if (fromUI) DataStoreHelper.currentHomePage = noneApi.name
|
||||
loadAndCancel(noneApi)
|
||||
} else if (preferredApiName == randomApi.name) {
|
||||
// randomize the api, if none exist like if not loaded or not installed
|
||||
|
@ -506,7 +511,7 @@ class HomeViewModel : ViewModel() {
|
|||
} else {
|
||||
val apiRandom = validAPIs.random()
|
||||
loadAndCancel(apiRandom)
|
||||
if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name)
|
||||
if (fromUI) DataStoreHelper.currentHomePage = apiRandom.name
|
||||
}
|
||||
} else if (api == null) {
|
||||
// API is not found aka not loaded or removed, post the loading
|
||||
|
@ -520,7 +525,7 @@ class HomeViewModel : ViewModel() {
|
|||
}
|
||||
} else {
|
||||
// if the api is found, then set it to it and save key
|
||||
if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, api.name)
|
||||
if (fromUI) DataStoreHelper.currentHomePage = api.name
|
||||
loadAndCancel(api)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import com.lagradost.cloudstream3.ui.APIRepository
|
|||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
|
||||
import com.lagradost.cloudstream3.utils.SubtitleHelper
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||
|
@ -96,7 +96,7 @@ class SettingsProviders : PreferenceFragmentCompat() {
|
|||
this.getString(R.string.prefer_media_type_key),
|
||||
selectedList.map { it.toString() }.toMutableSet()
|
||||
).apply()
|
||||
removeKey(USER_SELECTED_HOMEPAGE_API)
|
||||
DataStoreHelper.currentHomePage = null
|
||||
//(context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) }
|
||||
}
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ import com.lagradost.cloudstream3.R
|
|||
import com.lagradost.cloudstream3.TvType
|
||||
import com.lagradost.cloudstream3.databinding.FragmentSetupMediaBinding
|
||||
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
||||
|
||||
|
||||
class SetupFragmentMedia : Fragment() {
|
||||
|
@ -77,7 +77,7 @@ class SetupFragmentMedia : Fragment() {
|
|||
.apply()
|
||||
|
||||
// Regenerate set homepage
|
||||
removeKey(USER_SELECTED_HOMEPAGE_API)
|
||||
DataStoreHelper.currentHomePage = null
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -77,10 +77,28 @@ object DataStoreHelper {
|
|||
var selectedKeyIndex by PreferenceDelegate("$TAG/account_key_index", 0)
|
||||
val currentAccount: String get() = selectedKeyIndex.toString()
|
||||
|
||||
private fun setAccount(account: Account) {
|
||||
/**
|
||||
* Get or set the current account homepage.
|
||||
* Setting this does not automatically reload the homepage.
|
||||
*/
|
||||
var currentHomePage: String?
|
||||
get() = getKey("$currentAccount/$USER_SELECTED_HOMEPAGE_API")
|
||||
set(value) {
|
||||
val key = "$currentAccount/$USER_SELECTED_HOMEPAGE_API"
|
||||
if (value == null) {
|
||||
removeKey(key)
|
||||
} else {
|
||||
setKey(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setAccount(account: Account, refreshHomePage: Boolean) {
|
||||
selectedKeyIndex = account.keyIndex
|
||||
showToast(account.name)
|
||||
MainActivity.bookmarksUpdatedEvent(true)
|
||||
if (refreshHomePage) {
|
||||
MainActivity.reloadHomeEvent(true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun editAccount(context: Context, account: Account, isNewAccount: Boolean) {
|
||||
|
@ -112,7 +130,7 @@ object DataStoreHelper {
|
|||
accounts = currentAccounts.toTypedArray()
|
||||
|
||||
// update UI
|
||||
setAccount(getDefaultAccount(context))
|
||||
setAccount(getDefaultAccount(context), true)
|
||||
MainActivity.bookmarksUpdatedEvent(true)
|
||||
dialog?.dismissSafe()
|
||||
}
|
||||
|
@ -161,8 +179,13 @@ object DataStoreHelper {
|
|||
currentAccounts.add(currentEditAccount)
|
||||
}
|
||||
|
||||
// Save the current homepage for new accounts
|
||||
val currentHomePage = DataStoreHelper.currentHomePage
|
||||
|
||||
// set the new default account as well as add the key for the new account
|
||||
setAccount(currentEditAccount)
|
||||
setAccount(currentEditAccount, false)
|
||||
DataStoreHelper.currentHomePage = currentHomePage
|
||||
|
||||
accounts = currentAccounts.toTypedArray()
|
||||
|
||||
dialog.dismissSafe()
|
||||
|
@ -204,7 +227,7 @@ object DataStoreHelper {
|
|||
)
|
||||
binding.profilesRecyclerview.adapter = WhoIsWatchingAdapter(
|
||||
selectCallBack = { account ->
|
||||
setAccount(account)
|
||||
setAccount(account, true)
|
||||
builder.dismissSafe()
|
||||
},
|
||||
addAccountCallback = {
|
||||
|
@ -353,7 +376,7 @@ object DataStoreHelper {
|
|||
removeKeys(folder2)
|
||||
}
|
||||
|
||||
fun deleteBookmarkedData(id : Int?) {
|
||||
fun deleteBookmarkedData(id: Int?) {
|
||||
if (id == null) return
|
||||
removeKey("$currentAccount/$RESULT_WATCH_STATE", id.toString())
|
||||
removeKey("$currentAccount/$RESULT_WATCH_STATE_DATA", id.toString())
|
||||
|
|
Loading…
Reference in a new issue