mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
cc014328f1
commit
ca8f59565b
@ -2749,11 +2749,7 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
|
|||||||
tabsIsEmpty = true
|
tabsIsEmpty = true
|
||||||
}
|
}
|
||||||
|
|
||||||
var displaySearchFilters = true
|
let displaySearchFilters = true
|
||||||
if chatListView.0.entries.count < 10 {
|
|
||||||
displaySearchFilters = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if !tabsIsEmpty, let snapshotView = strongSelf.tabContainerNode.view.snapshotView(afterScreenUpdates: false) {
|
if !tabsIsEmpty, let snapshotView = strongSelf.tabContainerNode.view.snapshotView(afterScreenUpdates: false) {
|
||||||
snapshotView.frame = strongSelf.tabContainerNode.frame
|
snapshotView.frame = strongSelf.tabContainerNode.frame
|
||||||
strongSelf.tabContainerNode.view.superview?.addSubview(snapshotView)
|
strongSelf.tabContainerNode.view.superview?.addSubview(snapshotView)
|
||||||
|
@ -292,7 +292,6 @@ final class DrawingStickerEntityView: DrawingEntityView {
|
|||||||
let sideSize: CGFloat = size.width
|
let sideSize: CGFloat = size.width
|
||||||
let boundingSize = CGSize(width: sideSize, height: sideSize)
|
let boundingSize = CGSize(width: sideSize, height: sideSize)
|
||||||
|
|
||||||
|
|
||||||
let imageSize = self.dimensions.aspectFitted(boundingSize)
|
let imageSize = self.dimensions.aspectFitted(boundingSize)
|
||||||
self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets()))()
|
self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets()))()
|
||||||
self.imageNode.frame = CGRect(origin: CGPoint(x: floor((size.width - imageSize.width) / 2.0), y: (size.height - imageSize.height) / 2.0), size: imageSize)
|
self.imageNode.frame = CGRect(origin: CGPoint(x: floor((size.width - imageSize.width) / 2.0), y: (size.height - imageSize.height) / 2.0), size: imageSize)
|
||||||
@ -317,21 +316,32 @@ final class DrawingStickerEntityView: DrawingEntityView {
|
|||||||
self.bounds = CGRect(origin: .zero, size: self.dimensions.aspectFitted(size))
|
self.bounds = CGRect(origin: .zero, size: self.dimensions.aspectFitted(size))
|
||||||
self.transform = CGAffineTransformScale(CGAffineTransformMakeRotation(self.stickerEntity.rotation), self.stickerEntity.scale, self.stickerEntity.scale)
|
self.transform = CGAffineTransformScale(CGAffineTransformMakeRotation(self.stickerEntity.rotation), self.stickerEntity.scale, self.stickerEntity.scale)
|
||||||
|
|
||||||
var transform = CATransform3DIdentity
|
let staticTransform = CATransform3DMakeScale(self.stickerEntity.mirrored ? -1.0 : 1.0, 1.0, 1.0)
|
||||||
|
|
||||||
if self.stickerEntity.mirrored {
|
|
||||||
transform = CATransform3DRotate(transform, .pi, 0.0, 1.0, 0.0)
|
|
||||||
transform.m34 = -1.0 / self.imageNode.frame.width
|
|
||||||
}
|
|
||||||
|
|
||||||
if animated {
|
if animated {
|
||||||
UIView.animate(withDuration: 0.25, delay: 0.0) {
|
let isCurrentlyMirrored = ((self.imageNode.layer.value(forKeyPath: "transform.scale.y") as? NSNumber)?.floatValue ?? 1.0) < 0.0
|
||||||
self.imageNode.transform = transform
|
var animationSourceTransform = CATransform3DIdentity
|
||||||
self.animationNode?.transform = transform
|
var animationTargetTransform = CATransform3DIdentity
|
||||||
|
if isCurrentlyMirrored {
|
||||||
|
animationSourceTransform = CATransform3DRotate(animationSourceTransform, .pi, 0.0, 1.0, 0.0)
|
||||||
|
animationSourceTransform.m34 = -1.0 / self.imageNode.frame.width
|
||||||
}
|
}
|
||||||
|
if self.stickerEntity.mirrored {
|
||||||
|
animationTargetTransform = CATransform3DRotate(animationTargetTransform, .pi, 0.0, 1.0, 0.0)
|
||||||
|
animationTargetTransform.m34 = -1.0 / self.imageNode.frame.width
|
||||||
|
}
|
||||||
|
self.imageNode.transform = animationSourceTransform
|
||||||
|
self.animationNode?.transform = animationSourceTransform
|
||||||
|
UIView.animate(withDuration: 0.25, animations: {
|
||||||
|
self.imageNode.transform = animationTargetTransform
|
||||||
|
self.animationNode?.transform = animationTargetTransform
|
||||||
|
}, completion: { finished in
|
||||||
|
self.imageNode.transform = staticTransform
|
||||||
|
self.animationNode?.transform = staticTransform
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
self.imageNode.transform = transform
|
self.imageNode.transform = staticTransform
|
||||||
self.animationNode?.transform = transform
|
self.animationNode?.transform = staticTransform
|
||||||
}
|
}
|
||||||
|
|
||||||
super.update(animated: animated)
|
super.update(animated: animated)
|
||||||
|
@ -14,6 +14,13 @@ public extension TelegramGroup {
|
|||||||
func hasPermission(_ permission: Permission) -> Bool {
|
func hasPermission(_ permission: Permission) -> Bool {
|
||||||
switch permission {
|
switch permission {
|
||||||
case .sendSomething:
|
case .sendSomething:
|
||||||
|
switch self.role {
|
||||||
|
case .creator, .admin:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
let flags: TelegramChatBannedRightsFlags = [
|
let flags: TelegramChatBannedRightsFlags = [
|
||||||
.banSendText,
|
.banSendText,
|
||||||
.banSendInstantVideos,
|
.banSendInstantVideos,
|
||||||
@ -25,7 +32,6 @@ public extension TelegramGroup {
|
|||||||
.banSendFiles,
|
.banSendFiles,
|
||||||
.banSendInline
|
.banSendInline
|
||||||
]
|
]
|
||||||
|
|
||||||
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.intersection(flags) == flags {
|
if let defaultBannedRights = self.defaultBannedRights, defaultBannedRights.flags.intersection(flags) == flags {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -638,6 +638,10 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
|
|||||||
if self.emojiString != emojiString {
|
if self.emojiString != emojiString {
|
||||||
self.emojiString = emojiString
|
self.emojiString = emojiString
|
||||||
} else if self.emojiFile?.id != emojiFile?.id {
|
} else if self.emojiFile?.id != emojiFile?.id {
|
||||||
|
if self.emojiFile != nil {
|
||||||
|
self.didSetUpAnimationNode = false
|
||||||
|
item.controllerInteraction.seenOneTimeAnimatedMedia.remove(item.message.id)
|
||||||
|
}
|
||||||
self.emojiFile = emojiFile
|
self.emojiFile = emojiFile
|
||||||
if let emojiFile = emojiFile {
|
if let emojiFile = emojiFile {
|
||||||
var dimensions = emojiFile.dimensions ?? PixelDimensions(width: 512, height: 512)
|
var dimensions = emojiFile.dimensions ?? PixelDimensions(width: 512, height: 512)
|
||||||
@ -728,7 +732,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let animationNode = self.animationNode as? AnimatedStickerNode {
|
if let animationNode = self.animationNode as? AnimatedStickerNode {
|
||||||
if self.isPlaying != isPlaying {
|
if self.isPlaying != isPlaying || (isPlaying && !self.didSetUpAnimationNode) {
|
||||||
self.isPlaying = isPlaying
|
self.isPlaying = isPlaying
|
||||||
|
|
||||||
if isPlaying && self.setupTimestamp == nil {
|
if isPlaying && self.setupTimestamp == nil {
|
||||||
@ -736,13 +740,6 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
|
|||||||
}
|
}
|
||||||
animationNode.visibility = isPlaying
|
animationNode.visibility = isPlaying
|
||||||
|
|
||||||
/*if self.didSetUpAnimationNode && alreadySeen {
|
|
||||||
if let emojiFile = self.emojiFile, emojiFile.resource is LocalFileReferenceMediaResource {
|
|
||||||
} else {
|
|
||||||
animationNode.seekTo(.start)
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if self.isPlaying && !self.didSetUpAnimationNode {
|
if self.isPlaying && !self.didSetUpAnimationNode {
|
||||||
self.didSetUpAnimationNode = true
|
self.didSetUpAnimationNode = true
|
||||||
|
|
||||||
|
@ -1691,12 +1691,6 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
|
|||||||
interaction.editingOpenReactionsSetup()
|
interaction.editingOpenReactionsSetup()
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isPublic, case .known(nil) = cachedData.linkedDiscussionPeerId, !channel.flags.contains(.isForum){
|
|
||||||
items[.peerPublicSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPreHistory, label: .text(cachedData.flags.contains(.preHistoryEnabled) ? presentationData.strings.GroupInfo_GroupHistoryVisible : presentationData.strings.GroupInfo_GroupHistoryHidden), text: presentationData.strings.GroupInfo_GroupHistoryShort, icon: UIImage(bundleImageName: "Chat/Info/GroupDiscussionIcon"), action: {
|
|
||||||
interaction.editingOpenPreHistorySetup()
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if isCreator || (channel.adminRights?.rights.contains(.canChangeInfo) == true) {
|
if isCreator || (channel.adminRights?.rights.contains(.canChangeInfo) == true) {
|
||||||
let label: String
|
let label: String
|
||||||
@ -1718,6 +1712,12 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isCreator || (channel.adminRights != nil && channel.hasPermission(.banMembers))) && cachedData.peerGeoLocation == nil, !isPublic, case .known(nil) = cachedData.linkedDiscussionPeerId, !channel.flags.contains(.isForum) {
|
||||||
|
items[.peerPublicSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPreHistory, label: .text(cachedData.flags.contains(.preHistoryEnabled) ? presentationData.strings.GroupInfo_GroupHistoryVisible : presentationData.strings.GroupInfo_GroupHistoryHidden), text: presentationData.strings.GroupInfo_GroupHistoryShort, icon: UIImage(bundleImageName: "Chat/Info/GroupDiscussionIcon"), action: {
|
||||||
|
interaction.editingOpenPreHistorySetup()
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
if cachedData.flags.contains(.canSetStickerSet) && canEditPeerInfo(context: context, peer: channel, chatLocation: chatLocation, threadData: data.threadData) {
|
if cachedData.flags.contains(.canSetStickerSet) && canEditPeerInfo(context: context, peer: channel, chatLocation: chatLocation, threadData: data.threadData) {
|
||||||
items[.peerDataSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemStickerPack, label: .text(cachedData.stickerPack?.title ?? presentationData.strings.GroupInfo_SharedMediaNone), text: presentationData.strings.Stickers_GroupStickers, icon: UIImage(bundleImageName: "Settings/Menu/Stickers"), action: {
|
items[.peerDataSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemStickerPack, label: .text(cachedData.stickerPack?.title ?? presentationData.strings.GroupInfo_SharedMediaNone), text: presentationData.strings.Stickers_GroupStickers, icon: UIImage(bundleImageName: "Settings/Menu/Stickers"), action: {
|
||||||
interaction.editingOpenStickerPackSetup()
|
interaction.editingOpenStickerPackSetup()
|
||||||
@ -1850,7 +1850,6 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
|
|||||||
interaction.editingOpenPreHistorySetup()
|
interaction.editingOpenPreHistorySetup()
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
||||||
let label: String
|
let label: String
|
||||||
if let cachedData = data.cachedData as? CachedGroupData, case let .known(allowedReactions) = cachedData.allowedReactions {
|
if let cachedData = data.cachedData as? CachedGroupData, case let .known(allowedReactions) = cachedData.allowedReactions {
|
||||||
switch allowedReactions {
|
switch allowedReactions {
|
||||||
|
@ -376,6 +376,19 @@ private func refreshTextMentions(text: NSString, initialAttributedText: NSAttrib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private let textUrlEdgeCharacters: CharacterSet = {
|
||||||
|
var set: CharacterSet = .alphanumerics
|
||||||
|
set.formUnion(.symbols)
|
||||||
|
set.formUnion(.punctuationCharacters)
|
||||||
|
return set
|
||||||
|
}()
|
||||||
|
|
||||||
|
private let textUrlCharacters: CharacterSet = {
|
||||||
|
var set: CharacterSet = textUrlEdgeCharacters
|
||||||
|
set.formUnion(.whitespacesAndNewlines)
|
||||||
|
return set
|
||||||
|
}()
|
||||||
|
|
||||||
private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributedString, attributedText: NSMutableAttributedString, fullRange: NSRange) {
|
private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributedString, attributedText: NSMutableAttributedString, fullRange: NSRange) {
|
||||||
var textUrlRanges: [(NSRange, ChatTextInputTextUrlAttribute)] = []
|
var textUrlRanges: [(NSRange, ChatTextInputTextUrlAttribute)] = []
|
||||||
initialAttributedText.enumerateAttribute(ChatTextInputAttributes.textUrl, in: fullRange, options: [], using: { value, range, _ in
|
initialAttributedText.enumerateAttribute(ChatTextInputAttributes.textUrl, in: fullRange, options: [], using: { value, range, _ in
|
||||||
@ -392,7 +405,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||||||
var validLower = range.lowerBound
|
var validLower = range.lowerBound
|
||||||
inner1: for i in range.lowerBound ..< range.upperBound {
|
inner1: for i in range.lowerBound ..< range.upperBound {
|
||||||
if let c = UnicodeScalar(text.character(at: i)) {
|
if let c = UnicodeScalar(text.character(at: i)) {
|
||||||
if alphanumericCharacters.contains(c) || c == " " as UnicodeScalar {
|
if textUrlCharacters.contains(c) {
|
||||||
validLower = i
|
validLower = i
|
||||||
break inner1
|
break inner1
|
||||||
}
|
}
|
||||||
@ -403,7 +416,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||||||
var validUpper = range.upperBound
|
var validUpper = range.upperBound
|
||||||
inner2: for i in (validLower ..< range.upperBound).reversed() {
|
inner2: for i in (validLower ..< range.upperBound).reversed() {
|
||||||
if let c = UnicodeScalar(text.character(at: i)) {
|
if let c = UnicodeScalar(text.character(at: i)) {
|
||||||
if alphanumericCharacters.contains(c) || c == " " as UnicodeScalar {
|
if textUrlCharacters.contains(c) {
|
||||||
validUpper = i + 1
|
validUpper = i + 1
|
||||||
break inner2
|
break inner2
|
||||||
}
|
}
|
||||||
@ -415,7 +428,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||||||
let minLower = (i == 0) ? fullRange.lowerBound : textUrlRanges[i - 1].0.upperBound
|
let minLower = (i == 0) ? fullRange.lowerBound : textUrlRanges[i - 1].0.upperBound
|
||||||
inner3: for i in (minLower ..< validLower).reversed() {
|
inner3: for i in (minLower ..< validLower).reversed() {
|
||||||
if let c = UnicodeScalar(text.character(at: i)) {
|
if let c = UnicodeScalar(text.character(at: i)) {
|
||||||
if alphanumericCharacters.contains(c) {
|
if textUrlEdgeCharacters.contains(c) {
|
||||||
validLower = i
|
validLower = i
|
||||||
} else {
|
} else {
|
||||||
break inner3
|
break inner3
|
||||||
@ -428,7 +441,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||||||
let maxUpper = (i == textUrlRanges.count - 1) ? fullRange.upperBound : textUrlRanges[i + 1].0.lowerBound
|
let maxUpper = (i == textUrlRanges.count - 1) ? fullRange.upperBound : textUrlRanges[i + 1].0.lowerBound
|
||||||
inner3: for i in validUpper ..< maxUpper {
|
inner3: for i in validUpper ..< maxUpper {
|
||||||
if let c = UnicodeScalar(text.character(at: i)) {
|
if let c = UnicodeScalar(text.character(at: i)) {
|
||||||
if alphanumericCharacters.contains(c) {
|
if textUrlEdgeCharacters.contains(c) {
|
||||||
validUpper = i + 1
|
validUpper = i + 1
|
||||||
} else {
|
} else {
|
||||||
break inner3
|
break inner3
|
||||||
@ -450,7 +463,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||||||
var combine = true
|
var combine = true
|
||||||
inner: for j in textUrlRanges[i].0.upperBound ..< textUrlRanges[i + 1].0.lowerBound {
|
inner: for j in textUrlRanges[i].0.upperBound ..< textUrlRanges[i + 1].0.lowerBound {
|
||||||
if let c = UnicodeScalar(text.character(at: j)) {
|
if let c = UnicodeScalar(text.character(at: j)) {
|
||||||
if alphanumericCharacters.contains(c) || c == " " as UnicodeScalar {
|
if textUrlCharacters.contains(c) {
|
||||||
} else {
|
} else {
|
||||||
combine = false
|
combine = false
|
||||||
break inner
|
break inner
|
||||||
|
Loading…
x
Reference in New Issue
Block a user