diff --git a/TelegramUI/ChannelInfoController.swift b/TelegramUI/ChannelInfoController.swift index 5433479f9b..a594a95d72 100644 --- a/TelegramUI/ChannelInfoController.swift +++ b/TelegramUI/ChannelInfoController.swift @@ -315,7 +315,7 @@ private enum ChannelInfoEntry: ItemListNodeEntry { arguments.openChannelTypeSetup() }) case let .channelDescriptionSetup(theme, placeholder, value): - return ItemListMultilineInputItem(theme: theme, text: value, placeholder: placeholder, maxLength: 1000, sectionId: self.section, style: .plain, textUpdated: { updatedText in + return ItemListMultilineInputItem(theme: theme, text: value, placeholder: placeholder, maxLength: 255, sectionId: self.section, style: .plain, textUpdated: { updatedText in arguments.updateEditingDescriptionText(updatedText) }, action: { diff --git a/TelegramUI/CreateChannelController.swift b/TelegramUI/CreateChannelController.swift index 783f759df6..84c820f792 100644 --- a/TelegramUI/CreateChannelController.swift +++ b/TelegramUI/CreateChannelController.swift @@ -132,7 +132,7 @@ private enum CreateChannelEntry: ItemListNodeEntry { arguments.changeProfilePhoto() }) case let .descriptionSetup(theme, text, value): - return ItemListMultilineInputItem(theme: theme, text: value, placeholder: text, maxLength: 1000, sectionId: self.section, style: .blocks, textUpdated: { updatedText in + return ItemListMultilineInputItem(theme: theme, text: value, placeholder: text, maxLength: 255, sectionId: self.section, style: .blocks, textUpdated: { updatedText in arguments.updateEditingDescriptionText(updatedText) }, action: { @@ -214,7 +214,7 @@ public func createChannelController(account: Account) -> ViewController { }, updateEditingDescriptionText: { text in updateState { current in var current = current - current.editingDescriptionText = text + current.editingDescriptionText = String(text.prefix(255)) return current } }, done: { diff --git a/TelegramUI/GroupInfoController.swift b/TelegramUI/GroupInfoController.swift index 47d66e5a54..2fdb504a97 100644 --- a/TelegramUI/GroupInfoController.swift +++ b/TelegramUI/GroupInfoController.swift @@ -480,7 +480,7 @@ private enum GroupInfoEntry: ItemListNodeEntry { arguments.presentController(channelVisibilityController(account: arguments.account, peerId: arguments.peerId, mode: .generic), ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) }) case let .groupDescriptionSetup(theme, placeholder, text): - return ItemListMultilineInputItem(theme: theme, text: text, placeholder: placeholder, maxLength: 1000, sectionId: self.section, style: .blocks, textUpdated: { updatedText in + return ItemListMultilineInputItem(theme: theme, text: text, placeholder: placeholder, maxLength: 255, sectionId: self.section, style: .blocks, textUpdated: { updatedText in arguments.updateEditingDescriptionText(updatedText) }, action: { diff --git a/TelegramUI/ItemListMultilineInputItem.swift b/TelegramUI/ItemListMultilineInputItem.swift index ba70c49ca9..0eb744967d 100644 --- a/TelegramUI/ItemListMultilineInputItem.swift +++ b/TelegramUI/ItemListMultilineInputItem.swift @@ -100,6 +100,7 @@ class ItemListMultilineInputItemNode: ListViewItemNode, ASEditableTextNodeDelega self.textClippingNode.addSubnode(self.textNode) self.addSubnode(self.textClippingNode) + } override func didLoad() { @@ -290,6 +291,22 @@ class ItemListMultilineInputItemNode: ListViewItemNode, ASEditableTextNodeDelega } } + func editableTextNodeShouldPaste(_ editableTextNode: ASEditableTextNode) -> Bool { + if let item = self.item { + var text: String? = UIPasteboard.general.string + if let text = text { + if let maxLength = item.maxLength { + let string = self.textNode.attributedText?.string ?? "" + if string.count + text.count > maxLength { + UIPasteboard.general.string = String(text[.. deliverOnMainQueue).start(next: { [weak self] status in + displayLinkDispatcher.dispatch { + guard let `self` = self else {return} + + let state: RadialStatusNodeState + + + + + + switch status { + case let .Fetching(_, progress): + state = .progress(color: .white, lineWidth: nil, value: CGFloat(max(progress, 0.2)), cancelEnabled: false) + case .Remote: + state = .progress(color: .white, lineWidth: nil, value: 0, cancelEnabled: false) + case .Local: + state = .none + } + + if state == .none { + if let statusNode = self.visibleProgressNodes[item.fileReference.media.fileId] { + self.visibleProgressNodes.removeValue(forKey: item.fileReference.media.fileId) + statusNode.transitionToState(state, completion: { [weak statusNode] in + statusNode?.removeFromSupernode() + }) + } + } else { + if let visibleProgressNode = self.visibleProgressNodes[item.fileReference.media.fileId] { + if ensureFrames { + visibleProgressNode.frame = progressFrame + } + } else { + let visibleProgressNode = RadialStatusNode(backgroundNodeColor: UIColor(white: 0.0, alpha: 0.5)) + visibleProgressNode.frame = progressFrame + self.visibleProgressNodes[item.fileReference.media.fileId] = visibleProgressNode + } + + let statusNode = self.visibleProgressNodes[item.fileReference.media.fileId]! + statusNode.transitionToState(state, completion: {}) + self.addSubnode(statusNode) + } + } + })) + + if item.frame.maxY < minVisibleY { continue; } diff --git a/TelegramUI/SoftwareVideoThumbnailLayer.swift b/TelegramUI/SoftwareVideoThumbnailLayer.swift index b345a0868d..46f2b7a36a 100644 --- a/TelegramUI/SoftwareVideoThumbnailLayer.swift +++ b/TelegramUI/SoftwareVideoThumbnailLayer.swift @@ -18,7 +18,7 @@ final class SoftwareVideoThumbnailLayer: CALayer { init(account: Account, fileReference: FileMediaReference) { super.init() - self.backgroundColor = UIColor.black.cgColor + self.backgroundColor = UIColor.clear.cgColor self.contentsGravity = "resizeAspectFill" self.masksToBounds = true @@ -28,7 +28,7 @@ final class SoftwareVideoThumbnailLayer: CALayer { let imageSize = boundingSize boundingSize.width = min(200.0, boundingSize.width) - if let image = transform(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: boundingSize, intrinsicInsets: UIEdgeInsets()))?.generateImage() { + if let image = transform(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: boundingSize, intrinsicInsets: UIEdgeInsets(), resizeMode: .fill(.clear)))?.generateImage() { Queue.mainQueue().async { if let strongSelf = self { strongSelf.contents = image.cgImage