Fixes issue with custom field entry deletion

feature/top10
Laurent 7 years ago
parent 20b0cc5065
commit 43fd63f526
  1. 2
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  2. 25
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  3. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
  4. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt
  5. 11
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.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) {}
}

@ -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<Session>().contains("customFieldEntries.customField.id", id).findAll()
val sessions = realm.where<Session>().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<CustomFieldEntry>().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()
}
}
this.entriesToDelete.forEach { // entries are out of realm
realm.where<CustomFieldEntry>().equalTo("id", it.id).findFirst()?.deleteFromRealm()
}
}
realm.close()
this.entriesToDelete.clear()
}
/**

@ -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<CustomFieldEntry>().equalTo("customField.id", id).findAll()
val entries = realm.where<Session>().contains("customFieldEntries.id", id).findAll()
entries.deleteAllFromRealm()
}
}

@ -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

@ -187,13 +187,13 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
customField.deleteEntry(row)
rowRepresentableAdapter.notifyDataSetChanged()
})
return
}
} else {
customField.deleteEntry(row)
rowRepresentableAdapter.notifyDataSetChanged()
}
}
}
}
/**
* Init UI
@ -271,4 +271,11 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
}
override fun onDataSaved() {
super.onDataSaved()
this.customField.cleanupEntries()
}
}
Loading…
Cancel
Save