From 21cff1eb699751fbfae7a6725846de956664a590 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Sat, 22 Mar 2025 22:37:03 +0100 Subject: [PATCH] fix restore crash --- app/build.gradle | 10 +++++----- .../ytdl/database/models/RestoreAppDataItem.kt | 8 +++++++- .../database/viewmodel/SettingsViewModel.kt | 18 +++++++----------- .../ui/more/settings/MainSettingsFragment.kt | 7 +++++-- .../PoTokenGenerator.kt | 1 + .../deniscerri/ytdl/util/BackupSettingsUtil.kt | 16 ++++++++++------ 6 files changed, 35 insertions(+), 25 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bbe6227e..93d6f780 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -139,7 +139,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - coreLibraryDesugaring "com.android.tools:desugar_jdk_libs_nio:2.1.4" + coreLibraryDesugaring "com.android.tools:desugar_jdk_libs_nio:2.1.5" // implementation "com.github.yausername.youtubedl-android:library:$youtubedlAndroidVer" // implementation "com.github.yausername.youtubedl-android:ffmpeg:$youtubedlAndroidVer" // implementation "com.github.yausername.youtubedl-android:aria2c:$youtubedlAndroidVer" @@ -150,7 +150,7 @@ dependencies { implementation "io.github.junkfood02.youtubedl-android:aria2c:0.17.2" implementation "androidx.appcompat:appcompat:$appCompatVer" - implementation "androidx.constraintlayout:constraintlayout:2.2.0" + implementation "androidx.constraintlayout:constraintlayout:2.2.1" implementation 'com.google.android.material:material:1.10.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.4.0' @@ -159,7 +159,7 @@ dependencies { implementation "androidx.navigation:navigation-ui-ktx:$navVer" implementation 'androidx.core:core-ktx:1.15.0' implementation 'androidx.test.ext:junit-ktx:1.2.1' - implementation 'androidx.compose.ui:ui-android:1.7.7' + implementation 'androidx.compose.ui:ui-android:1.7.8' implementation 'androidx.preference:preference-ktx:1.2.1' testImplementation "junit:junit:$junitVer" androidTestImplementation "junit:junit:$junitVer" @@ -173,7 +173,7 @@ dependencies { implementation("com.squareup.picasso:picasso:2.71828") implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" - implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.3.0' implementation 'com.facebook.shimmer:shimmer:0.5.0' implementation "androidx.work:work-runtime-ktx:$workVer" @@ -181,7 +181,7 @@ dependencies { implementation "androidx.room:room-runtime:$roomVer" implementation "androidx.room:room-ktx:$roomVer" ksp "androidx.room:room-compiler:$roomVer" - implementation 'androidx.paging:paging-runtime-ktx:3.3.2' + implementation 'androidx.paging:paging-runtime-ktx:3.3.6' implementation "androidx.room:room-paging:$roomVer" androidTestImplementation "androidx.room:room-testing:$roomVer" implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.7' diff --git a/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt b/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt index f9272049..8653328e 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt @@ -4,7 +4,7 @@ import com.deniscerri.ytdl.database.models.observeSources.ObserveSourcesItem import com.google.gson.JsonArray data class RestoreAppDataItem( - var settings : JsonArray? = null, + var settings : List? = null, var downloads: List? = null, var queued: List? = null, var scheduled: List? = null, @@ -16,4 +16,10 @@ data class RestoreAppDataItem( var shortcuts: List? = null, var searchHistory: List? = null, var observeSources: List? = null, +) + +data class BackupSettingsItem( + var key: String, + var value: String, + var type: String? ) \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt b/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt index 5a1d8f99..a83cd451 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt @@ -23,6 +23,7 @@ import com.deniscerri.ytdl.database.repository.ObserveSourcesRepository import com.deniscerri.ytdl.database.repository.SearchHistoryRepository import com.deniscerri.ytdl.util.BackupSettingsUtil import com.deniscerri.ytdl.util.FileUtil +import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.gson.JsonObject import kotlinx.coroutines.Dispatchers @@ -110,24 +111,19 @@ class SettingsViewModel(private val application: Application) : AndroidViewModel PreferenceManager.getDefaultSharedPreferences(context).edit(commit = true){ clear() prefs.forEach { - val key : String = it.asJsonObject.get("key").toString().replace("\"", "") - when(it.asJsonObject.get("type").toString().replace("\"", "")){ + val key = it.key + when(it.type){ "String" -> { - val value = it.asJsonObject.get("value").toString().replace("\"", "") - putString(key, value) + putString(key, it.value) } "Boolean" -> { - val value = it.asJsonObject.get("value").toString().replace("\"", "").toBoolean() - Log.e("REST", value.toString()) - Log.e("REST", key) - putBoolean(key, value) + putBoolean(key, it.value.toBoolean()) } "Int" -> { - val value = it.asJsonObject.get("value").toString().replace("\"", "").toInt() - putInt(key, value) + putInt(key, it.value.toInt()) } "HashSet" -> { - val value = it.asJsonObject.get("value").toString().replace("(\")|(\\[)|(])|([ \\t])".toRegex(), "").split(",") + val value = it.value.replace("(\")|(\\[)|(])|([ \\t])".toRegex(), "").split(",") putStringSet(key, value.toHashSet()) } } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt index eb021f4a..c50b310f 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt @@ -31,6 +31,7 @@ import androidx.work.WorkManager import com.deniscerri.ytdl.BuildConfig import com.deniscerri.ytdl.MainActivity import com.deniscerri.ytdl.R +import com.deniscerri.ytdl.database.models.BackupSettingsItem import com.deniscerri.ytdl.database.models.CommandTemplate import com.deniscerri.ytdl.database.models.CookieItem import com.deniscerri.ytdl.database.models.DownloadItem @@ -289,8 +290,10 @@ class MainSettingsFragment : PreferenceFragmentCompat() { val parsedDataMessage = StringBuilder() if (json.has("settings")) { - restoreData.settings = json.getAsJsonArray("settings") - parsedDataMessage.appendLine("${getString(R.string.settings)}: ${restoreData.settings!!.size()}") + restoreData.settings = json.getAsJsonArray("settings").map { + Gson().fromJson(it.toString().replace("^\"|\"$", ""), BackupSettingsItem::class.java) + } + parsedDataMessage.appendLine("${getString(R.string.settings)}: ${restoreData.settings!!.size}") } if (json.has("downloads")) { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/PoTokenGenerator.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/PoTokenGenerator.kt index 22b03574..3b85ea7c 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/PoTokenGenerator.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/PoTokenGenerator.kt @@ -14,6 +14,7 @@ import org.schabi.newpipe.extractor.services.youtube.PoTokenProvider import org.schabi.newpipe.extractor.services.youtube.PoTokenResult import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper +//for newpipe class PoTokenGenerator : PoTokenProvider { val TAG = PoTokenGenerator::class.simpleName private val supportsWebView by lazy { runCatching { CookieManager.getInstance() }.isSuccess } diff --git a/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt index a0249a9d..af9ccc67 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt @@ -1,6 +1,7 @@ package com.deniscerri.ytdl.util import android.content.SharedPreferences +import com.deniscerri.ytdl.database.models.BackupSettingsItem import com.deniscerri.ytdl.database.repository.CommandTemplateRepository import com.deniscerri.ytdl.database.repository.CookieRepository import com.deniscerri.ytdl.database.repository.DownloadRepository @@ -19,13 +20,16 @@ object BackupSettingsUtil { runCatching { val prefs = preferences.all prefs.remove("app_language") + + val res = prefs.map { BackupSettingsItem( + key = it.key, + value = it.value.toString(), + type = it.value!!::class.simpleName + ) } + val arr = JsonArray() - prefs.forEach { - val obj = JsonObject() - obj.addProperty("key", it.key) - obj.addProperty("value", it.value.toString()) - obj.addProperty("type", it.value!!::class.simpleName) - arr.add(obj) + res.forEach { + arr.add(JsonParser.parseString(Gson().toJson(it)).asJsonObject) } return arr }