fix caching of instance defaults and emojis (#2643)
* fix caching of instance defaults and emojis * use correct OnConflictStrategy * rename dao methods
This commit is contained in:
parent
1c11671f3e
commit
1fed84f948
2 changed files with 28 additions and 6 deletions
|
@ -45,7 +45,7 @@ class InstanceInfoRepository @Inject constructor(
|
|||
*/
|
||||
suspend fun getEmojis(): List<Emoji> = withContext(Dispatchers.IO) {
|
||||
api.getCustomEmojis()
|
||||
.onSuccess { emojiList -> dao.insertOrReplace(EmojisEntity(instanceName, emojiList)) }
|
||||
.onSuccess { emojiList -> dao.upsert(EmojisEntity(instanceName, emojiList)) }
|
||||
.getOrElse { throwable ->
|
||||
Log.w(TAG, "failed to load custom emojis, falling back to cache", throwable)
|
||||
dao.getEmojiInfo(instanceName)?.emojiList.orEmpty()
|
||||
|
@ -78,7 +78,7 @@ class InstanceInfoRepository @Inject constructor(
|
|||
maxFieldNameLength = instance.pleroma?.metadata?.fieldLimits?.nameLength,
|
||||
maxFieldValueLength = instance.pleroma?.metadata?.fieldLimits?.valueLength
|
||||
)
|
||||
dao.insertOrReplace(instanceEntity)
|
||||
dao.upsert(instanceEntity)
|
||||
instanceEntity
|
||||
},
|
||||
{ throwable ->
|
||||
|
|
|
@ -20,15 +20,37 @@ import androidx.room.Insert
|
|||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.RewriteQueriesToDropUnusedColumns
|
||||
import androidx.room.Transaction
|
||||
import androidx.room.Update
|
||||
|
||||
@Dao
|
||||
interface InstanceDao {
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE, entity = InstanceEntity::class)
|
||||
suspend fun insertOrReplace(instance: InstanceInfoEntity)
|
||||
@Insert(onConflict = OnConflictStrategy.IGNORE, entity = InstanceEntity::class)
|
||||
suspend fun insertOrIgnore(instance: InstanceInfoEntity): Long
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE, entity = InstanceEntity::class)
|
||||
suspend fun insertOrReplace(emojis: EmojisEntity)
|
||||
@Update(onConflict = OnConflictStrategy.IGNORE, entity = InstanceEntity::class)
|
||||
suspend fun updateOrIgnore(instance: InstanceInfoEntity)
|
||||
|
||||
@Transaction
|
||||
suspend fun upsert(instance: InstanceInfoEntity) {
|
||||
if (insertOrIgnore(instance) == -1L) {
|
||||
updateOrIgnore(instance)
|
||||
}
|
||||
}
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.IGNORE, entity = InstanceEntity::class)
|
||||
suspend fun insertOrIgnore(emojis: EmojisEntity): Long
|
||||
|
||||
@Update(onConflict = OnConflictStrategy.IGNORE, entity = InstanceEntity::class)
|
||||
suspend fun updateOrIgnore(emojis: EmojisEntity)
|
||||
|
||||
@Transaction
|
||||
suspend fun upsert(emojis: EmojisEntity) {
|
||||
if (insertOrIgnore(emojis) == -1L) {
|
||||
updateOrIgnore(emojis)
|
||||
}
|
||||
}
|
||||
|
||||
@RewriteQueriesToDropUnusedColumns
|
||||
@Query("SELECT * FROM InstanceEntity WHERE instance = :instance LIMIT 1")
|
||||
|
|
Loading…
Reference in a new issue