diff --git a/submodules/TelegramCore/Sources/Network/MultipartFetch.swift b/submodules/TelegramCore/Sources/Network/MultipartFetch.swift index ed54f7c105..ace6e3d072 100644 --- a/submodules/TelegramCore/Sources/Network/MultipartFetch.swift +++ b/submodules/TelegramCore/Sources/Network/MultipartFetch.swift @@ -528,7 +528,11 @@ private final class MultipartFetchManager { if isStory { self.defaultPartSize = 512 * 1024 - self.parallelParts = 4 + if let size, size > self.defaultPartSize { + self.parallelParts = 4 + } else { + self.parallelParts = 1 + } } else if let size = size { if size <= 512 * 1024 { self.defaultPartSize = 16 * 1024 diff --git a/submodules/TelegramCore/Sources/Network/MultiplexedRequestManager.swift b/submodules/TelegramCore/Sources/Network/MultiplexedRequestManager.swift index 25afb12201..b628437270 100644 --- a/submodules/TelegramCore/Sources/Network/MultiplexedRequestManager.swift +++ b/submodules/TelegramCore/Sources/Network/MultiplexedRequestManager.swift @@ -86,10 +86,15 @@ struct NetworkResponseInfo { var networkDuration: Double } +final class RequestManagerPriorityContext { + +} + private final class MultiplexedRequestManagerContext { private let queue: Queue private let takeWorker: (MultiplexedRequestTarget, MediaResourceFetchTag?, Bool) -> Download? + private let priorityContext = RequestManagerPriorityContext() private var queuedRequests: [RequestData] = [] private var nextId: Int32 = 0 @@ -163,9 +168,9 @@ private final class MultiplexedRequestManagerContext { let maxRequestsPerWorker = 3 let maxWorkersPerTarget = 4 - var requestIndex = 0 - while requestIndex < self.queuedRequests.count { - let request = self.queuedRequests[requestIndex] + for request in self.queuedRequests.sorted(by: { lhs, rhs in + return lhs.id < rhs.id + }) { let targetKey = MultiplexedRequestTargetKey(target: request.target, continueInBackground: request.continueInBackground) if self.targetContexts[targetKey] == nil { @@ -228,11 +233,11 @@ private final class MultiplexedRequestManagerContext { } })) - self.queuedRequests.remove(at: requestIndex) + if let requestIndex = self.queuedRequests.firstIndex(where: { $0 === request }) { + self.queuedRequests.remove(at: requestIndex) + } continue } - - requestIndex += 1 } self.checkEmptyContexts() diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift index 1549ac9d4b..acfe30d542 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift @@ -719,7 +719,9 @@ private final class SparseItemGridBindingImpl: SparseItemGridBinding { var duration: Int32? var isMin: Bool = false if let file = selectedMedia as? TelegramMediaFile, !file.isAnimated { - duration = file.duration.flatMap(Int32.init) + if let durationValue = file.duration { + duration = Int32(durationValue) + } isMin = layer.bounds.width < 80.0 } layer.updateDuration(duration: duration, isMin: isMin, minFactor: min(1.0, layer.bounds.height / 74.0)) diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index de5493b9f2..8bf1519d59 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -625,6 +625,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { } var replyMessage: Message? + var replyStory: StoryId? for attribute in item.message.attributes { if let attribute = attribute as? InlineBotMessageAttribute { var inlineBotNameString: String? @@ -651,12 +652,14 @@ class ChatMessageStickerItemNode: ChatMessageItemView { } else { replyMessage = item.message.associatedMessages[replyAttribute.messageId] } + } else if let attribute = attribute as? ReplyStoryAttribute { + replyStory = attribute.storyId } else if let attribute = attribute as? ReplyMarkupMessageAttribute, attribute.flags.contains(.inline), !attribute.rows.isEmpty { replyMarkup = attribute } } - var hasReply = replyMessage != nil + var hasReply = replyMessage != nil || replyStory != nil if case let .peer(peerId) = item.chatLocation, (peerId == replyMessage?.id.peerId || item.message.threadId == 1), let channel = item.message.peers[item.message.id.peerId] as? TelegramChannel, channel.flags.contains(.isForum), item.message.associatedThreadInfo != nil { if let threadId = item.message.threadId, let replyMessage = replyMessage, Int64(replyMessage.id.id) == threadId { hasReply = false @@ -676,14 +679,14 @@ class ChatMessageStickerItemNode: ChatMessageItemView { )) } - if let replyMessage = replyMessage, hasReply { + if hasReply, (replyMessage != nil || replyStory != nil) { replyInfoApply = makeReplyInfoLayout(ChatMessageReplyInfoNode.Arguments( presentationData: item.presentationData, strings: item.presentationData.strings, context: item.context, type: .standalone, message: replyMessage, - story: nil, + story: replyStory, parentMessage: item.message, constrainedSize: CGSize(width: availableWidth, height: CGFloat.greatestFiniteMagnitude), animationCache: item.controllerInteraction.presentationContext.animationCache, @@ -1830,16 +1833,6 @@ class ChatMessageStickerItemNode: ChatMessageItemView { item.controllerInteraction.openMessageContextMenu(item.message, false, self, self.imageNode.frame, nil, nil) } - override func targetReactionView(value: MessageReaction.Reaction) -> UIView? { - if let result = self.reactionButtonsNode?.reactionTargetView(value: value) { - return result - } - if !self.dateAndStatusNode.isHidden { - return self.dateAndStatusNode.reactionView(value: value) - } - return nil - } - override func targetForStoryTransition(id: StoryId) -> UIView? { guard let item = self.item else { return nil @@ -1856,6 +1849,16 @@ class ChatMessageStickerItemNode: ChatMessageItemView { return nil } + override func targetReactionView(value: MessageReaction.Reaction) -> UIView? { + if let result = self.reactionButtonsNode?.reactionTargetView(value: value) { + return result + } + if !self.dateAndStatusNode.isHidden { + return self.dateAndStatusNode.reactionView(value: value) + } + return nil + } + override func contentFrame() -> CGRect { return self.imageNode.frame }