diff --git a/.idea/inspectionProfiles/ktlint.xml b/.idea/inspectionProfiles/ktlint.xml
index a34119a8b..176170d8b 100644
--- a/.idea/inspectionProfiles/ktlint.xml
+++ b/.idea/inspectionProfiles/ktlint.xml
@@ -68,6 +68,7 @@
+
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 af291d4cf..cef8a27c0 100644
--- a/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt
+++ b/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt
@@ -8,6 +8,7 @@
package com.nextcloud.talk.api
import com.nextcloud.talk.models.json.autocomplete.AutocompleteOverall
+import com.nextcloud.talk.models.json.chat.ChatOverall
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
import com.nextcloud.talk.models.json.conversations.RoomOverall
import com.nextcloud.talk.models.json.generic.GenericOverall
@@ -227,4 +228,11 @@ interface NcApiCoroutines {
@Header("Authorization") authorization: String,
@Url url: String
): UserAbsenceOverall
+
+ @GET
+ suspend fun getContextOfChatMessage(
+ @Header("Authorization") authorization: String,
+ @Url url: String,
+ @Query("limit") limit: Int
+ ): ChatOverall
}
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 d808ac9a8..664139d25 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
@@ -9,10 +9,12 @@ package com.nextcloud.talk.chat.data.network
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.domain.ConversationModel
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
+import com.nextcloud.talk.models.json.chat.ChatMessageJson
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
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.opengraph.Reference
import com.nextcloud.talk.models.json.reminder.Reminder
import com.nextcloud.talk.models.json.userAbsence.UserAbsenceOverall
import io.reactivex.Observable
@@ -66,4 +68,12 @@ interface ChatNetworkDataSource {
fun setChatReadMarker(credentials: String, url: String, previousMessageId: Int): Observable
suspend fun editChatMessage(credentials: String, url: String, text: String): ChatOverallSingleMessage
suspend fun getOutOfOfficeStatusForUser(credentials: String, baseUrl: String, userId: String): UserAbsenceOverall
+ suspend fun getContextForChatMessage(
+ credentials: String,
+ baseUrl: String,
+ token: String,
+ messageId: String,
+ limit: Int
+ ): List
+ suspend fun getOpenGraph(credentials: String, baseUrl: String, extractedLinkToPreview: String): Reference?
}
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 6f857d254..e476d568b 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
@@ -11,10 +11,12 @@ 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
+import com.nextcloud.talk.models.json.chat.ChatMessageJson
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
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.opengraph.Reference
import com.nextcloud.talk.models.json.reminder.Reminder
import com.nextcloud.talk.models.json.userAbsence.UserAbsenceOverall
import com.nextcloud.talk.utils.ApiUtils
@@ -195,4 +197,28 @@ class RetrofitChatNetwork(
ApiUtils.getUrlForOutOfOffice(baseUrl, userId)
)
}
+
+ override suspend fun getContextForChatMessage(
+ credentials: String,
+ baseUrl: String,
+ token: String,
+ messageId: String,
+ limit: Int
+ ): List {
+ val url = ApiUtils.getUrlForChatMessageContext(baseUrl, token, messageId)
+ return ncApiCoroutines.getContextOfChatMessage(credentials, url, limit).ocs?.data ?: listOf()
+ }
+
+ override suspend fun getOpenGraph(
+ credentials: String,
+ baseUrl: String,
+ extractedLinkToPreview: String
+ ): Reference? {
+ val openGraphLink = ApiUtils.getUrlForOpenGraph(baseUrl)
+ return ncApi.getOpenGraph(
+ credentials,
+ openGraphLink,
+ extractedLinkToPreview
+ ).blockingFirst().ocs?.data?.references?.entries?.iterator()?.next()?.value
+ }
}
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 0a2b4a060..e72282f56 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
@@ -31,10 +31,12 @@ import com.nextcloud.talk.models.domain.ConversationModel
import com.nextcloud.talk.models.domain.ReactionAddedModel
import com.nextcloud.talk.models.domain.ReactionDeletedModel
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
+import com.nextcloud.talk.models.json.chat.ChatMessageJson
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
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.opengraph.Reference
import com.nextcloud.talk.models.json.reminder.Reminder
import com.nextcloud.talk.models.json.userAbsence.UserAbsenceData
import com.nextcloud.talk.repositories.reactions.ReactionsRepository
@@ -146,6 +148,18 @@ class ChatViewModel @Inject constructor(
val outOfOfficeViewState: LiveData
get() = _outOfOfficeViewState
+ private val _voiceMessagePlaybackSpeedPreferences: MutableLiveData