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 * 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 var type: Int = Type.LIST.uniqueIdentifier
set(value) { set(value) {
if (field == Type.LIST.uniqueIdentifier && value != Type.LIST.uniqueIdentifier) { if (field == Type.LIST.uniqueIdentifier && value != Type.LIST.uniqueIdentifier) {
this.removeListEntries() this.entriesToDelete.addAll(this.entries)
this.entries.clear()
} }
field = value field = value
@ -146,7 +147,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
} }
override fun isValidForDelete(realm: Realm): Boolean { 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() return sessions.isEmpty()
} }
@ -163,7 +164,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
} }
} }
override fun deleteDependencies() { override fun deleteDependencies(realm: Realm) {
if (isValid) { if (isValid) {
val entries = realm.where<CustomFieldEntry>().equalTo("customField.id", id).findAll() val entries = realm.where<CustomFieldEntry>().equalTo("customField.id", id).findAll()
entries.deleteAllFromRealm() entries.deleteAllFromRealm()
@ -257,26 +258,24 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
* Delete an entry * Delete an entry
*/ */
fun deleteEntry(entry: CustomFieldEntry) { fun deleteEntry(entry: CustomFieldEntry) {
entries.remove(entry)
entriesToDelete.add(entry) entriesToDelete.add(entry)
entries.remove(entry)
sortEntries() sortEntries()
updateRowRepresentation() updateRowRepresentation()
} }
private fun removeListEntries() { fun cleanupEntries() { // called when saving the custom field
this.entriesToDelete.addAll(entries) val realm = Realm.getDefaultInstance()
this.entries.clear()
if (realm != null) {
realm.executeTransaction { realm.executeTransaction {
this.entriesToDelete.forEach { this.entriesToDelete.forEach { // entries are out of realm
if (it.isManaged) { realm.where<CustomFieldEntry>().equalTo("id", it.id).findFirst()?.deleteFromRealm()
it.deleteFromRealm()
}
}
} }
} }
realm.close()
this.entriesToDelete.clear()
} }
/** /**

@ -110,9 +110,9 @@ open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable {
return R.string.cf_entry_delete_popup_message return R.string.cf_entry_delete_popup_message
} }
override fun deleteDependencies() { override fun deleteDependencies(realm: Realm) {
if (isValid) { if (isValid) {
val entries = realm.where<CustomFieldEntry>().equalTo("customField.id", id).findAll() val entries = realm.where<Session>().contains("customFieldEntries.id", id).findAll()
entries.deleteAllFromRealm() entries.deleteAllFromRealm()
} }
} }

@ -88,7 +88,7 @@ abstract class DeletableItemFragment : RealmFragment() {
deletedItem = getRealm().copyFromRealm(itemToDelete) deletedItem = getRealm().copyFromRealm(itemToDelete)
lastDeletedItemPosition = itemPosition lastDeletedItemPosition = itemPosition
getRealm().executeTransaction { getRealm().executeTransaction {
itemToDelete.deleteDependencies() itemToDelete.deleteDependencies(it)
itemToDelete.deleteFromRealm() itemToDelete.deleteFromRealm()
} }
itemHasBeenReInserted = false itemHasBeenReInserted = false

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