From 0bc8e3a85afd6baa6e885531dc53cf74afc7fb98 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 3 Jun 2021 17:51:24 +0200 Subject: [PATCH] improve database cleanup/maintenance. Fixes #1461 --- .../android/habitica/data/TagRepository.kt | 2 -- .../data/implementation/TagRepositoryImpl.kt | 4 ---- .../habitica/data/local/TagLocalRepository.kt | 1 - .../RealmSocialLocalRepository.kt | 18 ++------------ .../implementation/RealmTagLocalRepository.kt | 9 ------- .../RealmTaskLocalRepository.kt | 24 ------------------- .../ui/views/tasks/TaskFilterDialog.kt | 4 ---- 7 files changed, 2 insertions(+), 60 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TagRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TagRepository.kt index 4727ddf56..74fbf2d76 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TagRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TagRepository.kt @@ -18,6 +18,4 @@ interface TagRepository : BaseRepository { fun createTags(tags: Collection): Single> fun updateTags(tags: Collection): Single> fun deleteTags(tagIds: Collection): Single> - - fun removeOldTags(onlineTags: List, userID: String) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt index 319b94da5..cff1c71de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt @@ -59,8 +59,4 @@ class TagRepositoryImpl(localRepository: TagLocalRepository, apiClient: ApiClien .flatMap { this.deleteTag(it) } .toList() } - - override fun removeOldTags(onlineTags: List, userID: String) { - localRepository.removeOldTags(onlineTags, userID) - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TagLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TagLocalRepository.kt index b30230296..6876b7db7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TagLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/TagLocalRepository.kt @@ -7,6 +7,5 @@ import io.reactivex.rxjava3.core.Flowable interface TagLocalRepository : BaseLocalRepository { fun getTags(userId: String): Flowable> - fun removeOldTags(onlineTags: List, userID: String) fun deleteTag(tagID: String) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt index 5df3cf6ae..ee63f2e38 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt @@ -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 { - 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 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.kt index 22030f01f..e0dc1654e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTagLocalRepository.kt @@ -16,13 +16,4 @@ class RealmTagLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), T override fun getTags(userId: String): Flowable> { return RxJavaBridge.toV3Flowable(realm.where(Tag::class.java).equalTo("userId", userId).findAll().asFlowable()) } - - override fun removeOldTags(onlineTags: List, userID: String) { - val localTags = realm.where(Tag::class.java).equalTo("userId", userID).findAll().createSnapshot() - for (localTag in localTags) { - if (!onlineTags.contains(localTag)) { - localTag.deleteFromRealm() - } - } - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt index def63ad24..31e1d99fa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt @@ -48,11 +48,7 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), val allReminders = ArrayList() 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) { - 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) { - 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 { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt index f88964961..f53c6e48c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt @@ -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