@@ -36,13 +36,16 @@ import com.github.gotify.BuildConfig
3636import com.github.gotify.CoilInstance
3737import com.github.gotify.MissedMessageUtil
3838import com.github.gotify.R
39+ import com.github.gotify.Settings
3940import com.github.gotify.Utils
4041import com.github.gotify.Utils.launchCoroutine
4142import com.github.gotify.api.Api
4243import com.github.gotify.api.ApiException
4344import com.github.gotify.api.Callback
4445import com.github.gotify.api.ClientFactory
46+ import com.github.gotify.client.ApiClient
4547import com.github.gotify.client.api.ApplicationApi
48+ import com.github.gotify.client.api.AuthApi
4649import com.github.gotify.client.api.ClientApi
4750import com.github.gotify.client.api.MessageApi
4851import com.github.gotify.client.model.Application
@@ -605,17 +608,31 @@ internal class MessagesActivity :
605608
606609 private fun deleteClientAndNavigateToLogin () {
607610 val settings = viewModel.settings
608- val api = ClientFactory .clientToken(settings).createService( ClientApi :: class .java )
611+ val tokenClient = ClientFactory .clientToken(settings)
609612 stopService(Intent (this @MessagesActivity, WebSocketService ::class .java))
610613 try {
611- val clients = Api .execute(api.clients)
612- var currentClient: Client ? = null
613- for (client in clients) {
614- if (client.token == settings.token) {
615- currentClient = client
616- break
617- }
614+ Logger .info(" Logging out..." )
615+ val authApi = tokenClient.createService(AuthApi ::class .java)
616+ Api .execute(authApi.logout())
617+ } catch (e: ApiException ) {
618+ if (e.code == 404 ) {
619+ Logger .info(" Logout endpoint not available, falling back to client deletion" )
620+ deleteCurrentClient(tokenClient, settings)
621+ } else {
622+ Logger .error(e, " Could not logout" )
618623 }
624+ }
625+
626+ viewModel.settings.clear()
627+ startActivity(Intent (this @MessagesActivity, LoginActivity ::class .java))
628+ finish()
629+ }
630+
631+ private fun deleteCurrentClient (tokenClient : ApiClient , settings : Settings ) {
632+ val api = tokenClient.createService(ClientApi ::class .java)
633+ try {
634+ val clients = Api .execute(api.clients)
635+ val currentClient = clients.firstOrNull { it.token == settings.token }
619636 if (currentClient != null ) {
620637 Logger .info(" Delete client with id " + currentClient.id)
621638 Api .execute(api.deleteClient(currentClient.id))
@@ -625,10 +642,6 @@ internal class MessagesActivity :
625642 } catch (e: ApiException ) {
626643 Logger .error(e, " Could not delete client" )
627644 }
628-
629- viewModel.settings.clear()
630- startActivity(Intent (this @MessagesActivity, LoginActivity ::class .java))
631- finish()
632645 }
633646
634647 private fun updateMessagesAndStopLoading (messageWithImages : List <MessageWithImage >) {
0 commit comments