mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
77 lines
3.2 KiB
Swift
77 lines
3.2 KiB
Swift
import Foundation
|
|
import Display
|
|
import TelegramCore
|
|
import SwiftSignalKit
|
|
|
|
public class TelegramController: ViewController {
|
|
private let account: Account
|
|
|
|
private var mediaStatusDisposable: Disposable?
|
|
|
|
private var playlistState: AudioPlaylistState?
|
|
private var mediaAccessoryPanel: MediaNavigationAccessoryPanel?
|
|
|
|
override public var navigationHeight: CGFloat {
|
|
var height = super.navigationHeight
|
|
if let mediaAccessoryPanel = self.mediaAccessoryPanel {
|
|
height += 36.0
|
|
}
|
|
return height
|
|
}
|
|
|
|
init(account: Account) {
|
|
self.account = account
|
|
|
|
super.init(navigationBar: NavigationBar())
|
|
|
|
if let applicationContext = account.applicationContext as? TelegramApplicationContext {
|
|
self.mediaStatusDisposable = (applicationContext.mediaManager.playlistPlayerState
|
|
|> deliverOnMainQueue).start(next: { [weak self] playlistState in
|
|
if let strongSelf = self, strongSelf.playlistState != playlistState {
|
|
strongSelf.playlistState = playlistState
|
|
strongSelf.requestLayout(transition: .animated(duration: 0.4, curve: .spring))
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
deinit {
|
|
self.mediaStatusDisposable?.dispose()
|
|
}
|
|
|
|
required public init(coder aDecoder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
public override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
|
super.containerLayoutUpdated(layout, transition: transition)
|
|
|
|
if let playlistState = playlistState {
|
|
let panelFrame = CGRect(origin: CGPoint(x: 0.0, y: self.navigationBar.frame.maxY), size: CGSize(width: layout.size.width, height: 36.0))
|
|
if let mediaAccessoryPanel = self.mediaAccessoryPanel {
|
|
transition.updateFrame(node: mediaAccessoryPanel, frame: panelFrame)
|
|
mediaAccessoryPanel.updateLayout(size: panelFrame.size, transition: transition)
|
|
} else {
|
|
let mediaAccessoryPanel = MediaNavigationAccessoryPanel()
|
|
mediaAccessoryPanel.close = { [weak self] in
|
|
if let strongSelf = self {
|
|
if let applicationContext = strongSelf.account.applicationContext as? TelegramApplicationContext {
|
|
applicationContext.mediaManager.setPlaylistPlayer(nil)
|
|
}
|
|
}
|
|
}
|
|
mediaAccessoryPanel.frame = panelFrame
|
|
self.displayNode.insertSubnode(mediaAccessoryPanel, belowSubnode: self.navigationBar)
|
|
self.mediaAccessoryPanel = mediaAccessoryPanel
|
|
mediaAccessoryPanel.updateLayout(size: panelFrame.size, transition: .immediate)
|
|
mediaAccessoryPanel.animateIn(transition: transition)
|
|
}
|
|
} else if let mediaAccessoryPanel = self.mediaAccessoryPanel {
|
|
self.mediaAccessoryPanel = nil
|
|
mediaAccessoryPanel.animateOut(transition: transition, completion: { [weak mediaAccessoryPanel] in
|
|
mediaAccessoryPanel?.removeFromSupernode()
|
|
})
|
|
}
|
|
}
|
|
}
|