From 3ef8dc0092525b66ead9f62ab8f6dd9b5c0e365a Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Fri, 10 Feb 2023 07:14:20 +0530 Subject: [PATCH] Convert CustomInstanceDao methods to suspend functions. --- .../github/libretube/db/dao/CustomInstanceDao.kt | 10 +++------- .../com/github/libretube/helpers/BackupHelper.kt | 4 +--- .../libretube/ui/dialogs/CustomInstanceDialog.kt | 12 ++++++------ .../com/github/libretube/ui/dialogs/ShareDialog.kt | 14 +++++++------- .../libretube/ui/preferences/InstanceSettings.kt | 10 ++++++---- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/github/libretube/db/dao/CustomInstanceDao.kt b/app/src/main/java/com/github/libretube/db/dao/CustomInstanceDao.kt index 182db494e..f5ec10976 100644 --- a/app/src/main/java/com/github/libretube/db/dao/CustomInstanceDao.kt +++ b/app/src/main/java/com/github/libretube/db/dao/CustomInstanceDao.kt @@ -1,7 +1,6 @@ package com.github.libretube.db.dao import androidx.room.Dao -import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query @@ -10,14 +9,11 @@ import com.github.libretube.db.obj.CustomInstance @Dao interface CustomInstanceDao { @Query("SELECT * FROM customInstance") - fun getAll(): List + suspend fun getAll(): List @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertAll(vararg customInstances: CustomInstance) - - @Delete - fun delete(customInstance: CustomInstance) + suspend fun insertAll(customInstances: List) @Query("DELETE FROM customInstance") - fun deleteAll() + suspend fun deleteAll() } diff --git a/app/src/main/java/com/github/libretube/helpers/BackupHelper.kt b/app/src/main/java/com/github/libretube/helpers/BackupHelper.kt index 0bb093d1e..733381e25 100644 --- a/app/src/main/java/com/github/libretube/helpers/BackupHelper.kt +++ b/app/src/main/java/com/github/libretube/helpers/BackupHelper.kt @@ -54,9 +54,7 @@ object BackupHelper { *backupFile.watchPositions.orEmpty().toTypedArray() ) Database.localSubscriptionDao().insertAll(backupFile.localSubscriptions.orEmpty()) - Database.customInstanceDao().insertAll( - *backupFile.customInstances.orEmpty().toTypedArray() - ) + Database.customInstanceDao().insertAll(backupFile.customInstances.orEmpty()) Database.playlistBookmarkDao().insertAll( *backupFile.playlistBookmarks.orEmpty().toTypedArray() ) diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/CustomInstanceDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/CustomInstanceDialog.kt index 71901791b..eca3944cc 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/CustomInstanceDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/CustomInstanceDialog.kt @@ -5,12 +5,13 @@ import android.os.Bundle import android.widget.Toast import androidx.core.app.ActivityCompat import androidx.fragment.app.DialogFragment +import androidx.lifecycle.lifecycleScope import com.github.libretube.R import com.github.libretube.databinding.DialogCustomInstanceBinding import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.obj.CustomInstance -import com.github.libretube.extensions.query import com.google.android.material.dialog.MaterialAlertDialogBuilder +import kotlinx.coroutines.launch import okhttp3.HttpUrl.Companion.toHttpUrlOrNull class CustomInstanceDialog : DialogFragment() { @@ -28,13 +29,12 @@ class CustomInstanceDialog : DialogFragment() { if (instanceName.isNotEmpty() && apiUrl.isNotEmpty() && frontendUrl.isNotEmpty()) { if (apiUrl.toHttpUrlOrNull() != null && frontendUrl.toHttpUrlOrNull() != null) { - query { + lifecycleScope.launch { Database.customInstanceDao() - .insertAll(CustomInstance(instanceName, apiUrl, frontendUrl)) + .insertAll(listOf(CustomInstance(instanceName, apiUrl, frontendUrl))) + ActivityCompat.recreate(requireActivity()) + dismiss() } - - ActivityCompat.recreate(requireActivity()) - dismiss() } else { Toast.makeText(requireContext(), R.string.invalid_url, Toast.LENGTH_SHORT) .show() diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt index 02fca5706..be4a0fea0 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt @@ -12,10 +12,11 @@ import com.github.libretube.constants.YOUTUBE_FRONTEND_URL import com.github.libretube.databinding.DialogShareBinding import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.enums.ShareObjectType -import com.github.libretube.extensions.awaitQuery import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.obj.ShareData import com.google.android.material.dialog.MaterialAlertDialogBuilder +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking class ShareDialog( private val id: String, @@ -32,7 +33,9 @@ class ShareDialog( val instanceUrl = getCustomInstanceFrontendUrl() val shareableTitle = getShareableTitle(shareData) // add instanceUrl option if custom instance frontend url available - if (instanceUrl != "") shareOptions += getString(R.string.instance) + if (instanceUrl.isNotEmpty()) { + shareOptions += getString(R.string.instance) + } if (shareObjectType == ShareObjectType.VIDEO) { setupTimeStampBinding() @@ -97,15 +100,12 @@ class ShareDialog( ) // get the api urls of the other custom instances - val customInstances = awaitQuery { + val customInstances = runBlocking(Dispatchers.IO) { Database.customInstanceDao().getAll() } // return the custom instance frontend url if available - customInstances.forEach { instance -> - if (instance.apiUrl == instancePref) return instance.frontendUrl - } - return "" + return customInstances.firstOrNull { it.apiUrl == instancePref }?.frontendUrl.orEmpty() } private fun getShareableTitle(shareData: ShareData): String { diff --git a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt index 4c57e3e27..0a27dfbb6 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt @@ -13,7 +13,6 @@ import com.github.libretube.constants.FALLBACK_INSTANCES_URL import com.github.libretube.constants.PIPED_INSTANCES_URL import com.github.libretube.constants.PreferenceKeys import com.github.libretube.db.DatabaseHolder.Database -import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.base.BasePreferenceFragment @@ -21,6 +20,9 @@ import com.github.libretube.ui.dialogs.CustomInstanceDialog import com.github.libretube.ui.dialogs.DeleteAccountDialog import com.github.libretube.ui.dialogs.LoginDialog import com.github.libretube.ui.dialogs.LogoutDialog +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class InstanceSettings : BasePreferenceFragment() { override val titleResourceId: Int = R.string.instance @@ -82,10 +84,10 @@ class InstanceSettings : BasePreferenceFragment() { val clearCustomInstances = findPreference(PreferenceKeys.CLEAR_CUSTOM_INSTANCES) clearCustomInstances?.setOnPreferenceClickListener { - awaitQuery { + lifecycleScope.launch { Database.customInstanceDao().deleteAll() + ActivityCompat.recreate(requireActivity()) } - ActivityCompat.recreate(requireActivity()) true } @@ -116,7 +118,7 @@ class InstanceSettings : BasePreferenceFragment() { private fun initCustomInstances(instancePref: ListPreference) { val appContext = requireContext().applicationContext lifecycleScope.launchWhenCreated { - val customInstances = awaitQuery { + val customInstances = withContext(Dispatchers.IO) { Database.customInstanceDao().getAll() }