Skip to content

Commit

Permalink
refactor: use suspend database queries
Browse files Browse the repository at this point in the history
  • Loading branch information
Bnyro committed Jun 12, 2024
1 parent 98e3159 commit 21c7d1d
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 84 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ dependencies {
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")

// Room database
implementation("androidx.room:room-runtime:2.5.1")
implementation("androidx.room:room-ktx:2.5.1")
ksp("androidx.room:room-compiler:2.5.1")

// Tesseract OCR
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/java/com/bnyro/translate/db/dao/HistoryDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,22 @@ import com.bnyro.translate.db.obj.HistoryItemType
@Dao
interface HistoryDao {
@Query("SELECT * FROM HistoryItem WHERE itemType = :type")
fun getAll(type: HistoryItemType): List<HistoryItem>
suspend fun getAll(type: HistoryItemType): List<HistoryItem>

@Query("SELECT EXISTS(SELECT * FROM HistoryItem WHERE insertedText = :insertedText AND sourceLanguageCode = :sourceLanguage AND targetLanguageCode = :targetLanguage AND itemType = :itemType)")
fun existsSimilar(
suspend fun existsSimilar(
insertedText: String,
sourceLanguage: String,
targetLanguage: String,
itemType: HistoryItemType
): Boolean

@Insert
fun insertAll(vararg historyItems: HistoryItem)
suspend fun insertAll(vararg historyItems: HistoryItem)

@Delete
fun delete(historyItem: HistoryItem)
suspend fun delete(historyItem: HistoryItem)

@Query("DELETE FROM HistoryItem WHERE itemType = :type")
fun deleteAll(type: HistoryItemType)
suspend fun deleteAll(type: HistoryItemType)
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ import com.bnyro.translate.db.obj.Language
@Dao
interface LanguageBookmarksDao {
@Query("SELECT * FROM Language")
fun getAll(): List<Language>
suspend fun getAll(): List<Language>

@Insert
fun insertAll(vararg languages: Language)
suspend fun insertAll(vararg languages: Language)

@Delete
fun delete(language: Language)
suspend fun delete(language: Language)

@Query("DELETE FROM Language")
fun deleteAll()
suspend fun deleteAll()
}
29 changes: 0 additions & 29 deletions app/src/main/java/com/bnyro/translate/ext/AwaitQuery.kt

This file was deleted.

24 changes: 0 additions & 24 deletions app/src/main/java/com/bnyro/translate/ext/Query.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand All @@ -50,9 +51,10 @@ import androidx.compose.ui.unit.sp
import com.bnyro.translate.DatabaseHolder
import com.bnyro.translate.R
import com.bnyro.translate.db.obj.Language
import com.bnyro.translate.ext.query
import com.bnyro.translate.ui.dialogs.FullscreenDialog
import com.bnyro.translate.ui.models.TranslationModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable
Expand All @@ -64,6 +66,8 @@ fun LanguageSelector(
useElevatedButton: Boolean = true,
onClick: (Language) -> Unit
) {
val scope = rememberCoroutineScope()

var showDialog by remember {
mutableStateOf(false)
}
Expand Down Expand Up @@ -199,7 +203,7 @@ fun LanguageSelector(
viewModel.bookmarkedLanguages.filter { language ->
it != language
}
query {
scope.launch(Dispatchers.IO) {
DatabaseHolder.Db.languageBookmarksDao().delete(it)
}
}
Expand Down Expand Up @@ -235,14 +239,13 @@ fun LanguageSelector(
onPinnedChange = {
viewModel.bookmarkedLanguages =
if (viewModel.bookmarkedLanguages.contains(it)) {
query {
scope.launch(Dispatchers.IO) {
DatabaseHolder.Db.languageBookmarksDao().delete(it)
}
viewModel.bookmarkedLanguages - it
} else {
query {
DatabaseHolder.Db.languageBookmarksDao()
.insertAll(it)
scope.launch(Dispatchers.IO) {
DatabaseHolder.Db.languageBookmarksDao().insertAll(it)
}
viewModel.bookmarkedLanguages + it
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,10 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.bnyro.translate.R
import com.bnyro.translate.const.AboutLinks
import com.bnyro.translate.ext.query
import com.bnyro.translate.util.ClipboardHelper
import java.net.URL
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

@Composable
fun PrivacyPolicyDialog(
Expand All @@ -48,7 +49,7 @@ fun PrivacyPolicyDialog(
}

LaunchedEffect(Unit) {
query {
withContext(Dispatchers.IO) {
privacyPolicyHtml = try {
URL(AboutLinks.PRIVACY_POLICY).readText()
} catch (e: Exception) {
Expand Down
12 changes: 7 additions & 5 deletions app/src/main/java/com/bnyro/translate/ui/models/HistoryModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ package com.bnyro.translate.ui.models
import android.annotation.SuppressLint
import androidx.compose.runtime.mutableStateListOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.bnyro.translate.DatabaseHolder.Companion.Db
import com.bnyro.translate.db.obj.HistoryItem
import com.bnyro.translate.db.obj.HistoryItemType
import com.bnyro.translate.ext.query
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

@SuppressLint("MutableCollectionMutableState")
class HistoryModel : ViewModel() {
Expand All @@ -32,23 +34,23 @@ class HistoryModel : ViewModel() {
fun fetchItems(itemType: HistoryItemType) {
items.clear()

query {
viewModelScope.launch(Dispatchers.IO) {
items.addAll(Db.historyDao().getAll(itemType).reversed())
}
}

fun clearItems(itemType: HistoryItemType) {
items.clear()

query {
viewModelScope.launch(Dispatchers.IO) {
Db.historyDao().deleteAll(itemType)
}
}

fun deleteItem(historyItem: HistoryItem) {
items.removeAll { it.id != historyItem.id }
items.removeAll { it.id == historyItem.id }

query {
viewModelScope.launch(Dispatchers.IO) {
Db.historyDao().delete(historyItem)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ import com.bnyro.translate.const.TranslationEngines
import com.bnyro.translate.db.obj.HistoryItem
import com.bnyro.translate.db.obj.HistoryItemType
import com.bnyro.translate.db.obj.Language
import com.bnyro.translate.ext.awaitQuery
import com.bnyro.translate.ext.query
import com.bnyro.translate.obj.Translation
import com.bnyro.translate.util.JsonHelper
import com.bnyro.translate.util.Preferences
Expand Down Expand Up @@ -181,7 +179,7 @@ class TranslationModel : ViewModel() {
itemType = itemType
)

query {
viewModelScope.launch(Dispatchers.IO) {
// don't create new entry if a similar one exists
if (Preferences.get(Preferences.skipSimilarHistoryKey, true) && Db.historyDao()
.existsSimilar(
Expand All @@ -190,7 +188,7 @@ class TranslationModel : ViewModel() {
historyItem.targetLanguageCode,
itemType = itemType
)
) return@query
) return@launch

Db.historyDao().insertAll(historyItem)
}
Expand Down Expand Up @@ -247,10 +245,8 @@ class TranslationModel : ViewModel() {
fetchBookmarkedLanguages()
}

private fun fetchBookmarkedLanguages() {
bookmarkedLanguages = awaitQuery {
Db.languageBookmarksDao().getAll()
}
private fun fetchBookmarkedLanguages() = viewModelScope.launch(Dispatchers.IO) {
bookmarkedLanguages = Db.languageBookmarksDao().getAll()
}

fun processImage(context: Context, uri: Uri?) {
Expand Down

0 comments on commit 21c7d1d

Please sign in to comment.