mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Merge commit 'e52134993a' into beta
This commit is contained in:
commit
d8efc7c865
6 changed files with 55 additions and 11 deletions
|
|
@ -78,7 +78,11 @@ public final class GiftAuctionContext {
|
|||
public let gift: StarGift
|
||||
|
||||
public var isActive: Bool {
|
||||
return myState?.bidAmount != nil
|
||||
if case .finished = auctionState {
|
||||
return false
|
||||
} else {
|
||||
return myState?.bidAmount != nil
|
||||
}
|
||||
}
|
||||
|
||||
private let disposable = MetaDisposable()
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ let collageGrids: [Camera.CollageGrid] = [
|
|||
Camera.CollageGrid(rows: [Camera.CollageGrid.Row(columns: 2), Camera.CollageGrid.Row(columns: 2), Camera.CollageGrid.Row(columns: 2)])
|
||||
]
|
||||
|
||||
enum CameraMode: Equatable {
|
||||
enum CameraMode: Int32, Equatable {
|
||||
case photo
|
||||
case video
|
||||
case live
|
||||
|
|
@ -318,6 +318,7 @@ private final class CameraScreenComponent: CombinedComponent {
|
|||
|
||||
fileprivate var sendAsPeerId: EnginePeer.Id?
|
||||
fileprivate var isCustomTarget = false
|
||||
fileprivate var canLivestream = true
|
||||
|
||||
private var privacy: EngineStoryPrivacy = EngineStoryPrivacy(base: .everyone, additionallyIncludePeers: [])
|
||||
private var allowComments = true
|
||||
|
|
@ -388,6 +389,17 @@ private final class CameraScreenComponent: CombinedComponent {
|
|||
if let customTarget = controller.customTarget {
|
||||
self.sendAsPeerId = customTarget
|
||||
self.isCustomTarget = true
|
||||
|
||||
let _ = (self.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: customTarget))
|
||||
|> deliverOnMainQueue).start(next: { [weak self] peer in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
if case let .channel(channel) = peer, case .group = channel.info {
|
||||
self.canLivestream = false
|
||||
self.updated()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
let _ = (mediaEditorStoredState(engine: self.context.engine)
|
||||
|
|
@ -2091,7 +2103,7 @@ private final class CameraScreenComponent: CombinedComponent {
|
|||
}
|
||||
|
||||
var availableModes: [CameraMode] = [.photo, .video]
|
||||
if !isTablet {
|
||||
if !isTablet && state.canLivestream {
|
||||
availableModes.append(.live)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ final class ModeComponent: Component {
|
|||
private var backgroundView = UIView()
|
||||
private var glassContainerView = GlassBackgroundContainerView()
|
||||
private var selectionView = GlassBackgroundView()
|
||||
private var itemViews: [ItemView] = []
|
||||
private var itemViews: [Int32: ItemView] = [:]
|
||||
|
||||
public func matches(tag: Any) -> Bool {
|
||||
if let component = self.component, let componentTag = component.tag {
|
||||
|
|
@ -179,14 +179,19 @@ final class ModeComponent: Component {
|
|||
var itemFrame = CGRect(origin: isTablet ? .zero : CGPoint(x: inset, y: 0.0), size: buttonSize)
|
||||
var selectedCenter = itemFrame.minX
|
||||
var selectedFrame = itemFrame
|
||||
|
||||
var validKeys: Set<Int32> = Set()
|
||||
for mode in component.availableModes.reversed() {
|
||||
let id = mode.rawValue
|
||||
validKeys.insert(id)
|
||||
|
||||
let itemView: ItemView
|
||||
if self.itemViews.count == i {
|
||||
if let current = self.itemViews[id] {
|
||||
itemView = current
|
||||
} else {
|
||||
itemView = ItemView()
|
||||
self.backgroundView.addSubview(itemView)
|
||||
self.itemViews.append(itemView)
|
||||
} else {
|
||||
itemView = self.itemViews[i]
|
||||
self.itemViews[id] = itemView
|
||||
}
|
||||
itemView.pressed = {
|
||||
updatedMode(mode)
|
||||
|
|
@ -216,6 +221,20 @@ final class ModeComponent: Component {
|
|||
i += 1
|
||||
}
|
||||
|
||||
var removeKeys: [Int32] = []
|
||||
for (id, itemView) in self.itemViews {
|
||||
if !validKeys.contains(id) {
|
||||
removeKeys.append(id)
|
||||
|
||||
transition.setAlpha(view: itemView, alpha: 0.0, completion: { _ in
|
||||
itemView.removeFromSuperview()
|
||||
})
|
||||
}
|
||||
}
|
||||
for id in removeKeys {
|
||||
self.itemViews.removeValue(forKey: id)
|
||||
}
|
||||
|
||||
let totalSize: CGSize
|
||||
let size: CGSize
|
||||
if isTablet {
|
||||
|
|
|
|||
|
|
@ -1940,7 +1940,9 @@ private class QrContentNode: ASDisplayNode, ContentNode {
|
|||
imageSide = 220.0
|
||||
|
||||
if size.width > 375.0 {
|
||||
if textLength > 12 {
|
||||
if textLength > 18 {
|
||||
fontSize = 16.0
|
||||
} else if textLength > 12 {
|
||||
fontSize = 22.0
|
||||
} else {
|
||||
fontSize = 24.0
|
||||
|
|
|
|||
|
|
@ -1058,7 +1058,7 @@ public class NewContactScreen: ViewControllerComponentContainer {
|
|||
fileprivate func complete(result: NewContactScreenComponent.Result) {
|
||||
let entities = generateChatInputTextEntities(result.note)
|
||||
if let peer = result.peer {
|
||||
let _ = self.context.engine.contacts.addContactInteractively(
|
||||
let _ = (self.context.engine.contacts.addContactInteractively(
|
||||
peerId: peer.id,
|
||||
firstName: result.firstName,
|
||||
lastName: result.lastName,
|
||||
|
|
@ -1066,7 +1066,7 @@ public class NewContactScreen: ViewControllerComponentContainer {
|
|||
noteText: result.note.string,
|
||||
noteEntities: entities,
|
||||
addToPrivacyExceptions: result.addToPrivacyExceptions
|
||||
).startStandalone(completed: { [weak self] in
|
||||
) |> deliverOnMainQueue).startStandalone(completed: { [weak self] in
|
||||
if !result.syncContactToPhone {
|
||||
self?.completion(result.peer, nil, nil)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,6 +101,13 @@ public extension ShareWithPeersScreen {
|
|||
|
||||
switch subject {
|
||||
case let .peers(peers, _):
|
||||
let peers = peers.filter { peer in
|
||||
if liveStream, case let .channel(channel) = peer, case .group = channel.info {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
self.stateDisposable = (.single(peers)
|
||||
|> mapToSignal { peers -> Signal<([EnginePeer], [EnginePeer.Id: Optional<Int>]), NoError> in
|
||||
return context.engine.data.subscribe(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue