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
ba599ffd32
commit
4b51b8c1ad
@ -170,14 +170,14 @@ public final class SheetComponent<ChildEnvironmentType: Equatable>: Component {
|
|||||||
let transition = ContainedViewLayoutTransition.animated(duration: 0.35, curve: .customSpring(damping: 124.0, initialVelocity: initialVelocity))
|
let transition = ContainedViewLayoutTransition.animated(duration: 0.35, curve: .customSpring(damping: 124.0, initialVelocity: initialVelocity))
|
||||||
|
|
||||||
let contentOffset = (self.scrollView.contentOffset.y + self.scrollView.contentInset.top - self.scrollView.contentSize.height) * -1.0
|
let contentOffset = (self.scrollView.contentOffset.y + self.scrollView.contentInset.top - self.scrollView.contentSize.height) * -1.0
|
||||||
let dismissalOffset = self.scrollView.contentSize.height
|
let dismissalOffset = self.scrollView.contentSize.height + abs(self.contentView.frame.minY)
|
||||||
let delta = dismissalOffset - contentOffset
|
let delta = dismissalOffset - contentOffset
|
||||||
|
|
||||||
transition.updatePosition(layer: self.scrollView.layer, position: CGPoint(x: self.scrollView.center.x, y: self.scrollView.center.y + delta), completion: { _ in
|
transition.updatePosition(layer: self.scrollView.layer, position: CGPoint(x: self.scrollView.center.x, y: self.scrollView.center.y + delta), completion: { _ in
|
||||||
completion()
|
completion()
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
self.scrollView.layer.animatePosition(from: CGPoint(), to: CGPoint(x: 0.0, y: self.scrollView.contentSize.height), duration: 0.25, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, removeOnCompletion: false, additive: true, completion: { _ in
|
self.scrollView.layer.animatePosition(from: CGPoint(), to: CGPoint(x: 0.0, y: self.scrollView.contentSize.height + abs(self.contentView.frame.minY)), duration: 0.25, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, removeOnCompletion: false, additive: true, completion: { _ in
|
||||||
completion()
|
completion()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -223,8 +223,9 @@ public final class SheetComponent<ChildEnvironmentType: Equatable>: Component {
|
|||||||
self.ignoreScrolling = true
|
self.ignoreScrolling = true
|
||||||
|
|
||||||
if sheetEnvironment.isCentered {
|
if sheetEnvironment.isCentered {
|
||||||
transition.setFrame(view: self.contentView, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((availableSize.width - contentSize.width) / 2.0), y: 0.0), size: contentSize), completion: nil)
|
let y: CGFloat = floorToScreenPixels((availableSize.height - contentSize.height) / 2.0)
|
||||||
transition.setFrame(view: self.backgroundView, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((availableSize.width - contentSize.width) / 2.0), y: floorToScreenPixels((availableSize.height - contentSize.height) / 2.0)), size: contentSize), completion: nil)
|
transition.setFrame(view: self.contentView, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((availableSize.width - contentSize.width) / 2.0), y: -y), size: contentSize), completion: nil)
|
||||||
|
transition.setFrame(view: self.backgroundView, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((availableSize.width - contentSize.width) / 2.0), y: -y), size: contentSize), completion: nil)
|
||||||
} else {
|
} else {
|
||||||
transition.setFrame(view: self.contentView, frame: CGRect(origin: .zero, size: contentSize), completion: nil)
|
transition.setFrame(view: self.contentView, frame: CGRect(origin: .zero, size: contentSize), completion: nil)
|
||||||
transition.setFrame(view: self.backgroundView, frame: CGRect(origin: .zero, size: CGSize(width: contentSize.width, height: contentSize.height + 1000.0)), completion: nil)
|
transition.setFrame(view: self.backgroundView, frame: CGRect(origin: .zero, size: CGSize(width: contentSize.width, height: contentSize.height + 1000.0)), completion: nil)
|
||||||
|
@ -871,7 +871,19 @@ private func channelVisibilityControllerEntries(presentationData: PresentationDa
|
|||||||
} else if let peer = view.peers[view.peerId] as? TelegramGroup {
|
} else if let peer = view.peers[view.peerId] as? TelegramGroup {
|
||||||
if case .revokeNames = mode {
|
if case .revokeNames = mode {
|
||||||
let count = Int32(publicChannelsToRevoke?.count ?? 0)
|
let count = Int32(publicChannelsToRevoke?.count ?? 0)
|
||||||
entries.append(.linksLimitInfo(presentationData.theme, presentationData.strings.Group_Username_RemoveExistingUsernamesOrExtendInfo("\(premiumLimits.maxPublicLinksCount)").string, count, limits.maxPublicLinksCount, premiumLimits.maxPublicLinksCount, isPremiumDisabled))
|
|
||||||
|
let text: String
|
||||||
|
if count >= premiumLimits.maxPublicLinksCount {
|
||||||
|
text = presentationData.strings.Group_Username_RemoveExistingUsernamesFinalInfo
|
||||||
|
} else {
|
||||||
|
if isPremiumDisabled {
|
||||||
|
text = presentationData.strings.Group_Username_RemoveExistingUsernamesNoPremiumInfo
|
||||||
|
} else {
|
||||||
|
text = presentationData.strings.Group_Username_RemoveExistingUsernamesOrExtendInfo("\(premiumLimits.maxPublicLinksCount)").string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entries.append(.linksLimitInfo(presentationData.theme, text, count, limits.maxPublicLinksCount, premiumLimits.maxPublicLinksCount, isPremiumDisabled))
|
||||||
|
|
||||||
if let publicChannelsToRevoke = publicChannelsToRevoke {
|
if let publicChannelsToRevoke = publicChannelsToRevoke {
|
||||||
var index: Int32 = 0
|
var index: Int32 = 0
|
||||||
|
@ -1027,10 +1027,13 @@ private final class DemoSheetContent: CombinedComponent {
|
|||||||
)
|
)
|
||||||
|
|
||||||
let bottomPanelPadding: CGFloat = 12.0
|
let bottomPanelPadding: CGFloat = 12.0
|
||||||
let bottomInset: CGFloat = environment.safeInsets.bottom > 0.0 ? environment.safeInsets.bottom + 5.0 : bottomPanelPadding
|
let bottomInset: CGFloat
|
||||||
let contentSize = CGSize(width: context.availableSize.width, height: buttonFrame.maxY + bottomInset)
|
if case .regular = environment.metrics.widthClass {
|
||||||
|
bottomInset = bottomPanelPadding
|
||||||
return contentSize
|
} else {
|
||||||
|
bottomInset = environment.safeInsets.bottom > 0.0 ? environment.safeInsets.bottom + 5.0 : bottomPanelPadding
|
||||||
|
}
|
||||||
|
return CGSize(width: context.availableSize.width, height: buttonFrame.maxY + bottomInset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1071,7 +1074,7 @@ private final class DemoSheetComponent: CombinedComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static var body: Body {
|
static var body: Body {
|
||||||
let sheet = Child(SheetComponent<EnvironmentType>.self)
|
let sheet = Child(SheetComponent<(EnvironmentType)>.self)
|
||||||
let animateOut = StoredActionSlot(Action<Void>.self)
|
let animateOut = StoredActionSlot(Action<Void>.self)
|
||||||
|
|
||||||
return { context in
|
return { context in
|
||||||
|
@ -16,8 +16,9 @@ extension BotMenuButton {
|
|||||||
extension BotInfo {
|
extension BotInfo {
|
||||||
convenience init(apiBotInfo: Api.BotInfo) {
|
convenience init(apiBotInfo: Api.BotInfo) {
|
||||||
switch apiBotInfo {
|
switch apiBotInfo {
|
||||||
case let .botInfo(_, _, description, descriptionPhoto, _, apiCommands, apiMenuButton):
|
case let .botInfo(_, _, description, descriptionPhoto, descriptionDocument, apiCommands, apiMenuButton):
|
||||||
let photo: TelegramMediaImage? = descriptionPhoto.flatMap(telegramMediaImageFromApiPhoto)
|
let photo: TelegramMediaImage? = descriptionPhoto.flatMap(telegramMediaImageFromApiPhoto)
|
||||||
|
let video: TelegramMediaFile? = descriptionDocument.flatMap { telegramMediaFileFromApiDocument($0, noPremium: false) }
|
||||||
var commands: [BotCommand] = []
|
var commands: [BotCommand] = []
|
||||||
if let apiCommands = apiCommands {
|
if let apiCommands = apiCommands {
|
||||||
commands = apiCommands.map { command in
|
commands = apiCommands.map { command in
|
||||||
@ -31,7 +32,7 @@ extension BotInfo {
|
|||||||
if let apiMenuButton = apiMenuButton {
|
if let apiMenuButton = apiMenuButton {
|
||||||
menuButton = BotMenuButton(apiBotMenuButton: apiMenuButton)
|
menuButton = BotMenuButton(apiBotMenuButton: apiMenuButton)
|
||||||
}
|
}
|
||||||
self.init(description: description ?? "", photo: photo, commands: commands, menuButton: menuButton)
|
self.init(description: description ?? "", photo: photo, video: video, commands: commands, menuButton: menuButton)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1470,14 +1470,14 @@ private func finalStateWithUpdatesAndServerTime(postbox: Postbox, network: Netwo
|
|||||||
updatedState.updateCachedPeerData(peer.peerId, { current in
|
updatedState.updateCachedPeerData(peer.peerId, { current in
|
||||||
if peer.peerId.namespace == Namespaces.Peer.CloudUser, let previous = current as? CachedUserData {
|
if peer.peerId.namespace == Namespaces.Peer.CloudUser, let previous = current as? CachedUserData {
|
||||||
if let botInfo = previous.botInfo {
|
if let botInfo = previous.botInfo {
|
||||||
return previous.withUpdatedBotInfo(BotInfo(description: botInfo.description, photo: botInfo.photo, commands: commands, menuButton: botInfo.menuButton))
|
return previous.withUpdatedBotInfo(BotInfo(description: botInfo.description, photo: botInfo.photo, video: botInfo.video, commands: commands, menuButton: botInfo.menuButton))
|
||||||
}
|
}
|
||||||
} else if peer.peerId.namespace == Namespaces.Peer.CloudGroup, let previous = current as? CachedGroupData {
|
} else if peer.peerId.namespace == Namespaces.Peer.CloudGroup, let previous = current as? CachedGroupData {
|
||||||
if let index = previous.botInfos.firstIndex(where: { $0.peerId == botPeerId }) {
|
if let index = previous.botInfos.firstIndex(where: { $0.peerId == botPeerId }) {
|
||||||
var updatedBotInfos = previous.botInfos
|
var updatedBotInfos = previous.botInfos
|
||||||
let previousBotInfo = updatedBotInfos[index]
|
let previousBotInfo = updatedBotInfos[index]
|
||||||
updatedBotInfos.remove(at: index)
|
updatedBotInfos.remove(at: index)
|
||||||
updatedBotInfos.insert(CachedPeerBotInfo(peerId: botPeerId, botInfo: BotInfo(description: previousBotInfo.botInfo.description, photo: previousBotInfo.botInfo.photo, commands: commands, menuButton: previousBotInfo.botInfo.menuButton)), at: index)
|
updatedBotInfos.insert(CachedPeerBotInfo(peerId: botPeerId, botInfo: BotInfo(description: previousBotInfo.botInfo.description, photo: previousBotInfo.botInfo.photo, video: previousBotInfo.botInfo.video, commands: commands, menuButton: previousBotInfo.botInfo.menuButton)), at: index)
|
||||||
return previous.withUpdatedBotInfos(updatedBotInfos)
|
return previous.withUpdatedBotInfos(updatedBotInfos)
|
||||||
}
|
}
|
||||||
} else if peer.peerId.namespace == Namespaces.Peer.CloudChannel, let previous = current as? CachedChannelData {
|
} else if peer.peerId.namespace == Namespaces.Peer.CloudChannel, let previous = current as? CachedChannelData {
|
||||||
@ -1485,7 +1485,7 @@ private func finalStateWithUpdatesAndServerTime(postbox: Postbox, network: Netwo
|
|||||||
var updatedBotInfos = previous.botInfos
|
var updatedBotInfos = previous.botInfos
|
||||||
let previousBotInfo = updatedBotInfos[index]
|
let previousBotInfo = updatedBotInfos[index]
|
||||||
updatedBotInfos.remove(at: index)
|
updatedBotInfos.remove(at: index)
|
||||||
updatedBotInfos.insert(CachedPeerBotInfo(peerId: botPeerId, botInfo: BotInfo(description: previousBotInfo.botInfo.description, photo: previousBotInfo.botInfo.photo, commands: commands, menuButton: previousBotInfo.botInfo.menuButton)), at: index)
|
updatedBotInfos.insert(CachedPeerBotInfo(peerId: botPeerId, botInfo: BotInfo(description: previousBotInfo.botInfo.description, photo: previousBotInfo.botInfo.photo, video: previousBotInfo.botInfo.video, commands: commands, menuButton: previousBotInfo.botInfo.menuButton)), at: index)
|
||||||
return previous.withUpdatedBotInfos(updatedBotInfos)
|
return previous.withUpdatedBotInfos(updatedBotInfos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1497,7 +1497,7 @@ private func finalStateWithUpdatesAndServerTime(postbox: Postbox, network: Netwo
|
|||||||
updatedState.updateCachedPeerData(botPeerId, { current in
|
updatedState.updateCachedPeerData(botPeerId, { current in
|
||||||
if let previous = current as? CachedUserData {
|
if let previous = current as? CachedUserData {
|
||||||
if let botInfo = previous.botInfo {
|
if let botInfo = previous.botInfo {
|
||||||
return previous.withUpdatedBotInfo(BotInfo(description: botInfo.description, photo: botInfo.photo, commands: botInfo.commands, menuButton: menuButton))
|
return previous.withUpdatedBotInfo(BotInfo(description: botInfo.description, photo: botInfo.photo, video: botInfo.video, commands: botInfo.commands, menuButton: menuButton))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return current
|
return current
|
||||||
|
@ -48,12 +48,14 @@ public enum BotMenuButton: PostboxCoding, Hashable {
|
|||||||
public final class BotInfo: PostboxCoding, Equatable {
|
public final class BotInfo: PostboxCoding, Equatable {
|
||||||
public let description: String
|
public let description: String
|
||||||
public let photo: TelegramMediaImage?
|
public let photo: TelegramMediaImage?
|
||||||
|
public let video: TelegramMediaFile?
|
||||||
public let commands: [BotCommand]
|
public let commands: [BotCommand]
|
||||||
public let menuButton: BotMenuButton
|
public let menuButton: BotMenuButton
|
||||||
|
|
||||||
public init(description: String, photo: TelegramMediaImage?, commands: [BotCommand], menuButton: BotMenuButton) {
|
public init(description: String, photo: TelegramMediaImage?, video: TelegramMediaFile?, commands: [BotCommand], menuButton: BotMenuButton) {
|
||||||
self.description = description
|
self.description = description
|
||||||
self.photo = photo
|
self.photo = photo
|
||||||
|
self.video = video
|
||||||
self.commands = commands
|
self.commands = commands
|
||||||
self.menuButton = menuButton
|
self.menuButton = menuButton
|
||||||
}
|
}
|
||||||
@ -65,6 +67,11 @@ public final class BotInfo: PostboxCoding, Equatable {
|
|||||||
} else {
|
} else {
|
||||||
self.photo = nil
|
self.photo = nil
|
||||||
}
|
}
|
||||||
|
if let video = decoder.decodeObjectForKey("vid", decoder: { TelegramMediaFile(decoder: $0) }) as? TelegramMediaFile {
|
||||||
|
self.video = video
|
||||||
|
} else {
|
||||||
|
self.video = nil
|
||||||
|
}
|
||||||
self.commands = decoder.decodeObjectArrayWithDecoderForKey("c")
|
self.commands = decoder.decodeObjectArrayWithDecoderForKey("c")
|
||||||
self.menuButton = (decoder.decodeObjectForKey("b", decoder: { BotMenuButton(decoder: $0) }) as? BotMenuButton) ?? .commands
|
self.menuButton = (decoder.decodeObjectForKey("b", decoder: { BotMenuButton(decoder: $0) }) as? BotMenuButton) ?? .commands
|
||||||
}
|
}
|
||||||
@ -76,11 +83,16 @@ public final class BotInfo: PostboxCoding, Equatable {
|
|||||||
} else {
|
} else {
|
||||||
encoder.encodeNil(forKey: "ph")
|
encoder.encodeNil(forKey: "ph")
|
||||||
}
|
}
|
||||||
|
if let video = self.video {
|
||||||
|
encoder.encodeObject(video, forKey: "vid")
|
||||||
|
} else {
|
||||||
|
encoder.encodeNil(forKey: "vid")
|
||||||
|
}
|
||||||
encoder.encodeObjectArray(self.commands, forKey: "c")
|
encoder.encodeObjectArray(self.commands, forKey: "c")
|
||||||
encoder.encodeObject(self.menuButton, forKey: "b")
|
encoder.encodeObject(self.menuButton, forKey: "b")
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func ==(lhs: BotInfo, rhs: BotInfo) -> Bool {
|
public static func ==(lhs: BotInfo, rhs: BotInfo) -> Bool {
|
||||||
return lhs.description == rhs.description && lhs.commands == rhs.commands && lhs.menuButton == rhs.menuButton
|
return lhs.description == rhs.description && lhs.commands == rhs.commands && lhs.menuButton == rhs.menuButton && lhs.photo != rhs.photo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ public struct Namespaces {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public struct ItemCollection {
|
public struct ItemCollection {
|
||||||
public static let CloudStickerPacks: Int32 = 0
|
public static let CloudStickerPacks: Int32 = 7
|
||||||
public static let CloudMaskPacks: Int32 = 1
|
public static let CloudMaskPacks: Int32 = 1
|
||||||
public static let EmojiKeywords: Int32 = 2
|
public static let EmojiKeywords: Int32 = 2
|
||||||
public static let CloudAnimatedEmoji: Int32 = 3
|
public static let CloudAnimatedEmoji: Int32 = 3
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"app": "8.8",
|
"app": "8.8.1",
|
||||||
"bazel": "5.1.0",
|
"bazel": "5.1.0",
|
||||||
"xcode": "13.4.1"
|
"xcode": "13.4.1"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user