improve database cleanup/maintenance. Fixes #1461

This commit is contained in:
Phillip Thelen 2021-06-03 17:51:24 +02:00
parent 92e04d7431
commit 0bc8e3a85a
7 changed files with 2 additions and 60 deletions

View file

@ -18,6 +18,4 @@ interface TagRepository : BaseRepository {
fun createTags(tags: Collection<Tag>): Single<List<Tag>>
fun updateTags(tags: Collection<Tag>): Single<List<Tag>>
fun deleteTags(tagIds: Collection<String>): Single<List<Void>>
fun removeOldTags(onlineTags: List<Tag>, userID: String)
}

View file

@ -59,8 +59,4 @@ class TagRepositoryImpl(localRepository: TagLocalRepository, apiClient: ApiClien
.flatMap { this.deleteTag(it) }
.toList()
}
override fun removeOldTags(onlineTags: List<Tag>, userID: String) {
localRepository.removeOldTags(onlineTags, userID)
}
}

View file

@ -7,6 +7,5 @@ import io.reactivex.rxjava3.core.Flowable
interface TagLocalRepository : BaseLocalRepository {
fun getTags(userId: String): Flowable<out List<Tag>>
fun removeOldTags(onlineTags: List<Tag>, userID: String)
fun deleteTag(tagID: String)
}

View file

@ -248,28 +248,14 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
messagesToRemove.add(existingMessage)
}
}
val idsToRemove = messagesToRemove.map { it.id }
val userStylestoRemove = realm.where(UserStyles::class.java).`in`("id", idsToRemove.toTypedArray()).findAll()
val contributorToRemove = realm.where(ContributorInfo::class.java).`in`("userId", idsToRemove.toTypedArray()).findAll()
executeTransaction {
for (member in messagesToRemove) {
member.deleteFromRealm()
for (message in messagesToRemove) {
message.deleteFromRealm()
}
userStylestoRemove.deleteAllFromRealm()
contributorToRemove.deleteAllFromRealm()
}
}
}
private fun getMessage(id: String): Flowable<ChatMessage> {
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java).equalTo("id", id)
.findAll()
.asFlowable()
.filter { messages -> messages.isLoaded && messages.isValid && !messages.isEmpty() }
.map { messages -> messages.first() })
}
override fun doesGroupExist(id: String): Boolean {
val party = realm.where(Group::class.java).equalTo("id", id).findFirst()
return party != null && party.isValid

View file

@ -16,13 +16,4 @@ class RealmTagLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), T
override fun getTags(userId: String): Flowable<out List<Tag>> {
return RxJavaBridge.toV3Flowable(realm.where(Tag::class.java).equalTo("userId", userId).findAll().asFlowable())
}
override fun removeOldTags(onlineTags: List<Tag>, userID: String) {
val localTags = realm.where(Tag::class.java).equalTo("userId", userID).findAll().createSnapshot()
for (localTag in localTags) {
if (!onlineTags.contains(localTag)) {
localTag.deleteFromRealm()
}
}
}
}

View file

@ -48,11 +48,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
val allReminders = ArrayList<RemindersItem>()
sortedTasks.forEach {
if (it.userId.isBlank()) it.userId = ownerID
it.checklist?.let { it1 -> allChecklistItems.addAll(it1) }
it.reminders?.let { it1 -> allReminders.addAll(it1) }
}
removeOldReminders(allReminders)
removeOldChecklists(allChecklistItems)
executeTransaction { realm1 -> realm1.insertOrUpdate(sortedTasks) }
}
@ -123,26 +119,6 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
}
}
private fun removeOldChecklists(onlineItems: List<ChecklistItem>) {
val localItems = realm.where(ChecklistItem::class.java).findAll().createSnapshot()
val itemsToDelete = localItems.filterNot { onlineItems.contains(it) }
executeTransaction {
for (item in itemsToDelete) {
item.deleteFromRealm()
}
}
}
private fun removeOldReminders(onlineReminders: List<RemindersItem>) {
val localReminders = realm.where(RemindersItem::class.java).findAll().createSnapshot()
val itemsToDelete = localReminders.filterNot { onlineReminders.contains(it) }
executeTransaction {
for (item in itemsToDelete) {
item.deleteFromRealm()
}
}
}
override fun deleteTask(taskID: String) {
val task = realm.where(Task::class.java).equalTo("id", taskID).findFirstAsync()
executeTransaction {

View file

@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat
import androidx.core.widget.CompoundButtonCompat
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TagRepository
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.getThemeColor
import com.habitrpg.android.habitica.helpers.RxErrorHandler
@ -30,9 +29,6 @@ class TaskFilterDialog(context: Context, component: UserComponent?) : HabiticaAl
private var clearButton: Button
@Inject
lateinit var repository: TagRepository
private var taskTypeTitle: TextView
private var taskFilters: RadioGroup
private var allTaskFilter: RadioButton