mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-23 14:17:15 +00:00
improve database cleanup/maintenance. Fixes #1461
This commit is contained in:
parent
92e04d7431
commit
0bc8e3a85a
7 changed files with 2 additions and 60 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue