add send long msg

This commit is contained in:
cheykrym 2025-12-12 02:26:28 +03:00
parent 452ccfacd6
commit da5745cad8
2 changed files with 53 additions and 35 deletions

View File

@ -2842,9 +2842,6 @@
}, },
"Сообщение" : { "Сообщение" : {
},
"Сообщение слишком длинное." : {
}, },
"Сообщения будут с рожками и ножками." : { "Сообщения будут с рожками и ножками." : {

View File

@ -74,11 +74,7 @@ final class PrivateChatViewModel: ObservableObject {
completion(false) completion(false)
return return
} }
guard trimmed.count <= maxMessageLength else {
sendingErrorMessage = NSLocalizedString("Сообщение слишком длинное.", comment: "")
completion(false)
return
}
guard !isSending else { guard !isSending else {
sendingErrorMessage = NSLocalizedString("Дождитесь отправки предыдущего сообщения.", comment: "") sendingErrorMessage = NSLocalizedString("Дождитесь отправки предыдущего сообщения.", comment: "")
completion(false) completion(false)
@ -92,8 +88,17 @@ final class PrivateChatViewModel: ObservableObject {
isSending = true isSending = true
sendingErrorMessage = nil sendingErrorMessage = nil
chatService.sendPrivateMessage(chatId: chatId, content: trimmed) { [weak self] result in let chunks = splitMessage(trimmed, maxLength: maxMessageLength)
guard let self else { return } let dispatchGroup = DispatchGroup()
var overallSuccess = true
for chunk in chunks {
dispatchGroup.enter()
chatService.sendPrivateMessage(chatId: chatId, content: chunk) { [weak self] result in
guard let self else {
dispatchGroup.leave()
return
}
switch result { switch result {
case .success(let data): case .success(let data):
@ -103,7 +108,7 @@ final class PrivateChatViewModel: ObservableObject {
chatId: data.chatId, chatId: data.chatId,
senderId: currentUserId, senderId: currentUserId,
senderData: nil, senderData: nil,
content: trimmed, content: chunk,
mediaLink: nil, mediaLink: nil,
isViewed: true, isViewed: true,
viewedAt: nil, viewedAt: nil,
@ -111,17 +116,33 @@ final class PrivateChatViewModel: ObservableObject {
updatedAt: data.createdAt, updatedAt: data.createdAt,
forwardMetadata: nil forwardMetadata: nil
) )
self.messages = Self.merge(existing: self.messages, newMessages: [newMessage]) self.messages = Self.merge(existing: self.messages, newMessages: [newMessage])
self.errorMessage = nil
completion(true)
case .failure(let error): case .failure(let error):
self.sendingErrorMessage = self.message(for: error) self.sendingErrorMessage = self.message(for: error)
completion(false) overallSuccess = false
}
dispatchGroup.leave()
}
} }
dispatchGroup.notify(queue: .main) {
self.isSending = false self.isSending = false
if overallSuccess {
self.errorMessage = nil
} }
completion(overallSuccess)
}
}
private func splitMessage(_ message: String, maxLength: Int) -> [String] {
var chunks: [String] = []
var remaining = message
while !remaining.isEmpty {
let chunk = String(remaining.prefix(maxLength))
chunks.append(chunk)
remaining = String(remaining.dropFirst(maxLength))
}
return chunks
} }
func refresh() { func refresh() {