From 6012ffb509e27591297fb2c19d43b5ecc8949ad4 Mon Sep 17 00:00:00 2001 From: antonydp <38143733+antonydp@users.noreply.github.com> Date: Mon, 31 Oct 2022 10:38:52 +0100 Subject: [PATCH 1/4] rename variables and String.isTransferable fix --- .../syncproviders/providers/GithubApi.kt | 6 +++--- .../lagradost/cloudstream3/utils/BackupUtils.kt | 14 +++++++------- app/src/main/res/values-it/strings.xml | 3 ++- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/GithubApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/GithubApi.kt index 42bf2b02..06137a57 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/GithubApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/GithubApi.kt @@ -84,7 +84,7 @@ class GithubApi(index: Int) : InAppAuthAPIManager(index){ if (repo?.isEmpty() == true){ val backupData = context?.getBackup() - val gitresponse = app.post("https://api.github.com/gists", + val gitResponse = app.post("https://api.github.com/gists", headers= mapOf( Pair("Accept" , "application/vnd.github+json"), Pair("Authorization", "token $githubToken"), @@ -92,8 +92,8 @@ class GithubApi(index: Int) : InAppAuthAPIManager(index){ requestBody = GistRequestBody("Cloudstream private backup gist", false, FilesGist(ContentFilesGist(backupData?.toJson()))).toJson().toRequestBody( RequestBodyTypes.JSON.toMediaTypeOrNull())) - if (!gitresponse.isSuccessful) {return false} - tryParseJson(gitresponse.text).let { + if (!gitResponse.isSuccessful) {return false} + tryParseJson(gitResponse.text).let { setKey(accountId, GITHUB_USER_KEY, GithubOAuthEntity( token = githubToken, gistId = it?.gistId?: run { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 988975cf..b20b5093 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -82,7 +82,7 @@ object BackupUtils { /** false if blacklisted key */ private fun String.isTransferable(): Boolean { - return !nonTransferableKeys.contains(this) + return !nonTransferableKeys.contains(this) and !nonTransferableKeys.any { this.endsWith(it) } } var restoreFileSelector: ActivityResultLauncher>? = null @@ -295,7 +295,7 @@ object BackupUtils { fun FragmentActivity.backupGithub(){ - val backup = this.getBackup() + val backup = this.getBackup().toJson() val gistId = githubApi.getLatestLoginData()?.server ?: throw IllegalArgumentException ("Requires Username") val token = githubApi.getLatestLoginData()?.password ?: throw IllegalArgumentException ("Requires Username") @@ -309,7 +309,7 @@ object BackupUtils { requestBody = GithubApi.GistRequestBody( "Cloudstream private backup gist", false, - GithubApi.FilesGist(GithubApi.ContentFilesGist(backup.toJson()))) + GithubApi.FilesGist(GithubApi.ContentFilesGist(backup))) .toJson() .toRequestBody(RequestBodyTypes.JSON.toMediaTypeOrNull()) ) @@ -322,11 +322,11 @@ object BackupUtils { } suspend fun Context.restorePromptGithub() { val gistId = githubApi.getLatestLoginData()?.server ?: throw IllegalAccessException() - val jsondata = app.get(" https://api.github.com/gists/$gistId").text - val dataraw = - parseJson(jsondata ?: "").files.values.first().dataRaw + val jsonData = app.get("https://api.github.com/gists/$gistId").text + val dataRaw = + parseJson(jsonData ?: "").files.values.first().dataRaw ?: throw IllegalAccessException() - val data = parseJson(dataraw) + val data = parseJson(dataRaw) restore( data, restoreSettings = true, diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 86206213..64712586 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -165,6 +165,7 @@ Sincronizza automaticamente gli episodi guardati Ripristinare i dati da backup + Backup automatico su Github Backup data File di backup caricato @@ -176,7 +177,7 @@ Cerca Accounts Aggiornamenti e Backup - + Info Ricerca avanzata Dividi i risultati della ricerca per provider From 105b03f4a1d240d9b6b2ac17323def4760a5f315 Mon Sep 17 00:00:00 2001 From: antonydp <38143733+antonydp@users.noreply.github.com> Date: Sat, 5 Nov 2022 19:42:44 +0100 Subject: [PATCH 2/4] reloadStoredDataEvent and fixes --- .../java/com/lagradost/cloudstream3/MainActivity.kt | 10 +++++----- .../com/lagradost/cloudstream3/ui/home/HomeFragment.kt | 7 +++++++ .../com/lagradost/cloudstream3/utils/BackupUtils.kt | 2 ++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 5e876ab4..09b12602 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -385,7 +385,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { logError(e) } val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), false)) { + if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), true)) { this@MainActivity.backupGithub() } } @@ -607,6 +607,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { logError(e) } } + + if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), true)){ + context?.restorePromptGithub() + } } SearchResultBuilder.updateCache(this) @@ -615,10 +619,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { initAll() // No duplicates (which can happen by registerMainAPI) apis = allProviders.distinctBy { it } - - if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), false)){ - context?.restorePromptGithub() - } } // val navView: BottomNavigationView = findViewById(R.id.nav_view) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 4b9dd5be..877e918c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -121,6 +121,7 @@ class HomeFragment : Fragment() { val configEvent = Event() var currentSpan = 1 val listHomepageItems = mutableListOf() + val reloadStoredDataEvent = Event() private val errorProfilePics = listOf( R.drawable.monke_benene, @@ -471,14 +472,20 @@ class HomeFragment : Fragment() { reloadStored() afterPluginsLoadedEvent += ::firstLoadHomePage mainPluginsLoadedEvent += ::firstLoadHomePage + reloadStoredDataEvent += ::reloadStoredEvent } override fun onStop() { afterPluginsLoadedEvent -= ::firstLoadHomePage mainPluginsLoadedEvent -= ::firstLoadHomePage + reloadStoredDataEvent -= ::reloadStoredEvent super.onStop() } + private fun reloadStoredEvent(input: Unit) { + reloadStored() + } + private fun reloadStored() { homeViewModel.loadResumeWatching() val list = EnumSet.noneOf(WatchType::class.java) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index b20b5093..8a88b1be 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -32,6 +32,7 @@ import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_T import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_UNIXTIME_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_USER_KEY import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi.Companion.OPEN_SUBTITLES_USER_KEY +import com.lagradost.cloudstream3.ui.home.HomeFragment import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppUtils.toJson @@ -332,5 +333,6 @@ object BackupUtils { restoreSettings = true, restoreDataStore = true ) + HomeFragment.reloadStoredDataEvent.invoke(Unit) } } From 9b835f662790c358c27cdb546d20c2d47933250d Mon Sep 17 00:00:00 2001 From: antonydp <38143733+antonydp@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:22:56 +0100 Subject: [PATCH 3/4] restorePromptGithub on onStart() --- .../java/com/lagradost/cloudstream3/MainActivity.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 09b12602..cfd650bb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -503,6 +503,15 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } + override fun onStart() { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + super.onStart() + ioSafe { + if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), true)){ + context?.restorePromptGithub() + } + } + } override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) @@ -607,10 +616,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { logError(e) } } - - if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), true)){ - context?.restorePromptGithub() - } } SearchResultBuilder.updateCache(this) From 2374ba26e26cf2790432ef930bea2a93a394a024 Mon Sep 17 00:00:00 2001 From: antonydp <38143733+antonydp@users.noreply.github.com> Date: Mon, 7 Nov 2022 14:06:44 +0100 Subject: [PATCH 4/4] accountsLoginLock.withLock{} --- .../lagradost/cloudstream3/MainActivity.kt | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index cfd650bb..6805ec81 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -329,6 +329,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { //private var mCastSession: CastSession? = null lateinit var mSessionManager: SessionManager private val mSessionManagerListener: SessionManagerListener by lazy { SessionManagerListenerImpl() } + private val accountsLoginLock = Mutex() private inner class SessionManagerListenerImpl : SessionManagerListener { override fun onSessionStarting(session: Session) { @@ -507,8 +508,14 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) super.onStart() ioSafe { - if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean(getString(R.string.automatic_cloud_backups), true)){ - context?.restorePromptGithub() + accountsLoginLock.withLock { + if (githubApi.getLatestLoginData() != null && settingsManager.getBoolean( + getString(R.string.automatic_cloud_backups), + true + ) + ) { + context?.restorePromptGithub() + } } } } @@ -605,15 +612,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // init accounts ioSafe { - for (api in accountManagers) { - api.init() - } + accountsLoginLock.withLock{ + for (api in accountManagers) { + api.init() + } - inAppAuths.amap { api -> - try { - api.initialize() - } catch (e: Exception) { - logError(e) + inAppAuths.amap { api -> + try { + api.initialize() + } catch (e: Exception) { + logError(e) + } } } }