mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Limit chat input field text length when editing media
This commit is contained in:
parent
1e914ba95c
commit
da3e372772
@ -2805,7 +2805,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
})
|
||||
if let editMessage = interfaceState.editMessage, let message = combinedInitialData.initialData?.associatedMessages[editMessage.messageId] {
|
||||
updated = updatedChatEditInterfaceMessagetState(state: updated, message: message)
|
||||
updated = updatedChatEditInterfaceMessageState(state: updated, message: message)
|
||||
}
|
||||
updated = updated.updatedSlowmodeState(slowmodeState)
|
||||
return updated
|
||||
@ -3323,10 +3323,17 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
break
|
||||
}
|
||||
}
|
||||
return $0.withUpdatedEditMessage(ChatEditMessageState(messageId: messageId, inputState: ChatTextInputState(inputText: chatInputStateStringWithAppliedEntities(message.text, entities: entities)), disableUrlPreview: nil))
|
||||
var inputTextMaxLength: Int32?
|
||||
for media in message.media {
|
||||
if media is TelegramMediaImage || media is TelegramMediaFile {
|
||||
inputTextMaxLength = strongSelf.context.currentLimitsConfiguration.with { $0 }.maxMediaCaptionLength
|
||||
break
|
||||
}
|
||||
}
|
||||
return $0.withUpdatedEditMessage(ChatEditMessageState(messageId: messageId, inputState: ChatTextInputState(inputText: chatInputStateStringWithAppliedEntities(message.text, entities: entities)), disableUrlPreview: nil, inputTextMaxLength: inputTextMaxLength))
|
||||
}
|
||||
|
||||
updated = updatedChatEditInterfaceMessagetState(state: updated, message: message)
|
||||
updated = updatedChatEditInterfaceMessageState(state: updated, message: message)
|
||||
updated = updated.updatedInputMode({ _ in
|
||||
return .text
|
||||
})
|
||||
@ -5790,7 +5797,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
if !desc.text.isEmpty {
|
||||
state = state.updatedInterfaceState { state in
|
||||
if let editMessage = state.editMessage {
|
||||
return state.withUpdatedEditMessage(ChatEditMessageState(messageId: editMessage.messageId, inputState: ChatTextInputState(inputText: NSAttributedString(string: desc.text)), disableUrlPreview: editMessage.disableUrlPreview))
|
||||
return state.withUpdatedEditMessage(editMessage.withUpdatedInputState(ChatTextInputState(inputText: NSAttributedString(string: desc.text))))
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
@ -36,11 +36,13 @@ struct ChatEditMessageState: PostboxCoding, Equatable {
|
||||
let messageId: MessageId
|
||||
let inputState: ChatTextInputState
|
||||
let disableUrlPreview: String?
|
||||
let inputTextMaxLength: Int32?
|
||||
|
||||
init(messageId: MessageId, inputState: ChatTextInputState, disableUrlPreview: String?) {
|
||||
init(messageId: MessageId, inputState: ChatTextInputState, disableUrlPreview: String?, inputTextMaxLength: Int32?) {
|
||||
self.messageId = messageId
|
||||
self.inputState = inputState
|
||||
self.disableUrlPreview = disableUrlPreview
|
||||
self.inputTextMaxLength = inputTextMaxLength
|
||||
}
|
||||
|
||||
init(decoder: PostboxDecoder) {
|
||||
@ -51,6 +53,7 @@ struct ChatEditMessageState: PostboxCoding, Equatable {
|
||||
self.inputState = ChatTextInputState()
|
||||
}
|
||||
self.disableUrlPreview = decoder.decodeOptionalStringForKey("dup")
|
||||
self.inputTextMaxLength = decoder.decodeOptionalInt32ForKey("tl")
|
||||
}
|
||||
|
||||
func encode(_ encoder: PostboxEncoder) {
|
||||
@ -63,18 +66,23 @@ struct ChatEditMessageState: PostboxCoding, Equatable {
|
||||
} else {
|
||||
encoder.encodeNil(forKey: "dup")
|
||||
}
|
||||
if let inputTextMaxLength = self.inputTextMaxLength {
|
||||
encoder.encodeInt32(inputTextMaxLength, forKey: "ml")
|
||||
} else {
|
||||
encoder.encodeNil(forKey: "ml")
|
||||
}
|
||||
}
|
||||
|
||||
static func ==(lhs: ChatEditMessageState, rhs: ChatEditMessageState) -> Bool {
|
||||
return lhs.messageId == rhs.messageId && lhs.inputState == rhs.inputState && lhs.disableUrlPreview == rhs.disableUrlPreview
|
||||
return lhs.messageId == rhs.messageId && lhs.inputState == rhs.inputState && lhs.disableUrlPreview == rhs.disableUrlPreview && lhs.inputTextMaxLength == rhs.inputTextMaxLength
|
||||
}
|
||||
|
||||
func withUpdatedInputState(_ inputState: ChatTextInputState) -> ChatEditMessageState {
|
||||
return ChatEditMessageState(messageId: self.messageId, inputState: inputState, disableUrlPreview: self.disableUrlPreview)
|
||||
return ChatEditMessageState(messageId: self.messageId, inputState: inputState, disableUrlPreview: self.disableUrlPreview, inputTextMaxLength: self.inputTextMaxLength)
|
||||
}
|
||||
|
||||
func withUpdatedDisableUrlPreview(_ disableUrlPreview: String?) -> ChatEditMessageState {
|
||||
return ChatEditMessageState(messageId: self.messageId, inputState: self.inputState, disableUrlPreview: disableUrlPreview)
|
||||
return ChatEditMessageState(messageId: self.messageId, inputState: self.inputState, disableUrlPreview: disableUrlPreview, inputTextMaxLength: self.inputTextMaxLength)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1456,7 +1456,6 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
||||
}
|
||||
|
||||
if let textInputNode = self.textInputNode, let presentationInterfaceState = self.presentationInterfaceState {
|
||||
|
||||
if case .format = self.inputMenu.state {
|
||||
self.inputMenu.deactivate()
|
||||
UIMenuController.shared.update()
|
||||
@ -1561,6 +1560,14 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let newText = (editableTextNode.textView.text as NSString).replacingCharacters(in: range, with: cleanText)
|
||||
if let interfaceState = self.presentationInterfaceState, let editMessage = interfaceState.interfaceState.editMessage, let inputTextMaxLength = editMessage.inputTextMaxLength {
|
||||
if newText.count > inputTextMaxLength {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if cleanText != text {
|
||||
let string = NSMutableAttributedString(attributedString: editableTextNode.attributedText ?? NSAttributedString())
|
||||
var textColor: UIColor = .black
|
||||
|
Loading…
x
Reference in New Issue
Block a user