From 43fd63f5264f6d4a1e1b69a04be30e7cc9f84d1e Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 5 Jun 2019 16:03:38 +0200 Subject: [PATCH] Fixes issue with custom field entry deletion --- .../android/model/interfaces/Manageable.kt | 2 +- .../android/model/realm/CustomField.kt | 27 +++++++++---------- .../android/model/realm/CustomFieldEntry.kt | 4 +-- .../components/DeletableItemFragment.kt | 2 +- .../fragment/data/CustomFieldDataFragment.kt | 13 ++++++--- 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt index 74097255..05624c3a 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt @@ -125,6 +125,6 @@ interface Deletable : Identifiable { /** * A method to override if we need to delete linked objects or other stuff */ - fun deleteDependencies() {} + fun deleteDependencies(realm: Realm) {} } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt index 9acf817e..694ef77d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt @@ -59,7 +59,8 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa var type: Int = Type.LIST.uniqueIdentifier set(value) { if (field == Type.LIST.uniqueIdentifier && value != Type.LIST.uniqueIdentifier) { - this.removeListEntries() + this.entriesToDelete.addAll(this.entries) + this.entries.clear() } field = value @@ -146,7 +147,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa } override fun isValidForDelete(realm: Realm): Boolean { - val sessions = realm.where().contains("customFieldEntries.customField.id", id).findAll() + val sessions = realm.where().contains("customFieldEntries.customFields.id", id).findAll() return sessions.isEmpty() } @@ -163,7 +164,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa } } - override fun deleteDependencies() { + override fun deleteDependencies(realm: Realm) { if (isValid) { val entries = realm.where().equalTo("customField.id", id).findAll() entries.deleteAllFromRealm() @@ -257,26 +258,24 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa * Delete an entry */ fun deleteEntry(entry: CustomFieldEntry) { - entries.remove(entry) entriesToDelete.add(entry) + entries.remove(entry) + sortEntries() updateRowRepresentation() } - private fun removeListEntries() { + fun cleanupEntries() { // called when saving the custom field - this.entriesToDelete.addAll(entries) - this.entries.clear() + val realm = Realm.getDefaultInstance() - if (realm != null) { - realm.executeTransaction { - this.entriesToDelete.forEach { - if (it.isManaged) { - it.deleteFromRealm() - } - } + realm.executeTransaction { + this.entriesToDelete.forEach { // entries are out of realm + realm.where().equalTo("id", it.id).findFirst()?.deleteFromRealm() } } + realm.close() + this.entriesToDelete.clear() } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt index f6703266..f4716084 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt @@ -110,9 +110,9 @@ open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable { return R.string.cf_entry_delete_popup_message } - override fun deleteDependencies() { + override fun deleteDependencies(realm: Realm) { if (isValid) { - val entries = realm.where().equalTo("customField.id", id).findAll() + val entries = realm.where().contains("customFieldEntries.id", id).findAll() entries.deleteAllFromRealm() } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt index 232a7d46..71cea8c1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt @@ -88,7 +88,7 @@ abstract class DeletableItemFragment : RealmFragment() { deletedItem = getRealm().copyFromRealm(itemToDelete) lastDeletedItemPosition = itemPosition getRealm().executeTransaction { - itemToDelete.deleteDependencies() + itemToDelete.deleteDependencies(it) itemToDelete.deleteFromRealm() } itemHasBeenReInserted = false diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt index 768b8088..53fae129 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt @@ -187,10 +187,10 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa customField.deleteEntry(row) rowRepresentableAdapter.notifyDataSetChanged() }) - return + } else { + customField.deleteEntry(row) + rowRepresentableAdapter.notifyDataSetChanged() } - customField.deleteEntry(row) - rowRepresentableAdapter.notifyDataSetChanged() } } } @@ -271,4 +271,11 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa } } + override fun onDataSaved() { + super.onDataSaved() + + this.customField.cleanupEntries() + + } + } \ No newline at end of file