From b5d442ba3c86500b23d5bff8f1eb80ab51d1ccfa Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Tue, 5 Mar 2019 19:13:57 -0500 Subject: Add more cookie db tests --- .../kotlin/com/pitchedapps/frost/db/FbTabsDb.kt | 31 +++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'app/src/main/kotlin') diff --git a/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt b/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt index ff64f5eb..44e62938 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt @@ -33,6 +33,8 @@ import com.raizlabs.android.dbflow.kotlinextensions.fastSave import com.raizlabs.android.dbflow.kotlinextensions.from import com.raizlabs.android.dbflow.kotlinextensions.select import com.raizlabs.android.dbflow.structure.BaseModel +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.withContext /** * Created by Allan Wang on 2017-05-30. @@ -52,21 +54,26 @@ interface FbTabDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun _insertAll(items: List) - - @Transaction - suspend fun _save(items: List) { - _deleteAll() - _insertAll(items) - } } +/** + * Saving tabs operates by deleting all db items and saving the new list. + * Transactions can't be done with suspensions in room as switching threads during the process + * may result in a deadlock. + * In this case, there may be a chance that the 'transaction' completes partially, + * but we'll just fallback to the default anyways. + */ suspend fun FbTabDao.save(items: List) { - _save((items.takeIf { it.isNotEmpty() } ?: defaultTabs()).mapIndexed { index, fbItem -> - FbTabEntity( - index, - fbItem - ) - }) + withContext(NonCancellable) { + _deleteAll() + val entities = (items.takeIf { it.isNotEmpty() } ?: defaultTabs()).mapIndexed { index, fbItem -> + FbTabEntity( + index, + fbItem + ) + } + _insertAll(entities) + } } suspend fun FbTabDao.selectAll(): List = _selectAll().map { it.tab }.takeIf { it.isNotEmpty() } ?: defaultTabs() -- cgit v1.2.3