Various Improvements

This commit is contained in:
Ilya Laktyushin 2021-11-12 18:06:03 +04:00
parent 1e440c199c
commit db832bfb17
4 changed files with 32 additions and 9 deletions

View File

@ -7056,3 +7056,6 @@ Sorry for the inconvenience.";
"VoiceChat.DiscussionGroup" = "discussion group";
"Group.Edit.PrivatePublicLinkAlert" = "Please note that if you choose a public link for your group, anyone will be able to find it in search and join.\n\nDo not create this link if you want your group to stay private.";
"Conversation.CopyProtectionInfoGroup" = "Admins restricted members to copy or forward content from this group.";
"Conversation.CopyProtectionInfoChannel" = "Admins restricted members to copy or forward content from this channel.";

View File

@ -351,6 +351,7 @@ private final class InnerTextSelectionTipContainerNode: ASDisplayNode {
self.presentationData = presentationData
self.textNode = TextNode()
var icon: UIImage?
switch tip {
case .textSelection:
var rawText = self.presentationData.strings.ChatContextMenu_TextSelectionTip
@ -362,15 +363,21 @@ private final class InnerTextSelectionTipContainerNode: ASDisplayNode {
self.text = rawText
self.targetSelectionIndex = 1
}
icon = UIImage(bundleImageName: "Chat/Context Menu/Tip")
case .messageViewsPrivacy:
self.text = self.presentationData.strings.ChatContextMenu_MessageViewsPrivacyTip
self.targetSelectionIndex = nil
icon = UIImage(bundleImageName: "Chat/Context Menu/Tip")
case let .messageCopyProtection(isChannel):
self.text = isChannel ? self.presentationData.strings.Conversation_CopyProtectionInfoChannel : self.presentationData.strings.Conversation_CopyProtectionInfoGroup
self.targetSelectionIndex = nil
icon = UIImage(bundleImageName: "Chat/Context Menu/ReportCopyright")
}
self.iconNode = ASImageNode()
self.iconNode.displaysAsynchronously = false
self.iconNode.displayWithoutProcessing = true
self.iconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Tip"), color: presentationData.theme.contextMenu.primaryColor)
self.iconNode.image = generateTintedImage(image: icon, color: presentationData.theme.contextMenu.primaryColor)
super.init()

View File

@ -1828,6 +1828,7 @@ public final class ContextController: ViewController, StandalonePresentableContr
public enum Tip {
case textSelection
case messageViewsPrivacy
case messageCopyProtection(isChannel: Bool)
}
public final class ActionsHeight {

View File

@ -280,6 +280,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
private var clearCacheDisposable: MetaDisposable?
private var bankCardDisposable: MetaDisposable?
private var hasActiveGroupCallDisposable: Disposable?
private var sendAsPeersDisposable: Disposable?
private let editingMessage = ValuePromise<Float?>(nil, ignoreRepeated: true)
private let startingBot = ValuePromise<Bool>(false, ignoreRepeated: true)
@ -943,11 +944,19 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
var tip: ContextController.Tip?
if tip == nil {
let numberOfComponents = message.text.components(separatedBy: CharacterSet.whitespacesAndNewlines).count
let displayTextSelectionTip = numberOfComponents >= 3 && !message.text.isEmpty && chatTextSelectionTips < 3 && !message.isCopyProtected()
if displayTextSelectionTip {
let _ = ApplicationSpecificNotice.incrementChatTextSelectionTips(accountManager: strongSelf.context.sharedContext.accountManager).start()
tip = .textSelection
if message.isCopyProtected() {
var isChannel = false
if let channel = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel, case .broadcast = channel.info {
isChannel = true
}
tip = .messageCopyProtection(isChannel: isChannel)
} else {
let numberOfComponents = message.text.components(separatedBy: CharacterSet.whitespacesAndNewlines).count
let displayTextSelectionTip = numberOfComponents >= 3 && !message.text.isEmpty && chatTextSelectionTips < 3
if displayTextSelectionTip {
let _ = ApplicationSpecificNotice.incrementChatTextSelectionTips(accountManager: strongSelf.context.sharedContext.accountManager).start()
tip = .textSelection
}
}
}
@ -1145,7 +1154,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
})
} else {
strongSelf.sendMessages(messages)
let transformedMessages = strongSelf.transformEnqueueMessages(messages)
strongSelf.sendMessages(transformedMessages)
}
return true
}, sendGif: { [weak self] fileReference, sourceNode, sourceRect, silentPosting, schedule in
@ -1180,6 +1190,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
})
} else {
messages = strongSelf.transformEnqueueMessages(messages)
strongSelf.sendMessages(messages)
}
}
@ -4176,6 +4187,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
self.importStateDisposable?.dispose()
self.nextChannelToReadDisposable?.dispose()
self.inviteRequestsDisposable.dispose()
self.sendAsPeersDisposable?.dispose()
}
public func updatePresentationMode(_ mode: ChatControllerPresentationMode) {
@ -4565,7 +4577,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
return [FoundPeer(peer: peer, subscribers: nil)]
}
let _ = (combineLatest(queue: Queue.mainQueue(), currentAccountPeer, self.context.account.postbox.peerView(id: self.chatLocation.peerId), self.context.engine.peers.sendAsAvailablePeers(peerId: self.chatLocation.peerId)))
self.sendAsPeersDisposable = (combineLatest(queue: Queue.mainQueue(), currentAccountPeer, self.context.account.postbox.peerView(id: self.chatLocation.peerId), self.context.engine.peers.sendAsAvailablePeers(peerId: self.chatLocation.peerId)))
.start(next: { [weak self] currentAccountPeer, peerView, peers in
guard let strongSelf = self else {
return