mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-17 04:20:00 +03:00
Avoid adding twice the same server
This commit is contained in:
parent
96720af52f
commit
e925d29037
4 changed files with 24 additions and 3 deletions
|
@ -94,6 +94,10 @@ fun <T : Fragment> AppCompatActivity.addFragmentToBackstack(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun AppCompatActivity.popBackstack() {
|
||||||
|
supportFragmentManager.popBackStack()
|
||||||
|
}
|
||||||
|
|
||||||
fun AppCompatActivity.resetBackstack() {
|
fun AppCompatActivity.resetBackstack() {
|
||||||
repeat(supportFragmentManager.backStackEntryCount) {
|
repeat(supportFragmentManager.backStackEntryCount) {
|
||||||
supportFragmentManager.popBackStack()
|
supportFragmentManager.popBackStack()
|
||||||
|
|
|
@ -25,6 +25,7 @@ import im.vector.app.R
|
||||||
import im.vector.app.core.di.ScreenComponent
|
import im.vector.app.core.di.ScreenComponent
|
||||||
import im.vector.app.core.extensions.addFragment
|
import im.vector.app.core.extensions.addFragment
|
||||||
import im.vector.app.core.extensions.addFragmentToBackstack
|
import im.vector.app.core.extensions.addFragmentToBackstack
|
||||||
|
import im.vector.app.core.extensions.popBackstack
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.databinding.ActivitySimpleBinding
|
import im.vector.app.databinding.ActivitySimpleBinding
|
||||||
import im.vector.app.features.roomdirectory.createroom.CreateRoomFragment
|
import im.vector.app.features.roomdirectory.createroom.CreateRoomFragment
|
||||||
|
@ -58,7 +59,7 @@ class RoomDirectoryActivity : VectorBaseActivity<ActivitySimpleBinding>() {
|
||||||
.observe()
|
.observe()
|
||||||
.subscribe { sharedAction ->
|
.subscribe { sharedAction ->
|
||||||
when (sharedAction) {
|
when (sharedAction) {
|
||||||
is RoomDirectorySharedAction.Back -> onBackPressed()
|
is RoomDirectorySharedAction.Back -> popBackstack()
|
||||||
is RoomDirectorySharedAction.CreateRoom -> {
|
is RoomDirectorySharedAction.CreateRoom -> {
|
||||||
// Transmit the filter to the CreateRoomFragment
|
// Transmit the filter to the CreateRoomFragment
|
||||||
withState(roomDirectoryViewModel) {
|
withState(roomDirectoryViewModel) {
|
||||||
|
|
|
@ -27,9 +27,11 @@ import com.airbnb.mvrx.ViewModelContext
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
|
import im.vector.app.R
|
||||||
import im.vector.app.core.extensions.exhaustive
|
import im.vector.app.core.extensions.exhaustive
|
||||||
import im.vector.app.core.platform.EmptyViewEvents
|
import im.vector.app.core.platform.EmptyViewEvents
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.features.ui.UiStateRepository
|
import im.vector.app.features.ui.UiStateRepository
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
|
@ -39,6 +41,7 @@ class RoomDirectoryPickerViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: RoomDirectoryPickerViewState,
|
@Assisted initialState: RoomDirectoryPickerViewState,
|
||||||
private val session: Session,
|
private val session: Session,
|
||||||
private val uiStateRepository: UiStateRepository,
|
private val uiStateRepository: UiStateRepository,
|
||||||
|
private val stringProvider: StringProvider,
|
||||||
private val roomDirectoryListCreator: RoomDirectoryListCreator
|
private val roomDirectoryListCreator: RoomDirectoryListCreator
|
||||||
) : VectorViewModel<RoomDirectoryPickerViewState, RoomDirectoryPickerAction, EmptyViewEvents>(initialState) {
|
) : VectorViewModel<RoomDirectoryPickerViewState, RoomDirectoryPickerAction, EmptyViewEvents>(initialState) {
|
||||||
|
|
||||||
|
@ -141,17 +144,29 @@ class RoomDirectoryPickerViewModel @AssistedInject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleSubmit() = withState { state ->
|
private fun handleSubmit() = withState { state ->
|
||||||
|
// First avoid duplicate
|
||||||
|
val enteredServer = state.enteredServer
|
||||||
|
|
||||||
|
val existingServerList = state.directories.map { it.serverName }
|
||||||
|
|
||||||
|
if (enteredServer in existingServerList) {
|
||||||
|
setState {
|
||||||
|
copy(addServerAsync = Fail(Throwable(stringProvider.getString(R.string.directory_add_a_new_server_error_already_added))))
|
||||||
|
}
|
||||||
|
return@withState
|
||||||
|
}
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
setState {
|
setState {
|
||||||
copy(addServerAsync = Loading())
|
copy(addServerAsync = Loading())
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
session.getPublicRooms(
|
session.getPublicRooms(
|
||||||
server = state.enteredServer,
|
server = enteredServer,
|
||||||
publicRoomsParams = PublicRoomsParams(limit = 1)
|
publicRoomsParams = PublicRoomsParams(limit = 1)
|
||||||
)
|
)
|
||||||
// Success, let add the server to our local repository, and update the state
|
// Success, let add the server to our local repository, and update the state
|
||||||
val newSet = uiStateRepository.getCustomRoomDirectoryHomeservers(session.sessionId) + state.enteredServer
|
val newSet = uiStateRepository.getCustomRoomDirectoryHomeservers(session.sessionId) + enteredServer
|
||||||
uiStateRepository.setCustomRoomDirectoryHomeservers(session.sessionId, newSet)
|
uiStateRepository.setCustomRoomDirectoryHomeservers(session.sessionId, newSet)
|
||||||
setState {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
|
|
|
@ -1591,6 +1591,7 @@
|
||||||
<string name="directory_add_a_new_server">Add a new server</string>
|
<string name="directory_add_a_new_server">Add a new server</string>
|
||||||
<string name="directory_add_a_new_server_prompt">Enter the name of a new server you want to explore.</string>
|
<string name="directory_add_a_new_server_prompt">Enter the name of a new server you want to explore.</string>
|
||||||
<string name="directory_add_a_new_server_error">"Can't find this server or its room list"</string>
|
<string name="directory_add_a_new_server_error">"Can't find this server or its room list"</string>
|
||||||
|
<string name="directory_add_a_new_server_error_already_added">This server is already present in the list</string>
|
||||||
|
|
||||||
<!-- Lock screen-->
|
<!-- Lock screen-->
|
||||||
<string name="lock_screen_hint">Type here…</string>
|
<string name="lock_screen_hint">Type here…</string>
|
||||||
|
|
Loading…
Add table
Reference in a new issue