mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-06 22:33:10 +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] {
|
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)
|
updated = updated.updatedSlowmodeState(slowmodeState)
|
||||||
return updated
|
return updated
|
||||||
@ -3323,10 +3323,17 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
break
|
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
|
updated = updated.updatedInputMode({ _ in
|
||||||
return .text
|
return .text
|
||||||
})
|
})
|
||||||
@ -5790,7 +5797,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
if !desc.text.isEmpty {
|
if !desc.text.isEmpty {
|
||||||
state = state.updatedInterfaceState { state in
|
state = state.updatedInterfaceState { state in
|
||||||
if let editMessage = state.editMessage {
|
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
|
return state
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,11 +36,13 @@ struct ChatEditMessageState: PostboxCoding, Equatable {
|
|||||||
let messageId: MessageId
|
let messageId: MessageId
|
||||||
let inputState: ChatTextInputState
|
let inputState: ChatTextInputState
|
||||||
let disableUrlPreview: String?
|
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.messageId = messageId
|
||||||
self.inputState = inputState
|
self.inputState = inputState
|
||||||
self.disableUrlPreview = disableUrlPreview
|
self.disableUrlPreview = disableUrlPreview
|
||||||
|
self.inputTextMaxLength = inputTextMaxLength
|
||||||
}
|
}
|
||||||
|
|
||||||
init(decoder: PostboxDecoder) {
|
init(decoder: PostboxDecoder) {
|
||||||
@ -51,6 +53,7 @@ struct ChatEditMessageState: PostboxCoding, Equatable {
|
|||||||
self.inputState = ChatTextInputState()
|
self.inputState = ChatTextInputState()
|
||||||
}
|
}
|
||||||
self.disableUrlPreview = decoder.decodeOptionalStringForKey("dup")
|
self.disableUrlPreview = decoder.decodeOptionalStringForKey("dup")
|
||||||
|
self.inputTextMaxLength = decoder.decodeOptionalInt32ForKey("tl")
|
||||||
}
|
}
|
||||||
|
|
||||||
func encode(_ encoder: PostboxEncoder) {
|
func encode(_ encoder: PostboxEncoder) {
|
||||||
@ -63,18 +66,23 @@ struct ChatEditMessageState: PostboxCoding, Equatable {
|
|||||||
} else {
|
} else {
|
||||||
encoder.encodeNil(forKey: "dup")
|
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 {
|
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 {
|
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 {
|
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 let textInputNode = self.textInputNode, let presentationInterfaceState = self.presentationInterfaceState {
|
||||||
|
|
||||||
if case .format = self.inputMenu.state {
|
if case .format = self.inputMenu.state {
|
||||||
self.inputMenu.deactivate()
|
self.inputMenu.deactivate()
|
||||||
UIMenuController.shared.update()
|
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 {
|
if cleanText != text {
|
||||||
let string = NSMutableAttributedString(attributedString: editableTextNode.attributedText ?? NSAttributedString())
|
let string = NSMutableAttributedString(attributedString: editableTextNode.attributedText ?? NSAttributedString())
|
||||||
var textColor: UIColor = .black
|
var textColor: UIColor = .black
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user