mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 09:20:08 +00:00
Merge commit 'b920e3e2c9307a2cc7fd4bbd6816baf42f19601f'
This commit is contained in:
commit
ea4db44aff
@ -1089,8 +1089,14 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
|
|||||||
self.ready.set(self.chatListDisplayNode.containerNode.ready)
|
self.ready.set(self.chatListDisplayNode.containerNode.ready)
|
||||||
|
|
||||||
self.displayNodeDidLoad()
|
self.displayNodeDidLoad()
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func displayNodeDidLoad() {
|
||||||
|
super.displayNodeDidLoad()
|
||||||
|
|
||||||
self.prepareRandomGreetingSticker()
|
Queue.mainQueue().after(1.0) {
|
||||||
|
self.prepareRandomGreetingSticker()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override public func viewDidAppear(_ animated: Bool) {
|
override public func viewDidAppear(_ animated: Bool) {
|
||||||
|
|||||||
@ -26,6 +26,7 @@ import GalleryData
|
|||||||
import AppBundle
|
import AppBundle
|
||||||
import ShimmerEffect
|
import ShimmerEffect
|
||||||
import ChatListSearchRecentPeersNode
|
import ChatListSearchRecentPeersNode
|
||||||
|
import UndoUI
|
||||||
|
|
||||||
private enum ChatListRecentEntryStableId: Hashable {
|
private enum ChatListRecentEntryStableId: Hashable {
|
||||||
case topPeers
|
case topPeers
|
||||||
@ -1750,6 +1751,35 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
strongSelf.context.sharedContext.mediaManager.playlistControl(.setBaseRate(baseRate), type: type)
|
strongSelf.context.sharedContext.mediaManager.playlistControl(.setBaseRate(baseRate), type: type)
|
||||||
|
|
||||||
|
if let controller = strongSelf.navigationController?.topViewController as? ViewController {
|
||||||
|
var hasTooltip = false
|
||||||
|
controller.forEachController({ controller in
|
||||||
|
if let controller = controller as? UndoOverlayController {
|
||||||
|
hasTooltip = true
|
||||||
|
controller.dismissWithCommitAction()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
let slowdown = baseRate == .x1
|
||||||
|
controller.present(
|
||||||
|
UndoOverlayController(
|
||||||
|
presentationData: presentationData,
|
||||||
|
content: .audioRate(
|
||||||
|
slowdown: slowdown,
|
||||||
|
text: slowdown ? presentationData.strings.Conversation_AudioRateTooltipNormal : presentationData.strings.Conversation_AudioRateTooltipSpeedUp
|
||||||
|
),
|
||||||
|
elevatedLayout: false,
|
||||||
|
animateInAsReplacement: hasTooltip,
|
||||||
|
action: { action in
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
),
|
||||||
|
in: .current
|
||||||
|
)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
mediaAccessoryPanel.togglePlayPause = { [weak self] in
|
mediaAccessoryPanel.togglePlayPause = { [weak self] in
|
||||||
|
|||||||
@ -691,7 +691,7 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
|
|||||||
let slowdown = baseRate == .x1
|
let slowdown = baseRate == .x1
|
||||||
strongSelf.present(
|
strongSelf.present(
|
||||||
UndoOverlayController(
|
UndoOverlayController(
|
||||||
presentationData: strongSelf.presentationData,
|
presentationData: presentationData,
|
||||||
content: .audioRate(
|
content: .audioRate(
|
||||||
slowdown: slowdown,
|
slowdown: slowdown,
|
||||||
text: slowdown ? presentationData.strings.Conversation_AudioRateTooltipNormal : presentationData.strings.Conversation_AudioRateTooltipSpeedUp
|
text: slowdown ? presentationData.strings.Conversation_AudioRateTooltipNormal : presentationData.strings.Conversation_AudioRateTooltipSpeedUp
|
||||||
|
|||||||
@ -64,6 +64,8 @@ final class PeerInfoGroupsInCommonPaneNode: ASDisplayNode, PeerInfoPaneNode {
|
|||||||
private let openPeerContextAction: (Peer, ASDisplayNode, ContextGesture?) -> Void
|
private let openPeerContextAction: (Peer, ASDisplayNode, ContextGesture?) -> Void
|
||||||
private let groupsInCommonContext: GroupsInCommonContext
|
private let groupsInCommonContext: GroupsInCommonContext
|
||||||
|
|
||||||
|
weak var parentController: ViewController?
|
||||||
|
|
||||||
private let listNode: ListView
|
private let listNode: ListView
|
||||||
private var state: GroupsInCommonState?
|
private var state: GroupsInCommonState?
|
||||||
private var currentEntries: [GroupsInCommonListEntry] = []
|
private var currentEntries: [GroupsInCommonListEntry] = []
|
||||||
|
|||||||
@ -14,12 +14,15 @@ import UniversalMediaPlayer
|
|||||||
import TelegramBaseController
|
import TelegramBaseController
|
||||||
import OverlayStatusController
|
import OverlayStatusController
|
||||||
import ListMessageItem
|
import ListMessageItem
|
||||||
|
import UndoUI
|
||||||
|
|
||||||
final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode {
|
final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode {
|
||||||
private let context: AccountContext
|
private let context: AccountContext
|
||||||
private let peerId: PeerId
|
private let peerId: PeerId
|
||||||
private let chatControllerInteraction: ChatControllerInteraction
|
private let chatControllerInteraction: ChatControllerInteraction
|
||||||
|
|
||||||
|
weak var parentController: ViewController?
|
||||||
|
|
||||||
private let listNode: ChatHistoryListNode
|
private let listNode: ChatHistoryListNode
|
||||||
|
|
||||||
private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData)?
|
private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData)?
|
||||||
@ -232,6 +235,35 @@ final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
strongSelf.context.sharedContext.mediaManager.playlistControl(.setBaseRate(baseRate), type: type)
|
strongSelf.context.sharedContext.mediaManager.playlistControl(.setBaseRate(baseRate), type: type)
|
||||||
|
|
||||||
|
if let controller = strongSelf.parentController {
|
||||||
|
var hasTooltip = false
|
||||||
|
controller.forEachController({ controller in
|
||||||
|
if let controller = controller as? UndoOverlayController {
|
||||||
|
hasTooltip = true
|
||||||
|
controller.dismissWithCommitAction()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
let slowdown = baseRate == .x1
|
||||||
|
controller.present(
|
||||||
|
UndoOverlayController(
|
||||||
|
presentationData: presentationData,
|
||||||
|
content: .audioRate(
|
||||||
|
slowdown: slowdown,
|
||||||
|
text: slowdown ? presentationData.strings.Conversation_AudioRateTooltipNormal : presentationData.strings.Conversation_AudioRateTooltipSpeedUp
|
||||||
|
),
|
||||||
|
elevatedLayout: false,
|
||||||
|
animateInAsReplacement: hasTooltip,
|
||||||
|
action: { action in
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
),
|
||||||
|
in: .current
|
||||||
|
)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
mediaAccessoryPanel.togglePlayPause = { [weak self] in
|
mediaAccessoryPanel.togglePlayPause = { [weak self] in
|
||||||
|
|||||||
@ -104,6 +104,8 @@ final class PeerInfoMembersPaneNode: ASDisplayNode, PeerInfoPaneNode {
|
|||||||
private let membersContext: PeerInfoMembersContext
|
private let membersContext: PeerInfoMembersContext
|
||||||
private let action: (PeerInfoMember, PeerMembersListAction) -> Void
|
private let action: (PeerInfoMember, PeerMembersListAction) -> Void
|
||||||
|
|
||||||
|
weak var parentController: ViewController?
|
||||||
|
|
||||||
private let listNode: ListView
|
private let listNode: ListView
|
||||||
private var currentEntries: [PeerMembersListEntry] = []
|
private var currentEntries: [PeerMembersListEntry] = []
|
||||||
private var enclosingPeer: Peer?
|
private var enclosingPeer: Peer?
|
||||||
|
|||||||
@ -764,6 +764,8 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro
|
|||||||
private let chatControllerInteraction: ChatControllerInteraction
|
private let chatControllerInteraction: ChatControllerInteraction
|
||||||
private let contentType: ContentType
|
private let contentType: ContentType
|
||||||
|
|
||||||
|
weak var parentController: ViewController?
|
||||||
|
|
||||||
private let scrollNode: ASScrollNode
|
private let scrollNode: ASScrollNode
|
||||||
private let floatingHeaderNode: FloatingHeaderNode
|
private let floatingHeaderNode: FloatingHeaderNode
|
||||||
private var flashHeaderDelayTimer: Foundation.Timer?
|
private var flashHeaderDelayTimer: Foundation.Timer?
|
||||||
|
|||||||
@ -13,6 +13,8 @@ import ContextUI
|
|||||||
protocol PeerInfoPaneNode: ASDisplayNode {
|
protocol PeerInfoPaneNode: ASDisplayNode {
|
||||||
var isReady: Signal<Bool, NoError> { get }
|
var isReady: Signal<Bool, NoError> { get }
|
||||||
|
|
||||||
|
var parentController: ViewController? { get set }
|
||||||
|
|
||||||
func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition)
|
func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, isScrollingLockedAtTop: Bool, expandProgress: CGFloat, presentationData: PresentationData, synchronous: Bool, transition: ContainedViewLayoutTransition)
|
||||||
func scrollToTop() -> Bool
|
func scrollToTop() -> Bool
|
||||||
func transferVelocity(_ velocity: CGFloat)
|
func transferVelocity(_ velocity: CGFloat)
|
||||||
@ -375,7 +377,8 @@ private final class PeerInfoPendingPane {
|
|||||||
requestPerformPeerMemberAction: @escaping (PeerInfoMember, PeerMembersListAction) -> Void,
|
requestPerformPeerMemberAction: @escaping (PeerInfoMember, PeerMembersListAction) -> Void,
|
||||||
peerId: PeerId,
|
peerId: PeerId,
|
||||||
key: PeerInfoPaneKey,
|
key: PeerInfoPaneKey,
|
||||||
hasBecomeReady: @escaping (PeerInfoPaneKey) -> Void
|
hasBecomeReady: @escaping (PeerInfoPaneKey) -> Void,
|
||||||
|
parentController: ViewController?
|
||||||
) {
|
) {
|
||||||
let paneNode: PeerInfoPaneNode
|
let paneNode: PeerInfoPaneNode
|
||||||
switch key {
|
switch key {
|
||||||
@ -402,7 +405,7 @@ private final class PeerInfoPendingPane {
|
|||||||
preconditionFailure()
|
preconditionFailure()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
paneNode.parentController = parentController
|
||||||
self.pane = PeerInfoPaneWrapper(key: key, node: paneNode)
|
self.pane = PeerInfoPaneWrapper(key: key, node: paneNode)
|
||||||
self.disposable = (paneNode.isReady
|
self.disposable = (paneNode.isReady
|
||||||
|> take(1)
|
|> take(1)
|
||||||
@ -421,6 +424,8 @@ final class PeerInfoPaneContainerNode: ASDisplayNode, UIGestureRecognizerDelegat
|
|||||||
private let context: AccountContext
|
private let context: AccountContext
|
||||||
private let peerId: PeerId
|
private let peerId: PeerId
|
||||||
|
|
||||||
|
weak var parentController: ViewController?
|
||||||
|
|
||||||
private let coveringBackgroundNode: ASDisplayNode
|
private let coveringBackgroundNode: ASDisplayNode
|
||||||
private let separatorNode: ASDisplayNode
|
private let separatorNode: ASDisplayNode
|
||||||
private let tabsContainerNode: PeerInfoPaneTabsContainerNode
|
private let tabsContainerNode: PeerInfoPaneTabsContainerNode
|
||||||
@ -750,7 +755,8 @@ final class PeerInfoPaneContainerNode: ASDisplayNode, UIGestureRecognizerDelegat
|
|||||||
if leftScope {
|
if leftScope {
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
parentController: self.parentController
|
||||||
)
|
)
|
||||||
self.pendingPanes[key] = pane
|
self.pendingPanes[key] = pane
|
||||||
pane.pane.node.frame = paneFrame
|
pane.pane.node.frame = paneFrame
|
||||||
|
|||||||
@ -1530,6 +1530,8 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
|
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
|
self.paneContainerNode.parentController = controller
|
||||||
|
|
||||||
self._interaction = PeerInfoInteraction(
|
self._interaction = PeerInfoInteraction(
|
||||||
openUsername: { [weak self] value in
|
openUsername: { [weak self] value in
|
||||||
self?.openUsername(value: value)
|
self?.openUsername(value: value)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user