From 24ca0d6def524221f16f814c9911be8f821baf86 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 4 Dec 2024 15:51:29 +0100 Subject: [PATCH] Modify ViewModel and Repository Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/api/NcApiCoroutines.kt | 9 +++++++ .../data/network/ChatNetworkDataSource.kt | 3 +++ .../chat/data/network/RetrofitChatNetwork.kt | 10 +++++++- .../talk/chat/viewmodels/ChatViewModel.kt | 25 +++++++++++++++++++ .../talk/dagger/modules/RepositoryModule.kt | 4 +-- .../java/com/nextcloud/talk/utils/ApiUtils.kt | 4 +++ 6 files changed, 52 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt b/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt index 3bbdf0f90..5505998cf 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt +++ b/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt @@ -13,6 +13,7 @@ import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.participants.AddParticipantOverall import com.nextcloud.talk.models.json.participants.TalkBan import com.nextcloud.talk.models.json.participants.TalkBanOverall +import com.nextcloud.talk.models.json.userAbsence.UserAbsenceOverall import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.Body @@ -197,4 +198,12 @@ interface NcApiCoroutines { @Url url: String, @Field("seconds") seconds: Int ): GenericOverall + + @GET + suspend fun getOutOfOfficeStatusForUser( + @Header("Authorization") authorization:String, + @Url url:String + ): UserAbsenceOverall + + } diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt index 3b52c0a41..8769753d6 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt @@ -14,6 +14,7 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.conversations.RoomsOverall import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.reminder.Reminder +import com.nextcloud.talk.models.json.userAbsence.UserAbsenceOverall import io.reactivex.Observable import retrofit2.Response @@ -63,4 +64,6 @@ interface ChatNetworkDataSource { fun createRoom(credentials: String, url: String, map: Map): Observable fun setChatReadMarker(credentials: String, url: String, previousMessageId: Int): Observable fun editChatMessage(credentials: String, url: String, text: String): Observable + suspend fun getOutOfOfficeStatusForUser (credentials:String,baseUrl:String, userId:String): UserAbsenceOverall + } diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt index 080b0706f..590c3ba50 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt @@ -7,6 +7,7 @@ package com.nextcloud.talk.chat.data.network import com.nextcloud.talk.api.NcApi +import com.nextcloud.talk.api.NcApiCoroutines import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.models.domain.ConversationModel import com.nextcloud.talk.models.json.capabilities.SpreedCapability @@ -15,11 +16,12 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.conversations.RoomsOverall import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.reminder.Reminder +import com.nextcloud.talk.models.json.userAbsence.UserAbsenceOverall import com.nextcloud.talk.utils.ApiUtils import io.reactivex.Observable import retrofit2.Response -class RetrofitChatNetwork(private val ncApi: NcApi) : ChatNetworkDataSource { +class RetrofitChatNetwork(private val ncApi: NcApi, private val ncApiCoroutines:NcApiCoroutines) : ChatNetworkDataSource { override fun getRoom(user: User, roomToken: String): Observable { val credentials: String = ApiUtils.getCredentials(user.username, user.token)!! val apiVersion = ApiUtils.getConversationApiVersion(user, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V3, 1)) @@ -178,4 +180,10 @@ class RetrofitChatNetwork(private val ncApi: NcApi) : ChatNetworkDataSource { override fun editChatMessage(credentials: String, url: String, text: String): Observable { return ncApi.editChatMessage(credentials, url, text).map { it } } + + override suspend fun getOutOfOfficeStatusForUser(credentials: String, baseUrl: String, userId:String): + UserAbsenceOverall { + return ncApiCoroutines.getOutOfOfficeStatusForUser(credentials, + ApiUtils.getUrlForOutOfOffice(baseUrl,userId)) + } } diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index 1798d7403..71821d1d5 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -16,6 +16,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.nextcloud.talk.chat.data.ChatMessageRepository import com.nextcloud.talk.chat.data.io.AudioFocusRequestManager import com.nextcloud.talk.chat.data.io.MediaRecorderManager @@ -33,6 +34,7 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.conversations.RoomsOverall import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.reminder.Reminder +import com.nextcloud.talk.models.json.userAbsence.UserAbsenceData import com.nextcloud.talk.repositories.reactions.ReactionsRepository import com.nextcloud.talk.ui.PlaybackSpeed import com.nextcloud.talk.utils.ConversationUtils @@ -47,6 +49,7 @@ import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch import java.io.File import javax.inject.Inject @@ -109,6 +112,10 @@ class ChatViewModel @Inject constructor( val getVoiceRecordingLocked: LiveData get() = _getVoiceRecordingLocked + private val _outOfOfficeViewState = MutableLiveData(OutOfOfficeUIState.None) + val outOfOfficeViewState: LiveData + get() = _outOfOfficeViewState + private val _voiceMessagePlaybackSpeedPreferences: MutableLiveData> = MutableLiveData() val voiceMessagePlaybackSpeedPreferences: LiveData> get() = _voiceMessagePlaybackSpeedPreferences @@ -764,8 +771,26 @@ class ChatViewModel @Inject constructor( } } + fun outOfOfficeStatusOfUser(credentials:String, baseUrl: String, userId: String) { + viewModelScope.launch { + try { + val response = chatNetworkDataSource.getOutOfOfficeStatusForUser(credentials, baseUrl, userId) + _outOfOfficeViewState.value = OutOfOfficeUIState.Success(response.ocs?.data!!) + } catch (exception: Exception) { + _outOfOfficeViewState.value = OutOfOfficeUIState.Error(exception) + } + } + } + companion object { private val TAG = ChatViewModel::class.simpleName const val JOIN_ROOM_RETRY_COUNT: Long = 3 } + + + sealed class OutOfOfficeUIState { + data object None : OutOfOfficeUIState() + data class Success(val userAbsence: UserAbsenceData) : OutOfOfficeUIState() + data class Error(val exception: Exception) : OutOfOfficeUIState() + } } diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt b/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt index b33c9ffbb..6d2bdda9d 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt @@ -147,8 +147,8 @@ class RepositoryModule { } @Provides - fun provideChatNetworkDataSource(ncApi: NcApi): ChatNetworkDataSource { - return RetrofitChatNetwork(ncApi) + fun provideChatNetworkDataSource(ncApi: NcApi, ncApiCoroutines: NcApiCoroutines): ChatNetworkDataSource { + return RetrofitChatNetwork(ncApi,ncApiCoroutines) } @Provides diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt index 5440e6bb1..f6b4b60d5 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt @@ -601,4 +601,8 @@ object ApiUtils { fun getUrlForArchive(version: Int, baseUrl: String?, token: String?): String { return "${getUrlForRoom(version, baseUrl, token)}/archive" } + + fun getUrlForOutOfOffice(baseUrl:String, userId:String):String{ + return "$baseUrl$OCS_API_VERSION/apps/dav/api/v1/outOfOffice/$userId/now" + } }