aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/db
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-03-07 19:36:09 -0500
committerAllan Wang <me@allanwang.ca>2019-03-07 19:36:09 -0500
commit3f5d2cf2a55d28528c88e118f09a91fd6c59ac43 (patch)
tree74d0e876c5689f11d9134d5ebd25b03860b1aeb0 /app/src/main/kotlin/com/pitchedapps/frost/db
parentcac563f6c6a2656c74527bfa2c8b5780765baf69 (diff)
downloadfrost-3f5d2cf2a55d28528c88e118f09a91fd6c59ac43.tar.gz
frost-3f5d2cf2a55d28528c88e118f09a91fd6c59ac43.tar.bz2
frost-3f5d2cf2a55d28528c88e118f09a91fd6c59ac43.zip
Replace tab dao with generic dao
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/db')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt7
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt63
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/db/GenericDb.kt29
3 files changed, 17 insertions, 82 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt b/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt
index 5fc986e3..0c009634 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt
@@ -27,11 +27,10 @@ abstract class FrostPrivateDatabase : RoomDatabase(), FrostPrivateDao {
}
interface FrostPublicDao {
- fun tabDao(): FbTabDao
+ fun genericDao(): GenericDao
}
-@Database(entities = [FbTabEntity::class], version = 1, exportSchema = true)
-@TypeConverters(FbItemConverter::class)
+@Database(entities = [GenericEntity::class], version = 1, exportSchema = true)
abstract class FrostPublicDatabase : RoomDatabase(), FrostPublicDao {
companion object {
const val DATABASE_NAME = "frost-db"
@@ -71,9 +70,9 @@ class FrostDatabase(private val privateDb: FrostPrivateDatabase, private val pub
fun module(context: Context) = module {
single { create(context) }
single { get<FrostDatabase>().cookieDao() }
- single { get<FrostDatabase>().tabDao() }
single { get<FrostDatabase>().cacheDao() }
single { get<FrostDatabase>().notifDao() }
+ single { get<FrostDatabase>().genericDao() }
}
/**
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 f4e74509..c63be794 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt
@@ -16,79 +16,16 @@
*/
package com.pitchedapps.frost.db
-import androidx.room.Dao
-import androidx.room.Entity
-import androidx.room.Insert
-import androidx.room.OnConflictStrategy
-import androidx.room.Query
-import androidx.room.Transaction
import com.pitchedapps.frost.facebook.FbItem
-import com.pitchedapps.frost.facebook.defaultTabs
import com.raizlabs.android.dbflow.annotation.Database
import com.raizlabs.android.dbflow.annotation.PrimaryKey
import com.raizlabs.android.dbflow.annotation.Table
import com.raizlabs.android.dbflow.structure.BaseModel
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.withContext
/**
* Created by Allan Wang on 2017-05-30.
*/
-@Entity(tableName = "tabs")
-data class FbTabEntity(@androidx.room.PrimaryKey val position: Int, val tab: FbItem)
-
-@Dao
-interface FbTabDao {
-
- @Query("SELECT * FROM tabs ORDER BY position ASC")
- fun _selectAll(): List<FbTabEntity>
-
- @Query("DELETE FROM tabs")
- fun _deleteAll()
-
- @Insert(onConflict = OnConflictStrategy.REPLACE)
- fun _insertAll(items: List<FbTabEntity>)
-
- @Transaction
- fun _save(items: List<FbTabEntity>) {
- _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.
- * That's why we disallow thread switching within the transaction, but wrap the entire thing in a coroutine
- */
-suspend fun FbTabDao.save(items: List<FbItem>) {
- withContext(Dispatchers.IO) {
- val entities = (items.takeIf { it.isNotEmpty() } ?: defaultTabs()).mapIndexed { index, fbItem ->
- FbTabEntity(
- index,
- fbItem
- )
- }
- _save(entities)
- }
-}
-
-suspend fun FbTabDao.selectAll(): List<FbItem> = withContext(Dispatchers.IO) {
- _selectAll().map { it.tab }.takeIf { it.isNotEmpty() } ?: defaultTabs()
-}
-
-object FbItemConverter {
- @androidx.room.TypeConverter
- @JvmStatic
- fun fromItem(item: FbItem): String = item.name
-
- @androidx.room.TypeConverter
- @JvmStatic
- fun toItem(value: String): FbItem = FbItem.valueOf(value)
-}
-
const val TAB_COUNT = 4
@Database(version = FbTabsDb.VERSION)
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/db/GenericDb.kt b/app/src/main/kotlin/com/pitchedapps/frost/db/GenericDb.kt
index c191b673..c1f05092 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/db/GenericDb.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/db/GenericDb.kt
@@ -24,7 +24,6 @@ import androidx.room.PrimaryKey
import androidx.room.Query
import com.pitchedapps.frost.facebook.FbItem
import com.pitchedapps.frost.facebook.defaultTabs
-import com.pitchedapps.frost.utils.L
/**
* Created by Allan Wang on 2017-05-30.
@@ -52,21 +51,21 @@ interface GenericDao {
@Query("DELETE FROM frost_generic WHERE type = :type")
suspend fun delete(type: String)
- suspend fun saveTabs(tabs: List<FbItem>) {
- val content = tabs.joinToString(",") { it.name }
- save(GenericEntity(TYPE_TABS, content))
- }
-
- suspend fun getTabs(): List<FbItem> {
- val allTabs = FbItem.values.map { it.name to it }.toMap()
- return select(TYPE_TABS)
- ?.split(",")
- ?.mapNotNull { allTabs[it] }
- ?.takeIf { it.isNotEmpty() }
- ?: defaultTabs()
- }
-
companion object {
const val TYPE_TABS = "generic_tabs"
}
+}
+
+suspend fun GenericDao.saveTabs(tabs: List<FbItem>) {
+ val content = tabs.joinToString(",") { it.name }
+ save(GenericEntity(GenericDao.TYPE_TABS, content))
+}
+
+suspend fun GenericDao.getTabs(): List<FbItem> {
+ val allTabs = FbItem.values.map { it.name to it }.toMap()
+ return select(GenericDao.TYPE_TABS)
+ ?.split(",")
+ ?.mapNotNull { allTabs[it] }
+ ?.takeIf { it.isNotEmpty() }
+ ?: defaultTabs()
} \ No newline at end of file