Merge pull request #6392 from vector-im/feature/bma/safe_clearWith
Ensure clearWith lambda is deleting all the list item
This commit is contained in:
commit
90e851a4bc
|
@ -0,0 +1 @@
|
|||
Ensure `RealmList<T>.clearWith()` extension is correctly used.
|
|
@ -20,6 +20,7 @@ import io.realm.RealmList
|
|||
import io.realm.RealmObject
|
||||
import io.realm.RealmObjectSchema
|
||||
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
|
||||
import org.matrix.android.sdk.internal.util.fatalError
|
||||
|
||||
internal fun RealmObject.assertIsManaged() {
|
||||
check(isManaged) { "${javaClass.simpleName} entity should be managed to use this function" }
|
||||
|
@ -27,10 +28,19 @@ internal fun RealmObject.assertIsManaged() {
|
|||
|
||||
/**
|
||||
* Clear a RealmList by deleting all its items calling the provided lambda.
|
||||
* The lambda is supposed to delete the item, which means that after this operation, the list will be empty.
|
||||
*/
|
||||
internal fun <T> RealmList<T>.clearWith(delete: (T) -> Unit) {
|
||||
while (!isEmpty()) {
|
||||
first()?.let { delete.invoke(it) }
|
||||
map { item ->
|
||||
// Create a lambda for all items of the list
|
||||
{ delete(item) }
|
||||
}.forEach { lambda ->
|
||||
// Then invoke all the lambda
|
||||
lambda.invoke()
|
||||
}
|
||||
|
||||
if (isNotEmpty()) {
|
||||
fatalError("`clearWith` MUST delete all elements of the RealmList")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (c) 2022 The Matrix.org Foundation C.I.C.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.matrix.android.sdk.internal.util
|
||||
|
||||
import org.matrix.android.sdk.BuildConfig
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
* Throws in debug, only log in production.
|
||||
* As this method does not always throw, next statement should be a return.
|
||||
*/
|
||||
internal fun fatalError(message: String) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
error(message)
|
||||
} else {
|
||||
Timber.e(message)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue