diff --git a/app/src/main/java/chat/stoat/activities/InviteActivity.kt b/app/src/main/java/chat/stoat/activities/InviteActivity.kt index 45926bc7..bc61c0ad 100644 --- a/app/src/main/java/chat/stoat/activities/InviteActivity.kt +++ b/app/src/main/java/chat/stoat/activities/InviteActivity.kt @@ -48,16 +48,18 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.compose.viewModel import chat.stoat.R import chat.stoat.api.STOAT_FILES +import chat.stoat.api.StoatAPI import chat.stoat.api.StoatAPIError import chat.stoat.api.routes.invites.fetchInviteByCode import chat.stoat.api.routes.invites.joinInviteByCode +import chat.stoat.api.settings.LoadedSettings +import chat.stoat.api.settings.SyncedSettings +import chat.stoat.callbacks.ActionChannel +import chat.stoat.composables.generic.IconPlaceholder +import chat.stoat.composables.generic.RemoteImage import chat.stoat.core.model.schemas.Invite import chat.stoat.core.model.schemas.InviteJoined import chat.stoat.core.model.util.RsResult -import chat.stoat.api.settings.LoadedSettings -import chat.stoat.api.settings.SyncedSettings -import chat.stoat.composables.generic.IconPlaceholder -import chat.stoat.composables.generic.RemoteImage import chat.stoat.ui.theme.StoatTheme import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage @@ -120,6 +122,12 @@ class InviteViewModel : ViewModel() { setJoinResult(result) } } + + fun navigateToServer(channelId: String) { + viewModelScope.launch { + ActionChannel.send(chat.stoat.callbacks.Action.SwitchChannel(channelId)) + } + } } @OptIn(ExperimentalGlideComposeApi::class) @@ -238,7 +246,12 @@ fun InviteScreen( Spacer(modifier = Modifier.height(8.dp)) Text( - text = stringResource(id = R.string.invite_message), + text = stringResource( + id = if (StoatAPI.serverCache.containsKey( + invite?.serverId + ) + ) R.string.invite_already_member else R.string.invite_message + ), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth() ) @@ -248,12 +261,25 @@ fun InviteScreen( Row { Button( onClick = { - viewModel.joinInvite(inviteCode) + if (StoatAPI.serverCache.containsKey(invite?.serverId)) { + invite?.channelId?.let { + viewModel.navigateToServer(it) + } + onFinish() + } else { + viewModel.joinInvite(inviteCode) + } }, modifier = Modifier .testTag("accept_invite") ) { - Text(text = stringResource(id = R.string.invite_join)) + Text( + text = stringResource( + id = + if (StoatAPI.serverCache.containsKey(invite?.serverId)) R.string.invite_open_server + else R.string.invite_join + ) + ) } Spacer(modifier = Modifier.width(8.dp)) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ecb3298b..df3bc88f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -557,6 +557,7 @@ You\'ve been invited to join this server. Would you like to join? Join Cancel + Open You are already a member of this server. There was an error No invite code was specified.