Skip to content

Commit abe7e9c

Browse files
committed
Merge branch 'develop_v4' into testing_v4
# Conflicts: # build.gradle
2 parents f47f6fb + 9141f0d commit abe7e9c

24 files changed

+274
-360
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77

88
allprojects {
99
project.group = "ru.usedesk"
10-
project.version = "4.3.1-testing01"
10+
project.version = "4.4.0-testing01"
1111
}
1212

1313
ext {

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/AdditionalFieldsInteractor.kt

+29-31
Original file line numberDiff line numberDiff line change
@@ -7,52 +7,50 @@ import kotlinx.coroutines.delay
77
import kotlinx.coroutines.flow.collect
88
import kotlinx.coroutines.flow.combine
99
import kotlinx.coroutines.flow.filter
10-
import kotlinx.coroutines.flow.filterNotNull
10+
import kotlinx.coroutines.flow.filterNot
1111
import kotlinx.coroutines.launch
12-
import ru.usedesk.chat_sdk.data.repository.api.ApiRepository
13-
import ru.usedesk.chat_sdk.data.repository.api.IApiRepository
14-
import ru.usedesk.chat_sdk.entity.UsedeskChatConfiguration
12+
import ru.usedesk.chat_sdk.data.repository.api.ChatApi
13+
import ru.usedesk.chat_sdk.data.repository.configuration.UserInfoRepository
1514
import javax.inject.Inject
1615

1716
internal class AdditionalFieldsInteractor @Inject constructor(
18-
private val initConfiguration: UsedeskChatConfiguration,
1917
private val additionalFieldsRepository: AdditionalFieldsRepository,
20-
private val clientTokenRepository: ClientTokenRepository,
21-
private val apiRepository: ApiRepository,
18+
private val userInfoRepository: UserInfoRepository,
19+
private val chatApi: ChatApi,
2220
) {
2321
private val ioScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
2422

2523
fun initAdditionalFields() {
26-
if (initConfiguration.additionalFields.isNotEmpty() ||
27-
initConfiguration.additionalNestedFields.isNotEmpty()
24+
val configuration = userInfoRepository.getConfiguration()
25+
if (configuration.additionalFields.isNotEmpty() ||
26+
configuration.additionalNestedFields.isNotEmpty()
2827
) {
2928
ioScope.launch {
30-
val needToSendAdditionalFieldsFlow = combine(
31-
additionalFieldsRepository.additionalFieldsNeededFlow,
32-
additionalFieldsRepository.firstMessageSentFlow,
33-
) { additionalFieldsNeeded, firstMessageSent ->
34-
additionalFieldsNeeded && firstMessageSent
35-
}
36-
combine(
37-
clientTokenRepository.clientTokenRepositoryFlow.filterNotNull(),
38-
needToSendAdditionalFieldsFlow.filter { it },
39-
) { clientToken, _ ->
40-
additionalFieldsRepository.additionalFieldsSent(true)
41-
val response = apiRepository.sendFields(
42-
clientToken,
43-
initConfiguration,
44-
initConfiguration.additionalFields,
45-
initConfiguration.additionalNestedFields
46-
)
47-
if (response is IApiRepository.SendAdditionalFieldsResponse.Error) {
48-
delay(REPEAT_DELAY)
49-
additionalFieldsRepository.additionalFieldsSent(false)
50-
}
51-
}.collect()
29+
launchAdditionalFieldsJob()
5230
}
5331
}
5432
}
5533

34+
private suspend fun launchAdditionalFieldsJob() {
35+
val needToSendAdditionalFieldsFlow = combine(
36+
additionalFieldsRepository.additionalFieldsNeededFlow,
37+
additionalFieldsRepository.firstMessageSentFlow,
38+
) { additionalFieldsNeeded, firstMessageSent ->
39+
additionalFieldsNeeded && firstMessageSent
40+
}
41+
combine(
42+
userInfoRepository.configurationFlow.filterNot { it.clientToken.isNullOrEmpty() },
43+
needToSendAdditionalFieldsFlow.filter { it },
44+
) { configuration, _ ->
45+
additionalFieldsRepository.additionalFieldsSent(true)
46+
val response = chatApi.sendFields(configuration)
47+
if (response is ChatApi.SendAdditionalFieldsResponse.Error) {
48+
delay(REPEAT_DELAY)
49+
additionalFieldsRepository.additionalFieldsSent(false)
50+
}
51+
}.collect()
52+
}
53+
5654
companion object {
5755
private const val REPEAT_DELAY = 5000L
5856
}

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/ClientTokenRepository.kt

-31
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ru.usedesk.chat_sdk.data.repository
2+
3+
import ru.usedesk.chat_sdk.entity.UsedeskChatConfiguration
4+
import javax.inject.Inject
5+
6+
class InitClientMessageRepository @Inject constructor(
7+
initChatConfiguration: UsedeskChatConfiguration,
8+
) {
9+
var initClientMessage: String? = initChatConfiguration.clientInitMessage
10+
var offlineFormMessage: String? = null
11+
12+
fun clearMessages() {
13+
initClientMessage = null
14+
offlineFormMessage = null
15+
}
16+
}

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/_extra/DataLoader.kt

-23
This file was deleted.

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/_extra/retrofit/RetrofitApi.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ internal interface RetrofitApi {
2626

2727
@GET("uapi/chat/getChatMessage")
2828
fun loadPreviousMessages(
29-
@Query("chat_token") chatToken: String,
29+
@Query("chat_token") chatToken: String?,
3030
@Query("comment_id") commentId: String
3131
): Call<ResponseBody>
3232

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/IApiRepository.kt chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/ChatApi.kt

+1-9
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,16 @@ import ru.usedesk.chat_sdk.entity.UsedeskMessage
1111
import ru.usedesk.chat_sdk.entity.UsedeskOfflineForm
1212
import ru.usedesk.chat_sdk.entity.UsedeskOfflineFormSettings
1313

14-
internal interface IApiRepository {
14+
internal interface ChatApi {
1515
@CheckResult
1616
suspend fun connect(
17-
url: String,
18-
token: String?,
1917
configuration: UsedeskChatConfiguration,
2018
eventListener: EventListener
2119
): SocketSendResponse
2220

2321
@CheckResult
2422
suspend fun sendInit(
2523
configuration: UsedeskChatConfiguration,
26-
token: String?
2724
): SocketSendResponse
2825

2926
@CheckResult
@@ -44,7 +41,6 @@ internal interface IApiRepository {
4441
@CheckResult
4542
suspend fun sendFile(
4643
configuration: UsedeskChatConfiguration,
47-
token: String,
4844
fileInfo: UsedeskFileInfo,
4945
messageId: String,
5046
progressFlow: MutableStateFlow<Pair<Long, Long>>
@@ -54,16 +50,12 @@ internal interface IApiRepository {
5450

5551
@CheckResult
5652
suspend fun sendFields(
57-
token: String,
5853
configuration: UsedeskChatConfiguration,
59-
additionalFields: Map<Long, String>,
60-
additionalNestedFields: List<Map<Long, String>>
6154
): SendAdditionalFieldsResponse
6255

6356
@CheckResult
6457
suspend fun loadPreviousMessages(
6558
configuration: UsedeskChatConfiguration,
66-
token: String,
6759
messageId: String
6860
): LoadPreviousMessageResponse
6961

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/ApiRepository.kt chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/ChatApiImpl.kt

+21-31
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import kotlinx.coroutines.flow.MutableStateFlow
1414
import kotlinx.coroutines.sync.Mutex
1515
import kotlinx.coroutines.sync.withLock
1616
import ru.usedesk.chat_sdk.data.repository._extra.retrofit.RetrofitApi
17-
import ru.usedesk.chat_sdk.data.repository.api.IApiRepository.*
18-
import ru.usedesk.chat_sdk.data.repository.api.IApiRepository.EventListener
17+
import ru.usedesk.chat_sdk.data.repository.api.ChatApi.*
18+
import ru.usedesk.chat_sdk.data.repository.api.ChatApi.EventListener
1919
import ru.usedesk.chat_sdk.data.repository.api.entity.*
2020
import ru.usedesk.chat_sdk.data.repository.api.loader.IInitChatResponseConverter
2121
import ru.usedesk.chat_sdk.data.repository.api.loader.IMessageResponseConverter
@@ -34,7 +34,7 @@ import java.util.*
3434
import javax.inject.Inject
3535
import kotlin.math.min
3636

37-
internal class ApiRepository @Inject constructor(
37+
internal class ChatApiImpl @Inject constructor(
3838
private val context: Context,
3939
private val socketApi: SocketApi,
4040
private val initChatResponseConverter: IInitChatResponseConverter,
@@ -48,7 +48,7 @@ internal class ApiRepository @Inject constructor(
4848
multipartConverter,
4949
gson,
5050
RetrofitApi::class.java
51-
), IApiRepository {
51+
), ChatApi {
5252

5353
private lateinit var eventListener: EventListener
5454
private val requestDeferredMap = mutableMapOf<String, CompletableDeferred<SocketSendResponse>>()
@@ -144,15 +144,13 @@ internal class ApiRepository @Inject constructor(
144144
}
145145

146146
override suspend fun connect(
147-
url: String,
148-
token: String?,
149147
configuration: UsedeskChatConfiguration,
150-
eventListener: EventListener
148+
eventListener: EventListener,
151149
): SocketSendResponse = try {
152150
this.eventListener = eventListener
153151
socketApi.connect(
154-
url,
155-
configuration.toInitChatRequest(token),
152+
configuration.urlChat,
153+
configuration.toInitChatRequest(),
156154
socketEventListener
157155
)
158156
SocketSendResponse.Done
@@ -181,16 +179,13 @@ internal class ApiRepository @Inject constructor(
181179

182180
override suspend fun sendInit(
183181
configuration: UsedeskChatConfiguration,
184-
token: String?
185182
): SocketSendResponse {
186-
val result = socketApi.sendRequest(configuration.toInitChatRequest(token))
183+
val result = socketApi.sendRequest(configuration.toInitChatRequest())
187184
return result //TODO:
188185
}
189186

190-
private fun UsedeskChatConfiguration.toInitChatRequest(
191-
token: String?
192-
) = SocketRequest.Init(
193-
token,
187+
private fun UsedeskChatConfiguration.toInitChatRequest() = SocketRequest.Init(
188+
clientToken,
194189
companyAndChannel(),
195190
urlChat,
196191
when {
@@ -243,14 +238,13 @@ internal class ApiRepository @Inject constructor(
243238

244239
override suspend fun sendFile(
245240
configuration: UsedeskChatConfiguration,
246-
token: String,
247241
fileInfo: UsedeskFileInfo,
248242
messageId: String,
249243
progressFlow: MutableStateFlow<Pair<Long, Long>>
250244
): SendFileResponse = when {
251245
isConnected() -> {
252246
val request = SendFile.Request(
253-
token,
247+
configuration.clientToken,
254248
messageId,
255249
fileInfo.uri
256250
)
@@ -342,11 +336,10 @@ internal class ApiRepository @Inject constructor(
342336

343337
override suspend fun loadPreviousMessages(
344338
configuration: UsedeskChatConfiguration,
345-
token: String,
346339
messageId: String
347340
): LoadPreviousMessageResponse {
348341
val request = LoadPreviousMessages.Request(
349-
token,
342+
configuration.clientToken,
350343
messageId
351344
)
352345
val response = doRequestJson(
@@ -398,20 +391,17 @@ internal class ApiRepository @Inject constructor(
398391
private fun UsedeskChatConfiguration.companyAndChannel() = "${companyId}_$channelId"
399392

400393
override suspend fun sendFields(
401-
token: String,
402394
configuration: UsedeskChatConfiguration,
403-
additionalFields: Map<Long, String>,
404-
additionalNestedFields: List<Map<Long, String>>
405395
): SendAdditionalFieldsResponse {
406-
val totalFields =
407-
(additionalFields.toList() + additionalNestedFields.flatMap(Map<Long, String>::toList))
408-
.map { field ->
409-
SendAdditionalFields.Request.AdditionalField(
410-
field.first,
411-
field.second
412-
)
413-
}
414-
val request = SendAdditionalFields.Request(token, totalFields)
396+
val nestedFields = configuration.additionalNestedFields.flatMap(Map<Long, String>::toList)
397+
val totalFields = (configuration.additionalFields.toList() + nestedFields)
398+
.map { field ->
399+
SendAdditionalFields.Request.AdditionalField(
400+
field.first,
401+
field.second
402+
)
403+
}
404+
val request = SendAdditionalFields.Request(configuration.clientToken, totalFields)
415405
val response = doRequestJson(
416406
configuration.urlChatApi,
417407
request,

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/entity/LoadPreviousMessages.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
21
package ru.usedesk.chat_sdk.data.repository.api.entity
32

43
import ru.usedesk.chat_sdk.data.repository.api.loader.socket._entity.SocketResponse
54
import ru.usedesk.common_sdk.api.entity.UsedeskApiError
65

76
internal interface LoadPreviousMessages {
87
class Request(
9-
val chatToken: String,
8+
val chatToken: String?,
109
val commentId: String
1110
)
1211

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/entity/SendAdditionalFields.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import ru.usedesk.common_sdk.api.entity.UsedeskApiError
55

66
internal interface SendAdditionalFields {
77
class Request(
8-
private val chatToken: String,
8+
private val chatToken: String?,
99
private val additionalFields: List<AdditionalField>
1010
) {
1111

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/entity/SendFile.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import ru.usedesk.common_sdk.api.entity.UsedeskApiError
77

88
internal interface SendFile {
99
class Request(
10-
val token: String,
10+
val token: String?,
1111
val messageId: String,
1212
val file: Uri
1313
) : MultipartRequest(

chat-sdk/src/main/java/ru/usedesk/chat_sdk/data/repository/api/loader/socket/SocketApi.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package ru.usedesk.chat_sdk.data.repository.api.loader.socket
33
import com.google.gson.Gson
44
import kotlinx.coroutines.sync.Mutex
55
import kotlinx.coroutines.sync.withLock
6-
import ru.usedesk.chat_sdk.data.repository.api.IApiRepository.SocketSendResponse
6+
import ru.usedesk.chat_sdk.data.repository.api.ChatApi.SocketSendResponse
77
import ru.usedesk.chat_sdk.data.repository.api.loader.socket._entity.SocketRequest
88
import ru.usedesk.chat_sdk.data.repository.api.loader.socket._entity.SocketResponse
99
import ru.usedesk.common_sdk.api.IUsedeskOkHttpClientFactory

0 commit comments

Comments
 (0)