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.