From bde3418ce5005c4521a87a315ede08a99243f02c Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 28 Apr 2026 19:16:08 +0200 Subject: [PATCH] Various fixes --- .../BrowserUI/Sources/BrowserMarkdown.swift | 2 +- .../Sources/ComposeTodoScreen.swift | 2 +- .../Sources/GiftItemComponent.swift | 38 ++++++++++++++---- .../Sources/ChatbotSetupScreen.swift | 6 +-- .../Resources/Animations/BotEmoji.tgs | Bin 30782 -> 0 bytes .../Resources/Animations/ChatAutomation.tgs | Bin 0 -> 15824 bytes .../ChatInterfaceStateNavigationButtons.swift | 4 +- .../Sources/ChatTextInputAttributes.swift | 27 ++++--------- 8 files changed, 45 insertions(+), 34 deletions(-) delete mode 100644 submodules/TelegramUI/Resources/Animations/BotEmoji.tgs create mode 100644 submodules/TelegramUI/Resources/Animations/ChatAutomation.tgs diff --git a/submodules/BrowserUI/Sources/BrowserMarkdown.swift b/submodules/BrowserUI/Sources/BrowserMarkdown.swift index 17dbb5dc35..6ef7a0eea5 100644 --- a/submodules/BrowserUI/Sources/BrowserMarkdown.swift +++ b/submodules/BrowserUI/Sources/BrowserMarkdown.swift @@ -42,7 +42,7 @@ private let markdownVoidHTMLTags: Set = [ ] private struct MarkdownSafetyLimits { - let maxFileSize = 2_097_152 + let maxFileSize = 524_288 let maxLineLength = 32_768 let maxBlockquoteDepth = 64 let maxListIndent = 96 diff --git a/submodules/TelegramUI/Components/ComposeTodoScreen/Sources/ComposeTodoScreen.swift b/submodules/TelegramUI/Components/ComposeTodoScreen/Sources/ComposeTodoScreen.swift index 3002238bac..5eb51a3f78 100644 --- a/submodules/TelegramUI/Components/ComposeTodoScreen/Sources/ComposeTodoScreen.swift +++ b/submodules/TelegramUI/Components/ComposeTodoScreen/Sources/ComposeTodoScreen.swift @@ -204,7 +204,7 @@ final class ComposeTodoScreenComponent: Component { for (id, itemView) in self.todoItemsSectionContainer.itemViews { if let view = itemView.contents.view as? ListComposePollOptionComponent.View, !view.isRevealed && !view.currentText.isEmpty { let viewFrame = view.convert(view.bounds, to: self.todoItemsSectionContainer) - let iconFrame = CGRect(origin: CGPoint(x: viewFrame.maxX - 40.0, y: viewFrame.minY), size: CGSize(width: viewFrame.height, height: viewFrame.height)) + let iconFrame = CGRect(origin: CGPoint(x: viewFrame.minX, y: viewFrame.minY), size: CGSize(width: 50.0, height: viewFrame.height)) if iconFrame.contains(localPoint) { return (id, itemView.contents) } diff --git a/submodules/TelegramUI/Components/Gifts/GiftItemComponent/Sources/GiftItemComponent.swift b/submodules/TelegramUI/Components/Gifts/GiftItemComponent/Sources/GiftItemComponent.swift index 840df9d0fb..73e329bf11 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftItemComponent/Sources/GiftItemComponent.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftItemComponent/Sources/GiftItemComponent.swift @@ -345,6 +345,7 @@ public final class GiftItemComponent: Component { private var selectionLayer: SimpleShapeLayer? private var checkLayer: CheckLayer? private var outlineLayer: SimpleLayer? + private var outlineRenderState: OutlineRenderState? private var animationFile: TelegramMediaFile? @@ -361,6 +362,14 @@ public final class GiftItemComponent: Component { private var giftAuctionTimer: SwiftSignalKit.Timer? + private struct OutlineRenderState: Equatable { + let size: CGSize + let cornerRadius: CGFloat + let outline: GiftItemComponent.Outline + let hasRibbon: Bool + let themeId: ObjectIdentifier + } + public var pattern: UIView? { if let view = self.patternView.view { return view @@ -1537,6 +1546,14 @@ public final class GiftItemComponent: Component { if let outline = component.outline { let lineWidth: CGFloat = 2.0 let outlineFrame = backgroundFrame + let hasRibbon = self.ribbon.layer.superlayer != nil + let outlineRenderState = OutlineRenderState( + size: outlineFrame.size, + cornerRadius: cornerRadius, + outline: outline, + hasRibbon: hasRibbon, + themeId: ObjectIdentifier(component.theme) + ) let outlineLayer: SimpleLayer if let current = self.outlineLayer { @@ -1544,12 +1561,15 @@ public final class GiftItemComponent: Component { } else { outlineLayer = SimpleLayer() self.outlineLayer = outlineLayer - if self.ribbon.layer.superlayer != nil { - self.layer.insertSublayer(outlineLayer, below: self.ribbon.layer) - } else { - self.layer.addSublayer(outlineLayer) - } - + } + + if hasRibbon { + self.layer.insertSublayer(outlineLayer, below: self.ribbon.layer) + } else if outlineLayer.superlayer == nil { + self.layer.addSublayer(outlineLayer) + } + + if self.outlineRenderState != outlineRenderState { let image = generateImage(outlineFrame.size, rotatedContext: { size, context in context.clear(CGRect(origin: .zero, size: size)) @@ -1588,11 +1608,13 @@ public final class GiftItemComponent: Component { } }) outlineLayer.contents = image?.cgImage - - outlineLayer.frame = outlineFrame + self.outlineRenderState = outlineRenderState } + + transition.setFrame(layer: outlineLayer, frame: outlineFrame) } else if let outlineLayer = self.outlineLayer { self.outlineLayer = nil + self.outlineRenderState = nil outlineLayer.removeFromSuperlayer() } diff --git a/submodules/TelegramUI/Components/Settings/ChatbotSetupScreen/Sources/ChatbotSetupScreen.swift b/submodules/TelegramUI/Components/Settings/ChatbotSetupScreen/Sources/ChatbotSetupScreen.swift index 1da0fd8d81..8020a1a2f4 100644 --- a/submodules/TelegramUI/Components/Settings/ChatbotSetupScreen/Sources/ChatbotSetupScreen.swift +++ b/submodules/TelegramUI/Components/Settings/ChatbotSetupScreen/Sources/ChatbotSetupScreen.swift @@ -698,13 +698,13 @@ final class ChatbotSetupScreenComponent: Component { let iconSize = self.icon.update( transition: .immediate, component: AnyComponent(LottieComponent( - content: LottieComponent.AppBundleContent(name: "BotEmoji"), + content: LottieComponent.AppBundleContent(name: "ChatAutomation"), loop: false )), environment: {}, - containerSize: CGSize(width: 100.0, height: 100.0) + containerSize: CGSize(width: 140.0, height: 140.0) ) - let iconFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - iconSize.width) * 0.5), y: contentHeight - 30.0), size: iconSize) + let iconFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - iconSize.width) * 0.5), y: contentHeight - 50.0), size: iconSize) if let iconView = self.icon.view as? LottieComponent.View { if iconView.superview == nil { self.scrollView.addSubview(iconView) diff --git a/submodules/TelegramUI/Resources/Animations/BotEmoji.tgs b/submodules/TelegramUI/Resources/Animations/BotEmoji.tgs deleted file mode 100644 index 0076344f4c799f30199f553d5402e5f8b8c1daf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30782 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 diff --git a/submodules/TelegramUI/Resources/Animations/ChatAutomation.tgs b/submodules/TelegramUI/Resources/Animations/ChatAutomation.tgs new file mode 100644 index 0000000000000000000000000000000000000000..3e386fd63ec1b95e18402fc7704b225720374214 GIT binary patch literal 15824 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 I3UHAB3-{zpe*gdg literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateNavigationButtons.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateNavigationButtons.swift index 5c7b6a78e9..c74d28f32b 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateNavigationButtons.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateNavigationButtons.swift @@ -46,12 +46,12 @@ func leftNavigationButtonForChatInterfaceState(_ presentationInterfaceState: Cha } if canClear { - let buttonItem = UIBarButtonItem(title: "___clear", style: .plain, target: target, action: selector) + let buttonItem = UIBarButtonItem(title: strings.Conversation_ClearAll, style: .plain, target: target, action: selector) buttonItem.accessibilityLabel = title return ChatNavigationButton(action: .clearHistory, buttonItem: buttonItem) } else { title = strings.Conversation_ClearCache - let buttonItem = UIBarButtonItem(title: "___clear", style: .plain, target: target, action: selector) + let buttonItem = UIBarButtonItem(title: strings.Conversation_ClearCache, style: .plain, target: target, action: selector) buttonItem.accessibilityLabel = title return ChatNavigationButton(action: .clearCache, buttonItem: buttonItem) } diff --git a/submodules/TextFormat/Sources/ChatTextInputAttributes.swift b/submodules/TextFormat/Sources/ChatTextInputAttributes.swift index 61dde36ecb..75d29e5a3b 100644 --- a/submodules/TextFormat/Sources/ChatTextInputAttributes.swift +++ b/submodules/TextFormat/Sources/ChatTextInputAttributes.swift @@ -604,20 +604,9 @@ private func refreshTextMentions(text: NSString, initialAttributedText: NSAttrib } } -private let textUrlEdgeCharacters: CharacterSet = { - var set: CharacterSet = .alphanumerics - set.formUnion(.symbols) - set.formUnion(.punctuationCharacters) - set.remove("(") - set.remove(")") - return set -}() - -private let textUrlCharacters: CharacterSet = { - var set: CharacterSet = textUrlEdgeCharacters - set.formUnion(.whitespacesAndNewlines) - return set -}() +private func isTextUrlInnerCharacter(_ c: UnicodeScalar) -> Bool { + return alphanumericCharacters.contains(c) || c == " " as UnicodeScalar +} private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributedString, attributedText: NSMutableAttributedString, fullRange: NSRange) { var textUrlRanges: [(NSRange, ChatTextInputTextUrlAttribute)] = [] @@ -635,7 +624,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed var validLower = range.lowerBound inner1: for i in range.lowerBound ..< range.upperBound { if let c = UnicodeScalar(text.character(at: i)) { - if textUrlCharacters.contains(c) { + if isTextUrlInnerCharacter(c) { validLower = i break inner1 } @@ -646,7 +635,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed var validUpper = range.upperBound inner2: for i in (validLower ..< range.upperBound).reversed() { if let c = UnicodeScalar(text.character(at: i)) { - if textUrlCharacters.contains(c) { + if isTextUrlInnerCharacter(c) { validUpper = i + 1 break inner2 } @@ -658,7 +647,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed let minLower = (i == 0) ? fullRange.lowerBound : textUrlRanges[i - 1].0.upperBound inner3: for i in (minLower ..< validLower).reversed() { if let c = UnicodeScalar(text.character(at: i)) { - if textUrlEdgeCharacters.contains(c) { + if alphanumericCharacters.contains(c) { validLower = i } else { break inner3 @@ -671,7 +660,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed let maxUpper = (i == textUrlRanges.count - 1) ? fullRange.upperBound : textUrlRanges[i + 1].0.lowerBound inner3: for i in validUpper ..< maxUpper { if let c = UnicodeScalar(text.character(at: i)) { - if textUrlEdgeCharacters.contains(c) { + if alphanumericCharacters.contains(c) { validUpper = i + 1 } else { break inner3 @@ -693,7 +682,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed var combine = true inner: for j in textUrlRanges[i].0.upperBound ..< textUrlRanges[i + 1].0.lowerBound { if let c = UnicodeScalar(text.character(at: j)) { - if textUrlCharacters.contains(c) { + if isTextUrlInnerCharacter(c) { } else { combine = false break inner