From 4d7aeff54a9b012376b9ad85cb4ac6e5f2b93597 Mon Sep 17 00:00:00 2001 From: Valere Date: Sat, 17 Apr 2021 09:03:41 +0200 Subject: [PATCH] Code review --- .../internal/query/QueryRoomOrderProcessor.kt | 37 ++++++++++++++++ .../query/QueryStringValueProcessor.kt | 16 +++---- .../room/summary/RoomSummaryDataSource.kt | 42 ++----------------- .../spaces/manage/SpaceAddRoomFragment.kt | 8 +--- .../spaces/manage/SpaceAddRoomsViewEvents.kt | 2 +- .../spaces/manage/SpaceAddRoomsViewModel.kt | 8 +++- 6 files changed, 57 insertions(+), 56 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryRoomOrderProcessor.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryRoomOrderProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryRoomOrderProcessor.kt new file mode 100644 index 0000000000..7a06c2129c --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryRoomOrderProcessor.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2021 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.query + +import io.realm.RealmQuery +import io.realm.Sort +import org.matrix.android.sdk.api.session.room.RoomSortOrder +import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity +import org.matrix.android.sdk.internal.database.model.RoomSummaryEntityFields + +internal fun RealmQuery.process(sortOrder: RoomSortOrder): RealmQuery { + when (sortOrder) { + RoomSortOrder.NAME -> { + sort(RoomSummaryEntityFields.DISPLAY_NAME, Sort.ASCENDING) + } + RoomSortOrder.ACTIVITY -> { + sort(RoomSummaryEntityFields.LAST_ACTIVITY_TIME, Sort.DESCENDING) + } + RoomSortOrder.NONE -> { + } + } + return this +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt index 899024458a..c49efaaeef 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt @@ -16,21 +16,21 @@ package org.matrix.android.sdk.internal.query -import org.matrix.android.sdk.api.query.QueryStringValue import io.realm.Case import io.realm.RealmObject import io.realm.RealmQuery +import org.matrix.android.sdk.api.query.QueryStringValue import timber.log.Timber fun RealmQuery.process(field: String, queryStringValue: QueryStringValue): RealmQuery { when (queryStringValue) { is QueryStringValue.NoCondition -> Timber.v("No condition to process") - is QueryStringValue.IsNotNull -> isNotNull(field) - is QueryStringValue.IsNull -> isNull(field) - is QueryStringValue.IsEmpty -> isEmpty(field) - is QueryStringValue.IsNotEmpty -> isNotEmpty(field) - is QueryStringValue.Equals -> equalTo(field, queryStringValue.string, queryStringValue.case.toRealmCase()) - is QueryStringValue.Contains -> contains(field, queryStringValue.string, queryStringValue.case.toRealmCase()) + is QueryStringValue.IsNotNull -> isNotNull(field) + is QueryStringValue.IsNull -> isNull(field) + is QueryStringValue.IsEmpty -> isEmpty(field) + is QueryStringValue.IsNotEmpty -> isNotEmpty(field) + is QueryStringValue.Equals -> equalTo(field, queryStringValue.string, queryStringValue.case.toRealmCase()) + is QueryStringValue.Contains -> contains(field, queryStringValue.string, queryStringValue.case.toRealmCase()) } return this } @@ -38,6 +38,6 @@ fun RealmQuery.process(field: String, queryStringValue: Que private fun QueryStringValue.Case.toRealmCase(): Case { return when (this) { QueryStringValue.Case.INSENSITIVE -> Case.INSENSITIVE - QueryStringValue.Case.SENSITIVE -> Case.SENSITIVE + QueryStringValue.Case.SENSITIVE -> Case.SENSITIVE } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index 06f84066be..8b1fd2f404 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -166,19 +166,7 @@ internal class RoomSummaryDataSource @Inject constructor(@SessionDatabase privat pagedListConfig: PagedList.Config, sortOrder: RoomSortOrder): LiveData> { val realmDataSourceFactory = monarchy.createDataSourceFactory { realm -> - roomSummariesQuery(realm, queryParams) - .apply { - when (sortOrder) { - RoomSortOrder.NAME -> { - sort(RoomSummaryEntityFields.DISPLAY_NAME, Sort.ASCENDING) - } - RoomSortOrder.ACTIVITY -> { - sort(RoomSummaryEntityFields.LAST_ACTIVITY_TIME, Sort.DESCENDING) - } - RoomSortOrder.NONE -> { - } - } - } + roomSummariesQuery(realm, queryParams).process(sortOrder) } val dataSourceFactory = realmDataSourceFactory.map { roomSummaryMapper.map(it) @@ -193,19 +181,7 @@ internal class RoomSummaryDataSource @Inject constructor(@SessionDatabase privat pagedListConfig: PagedList.Config, sortOrder: RoomSortOrder): UpdatableLivePageResult { val realmDataSourceFactory = monarchy.createDataSourceFactory { realm -> - roomSummariesQuery(realm, queryParams) - .apply { - when (sortOrder) { - RoomSortOrder.NAME -> { - sort(RoomSummaryEntityFields.DISPLAY_NAME, Sort.ASCENDING) - } - RoomSortOrder.ACTIVITY -> { - sort(RoomSummaryEntityFields.LAST_ACTIVITY_TIME, Sort.DESCENDING) - } - RoomSortOrder.NONE -> { - } - } - } + roomSummariesQuery(realm, queryParams).process(sortOrder) } val dataSourceFactory = realmDataSourceFactory.map { roomSummaryMapper.map(it) @@ -221,19 +197,7 @@ internal class RoomSummaryDataSource @Inject constructor(@SessionDatabase privat override fun updateQuery(builder: (RoomSummaryQueryParams) -> RoomSummaryQueryParams) { realmDataSourceFactory.updateQuery { - roomSummariesQuery(it, builder.invoke(queryParams)) - .apply { - when (sortOrder) { - RoomSortOrder.NAME -> { - sort(RoomSummaryEntityFields.DISPLAY_NAME, Sort.ASCENDING) - } - RoomSortOrder.ACTIVITY -> { - sort(RoomSummaryEntityFields.LAST_ACTIVITY_TIME, Sort.DESCENDING) - } - RoomSortOrder.NONE -> { - } - } - } + roomSummariesQuery(it, builder.invoke(queryParams)).process(sortOrder) } } } diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt index ee14aec120..dc55373b36 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt @@ -26,7 +26,6 @@ import androidx.appcompat.app.AlertDialog import com.airbnb.mvrx.Loading import com.airbnb.mvrx.activityViewModel import com.airbnb.mvrx.fragmentViewModel -import com.airbnb.mvrx.withState import com.jakewharton.rxbinding3.appcompat.queryTextChanges import im.vector.app.R import im.vector.app.core.extensions.cleanup @@ -117,7 +116,8 @@ class SpaceAddRoomFragment @Inject constructor( .setNegativeButton(R.string.cancel, null) .show() } - SpaceAddRoomsViewEvents.SaveFailed -> { + is SpaceAddRoomsViewEvents.SaveFailed -> { + showErrorInSnackbar(it.reason) invalidateOptionsMenu() } SpaceAddRoomsViewEvents.SavedDone -> { @@ -127,10 +127,6 @@ class SpaceAddRoomFragment @Inject constructor( } } - override fun invalidate() = withState(viewModel) { - super.invalidate() - } - override fun onPrepareOptionsMenu(menu: Menu) { super.onPrepareOptionsMenu(menu) menu.findItem(R.id.spaceAddRoomSaveItem).isVisible = saveNeeded diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewEvents.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewEvents.kt index f0bc0cecc2..cb5571b107 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewEvents.kt @@ -21,5 +21,5 @@ import im.vector.app.core.platform.VectorViewEvents sealed class SpaceAddRoomsViewEvents : VectorViewEvents { object WarnUnsavedChanged : SpaceAddRoomsViewEvents() object SavedDone : SpaceAddRoomsViewEvents() - object SaveFailed : SpaceAddRoomsViewEvents() + data class SaveFailed(val reason: Throwable): SpaceAddRoomsViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt index e90fc3754c..692f4343ba 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt @@ -42,7 +42,11 @@ import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams -class AddRoomError(val errorList: Map) : Throwable() +class AddRoomError(val errorList: Map) : Throwable() { + override fun getLocalizedMessage(): String? { + return errorList.map { it.value.localizedMessage }.joinToString(",") + } +} class SpaceAddRoomsViewModel @AssistedInject constructor( @Assisted val initialState: SpaceAddRoomsState, @@ -186,7 +190,7 @@ class SpaceAddRoomsViewModel @AssistedInject constructor( isSaving = Fail(AddRoomError(errors)) ) } - _viewEvents.post(SpaceAddRoomsViewEvents.SaveFailed) + _viewEvents.post(SpaceAddRoomsViewEvents.SaveFailed(AddRoomError(errors))) } } }