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"; "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."; "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.presentationData = presentationData
self.textNode = TextNode() self.textNode = TextNode()
var icon: UIImage?
switch tip { switch tip {
case .textSelection: case .textSelection:
var rawText = self.presentationData.strings.ChatContextMenu_TextSelectionTip var rawText = self.presentationData.strings.ChatContextMenu_TextSelectionTip
@ -362,15 +363,21 @@ private final class InnerTextSelectionTipContainerNode: ASDisplayNode {
self.text = rawText self.text = rawText
self.targetSelectionIndex = 1 self.targetSelectionIndex = 1
} }
icon = UIImage(bundleImageName: "Chat/Context Menu/Tip")
case .messageViewsPrivacy: case .messageViewsPrivacy:
self.text = self.presentationData.strings.ChatContextMenu_MessageViewsPrivacyTip self.text = self.presentationData.strings.ChatContextMenu_MessageViewsPrivacyTip
self.targetSelectionIndex = nil 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 = ASImageNode()
self.iconNode.displaysAsynchronously = false self.iconNode.displaysAsynchronously = false
self.iconNode.displayWithoutProcessing = true 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() super.init()

View File

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

View File

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