Skip to content

Commit 90b6f24

Browse files
committed
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
2 parents 09bbf8d + 4de499b commit 90b6f24

File tree

6 files changed

+97
-33
lines changed

6 files changed

+97
-33
lines changed

submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2725,6 +2725,8 @@ public final class PresentationGroupCallImpl: PresentationGroupCall {
27252725
if didUpdateInvitedPeers {
27262726
self.invitedPeersValue = updatedInvitedPeers
27272727
}
2728+
2729+
self.messagesContext?.updateSettings(minMessagePrice: stateValue.sendPaidMessageStars ?? 0)
27282730
}))
27292731

27302732
self.isFailedEventDisposable?.dispose()

submodules/TelegramCore/Sources/TelegramEngine/Calls/GroupCalls.swift

Lines changed: 66 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2654,7 +2654,7 @@ public final class GroupCallParticipantsContext {
26542654
if sendPaidMessageStars != nil {
26552655
flags |= 1 << 3
26562656
}
2657-
self.updateMessagesEnabledDisposable.set((self.account.network.request(Api.functions.phone.toggleGroupCallSettings(flags: 1 << 2, call: self.reference.apiInputGroupCall, joinMuted: nil, messagesEnabled: isEnabled ? .boolTrue : .boolFalse, sendPaidMessagesStars: sendPaidMessageStars))
2657+
self.updateMessagesEnabledDisposable.set((self.account.network.request(Api.functions.phone.toggleGroupCallSettings(flags: flags, call: self.reference.apiInputGroupCall, joinMuted: nil, messagesEnabled: isEnabled ? .boolTrue : .boolFalse, sendPaidMessagesStars: sendPaidMessageStars))
26582658
|> deliverOnMainQueue).start(next: { [weak self] updates in
26592659
guard let strongSelf = self else {
26602660
return
@@ -3899,6 +3899,8 @@ public final class GroupCallMessagesContext {
38993899
private var pendingSendStars: (fromPeer: Peer, messageId: Int64, amount: Int64)?
39003900
private var pendingSendStarsTimer: SwiftSignalKit.Timer?
39013901

3902+
private var minMessagePrice: Int64 = 0
3903+
39023904
init(queue: Queue, appConfig: AppConfiguration, account: Account, callId: Int64, reference: InternalGroupCallReference, e2eContext: ConferenceCallE2EContext?, messageLifetime: Int32, isLiveStream: Bool) {
39033905
self.queue = queue
39043906
self.params = LiveChatMessageParams(appConfig: appConfig)
@@ -4039,7 +4041,7 @@ public final class GroupCallMessagesContext {
40394041
existingIds.insert(message.id)
40404042
state.messages.append(message)
40414043
if self.isLiveStream, let paidStars = message.paidStars {
4042-
if message.date + message.lifetime >= currentTime {
4044+
if message.date + message.lifetime >= currentTime && paidStars >= self.minMessagePrice {
40434045
state.pinnedMessages.append(message)
40444046
}
40454047
if let author = message.author {
@@ -4301,7 +4303,7 @@ public final class GroupCallMessagesContext {
43014303
)
43024304
state.messages.append(message)
43034305
if self.isLiveStream {
4304-
if let paidStars {
4306+
if let paidStars, paidStars >= self.minMessagePrice {
43054307
state.pinnedMessages.append(message)
43064308
if let fromPeer {
43074309
Impl.addStateStars(state: &state, peerId: fromPeer.id, isMy: true, amount: paidStars)
@@ -4535,36 +4537,42 @@ public final class GroupCallMessagesContext {
45354537
paidStars: totalAmount
45364538
))
45374539
}
4538-
if let index = state.pinnedMessages.firstIndex(where: { $0.id == Message.Id(space: .local, id: pendingSendStarsValue.messageId) }) {
4539-
let message = state.pinnedMessages[index]
4540-
state.pinnedMessages.remove(at: index)
4541-
state.pinnedMessages.append(Message(
4542-
id: message.id,
4543-
stableId: message.stableId,
4544-
isIncoming: message.isIncoming,
4545-
author: message.author,
4546-
isFromAdmin: isAdmin,
4547-
text: message.text,
4548-
entities: message.entities,
4549-
date: currentTime,
4550-
lifetime: lifetime,
4551-
paidStars: totalAmount
4552-
))
4540+
if totalAmount >= self.minMessagePrice {
4541+
if let index = state.pinnedMessages.firstIndex(where: { $0.id == Message.Id(space: .local, id: pendingSendStarsValue.messageId) }) {
4542+
let message = state.pinnedMessages[index]
4543+
state.pinnedMessages.remove(at: index)
4544+
state.pinnedMessages.append(Message(
4545+
id: message.id,
4546+
stableId: message.stableId,
4547+
isIncoming: message.isIncoming,
4548+
author: message.author,
4549+
isFromAdmin: isAdmin,
4550+
text: message.text,
4551+
entities: message.entities,
4552+
date: currentTime,
4553+
lifetime: lifetime,
4554+
paidStars: totalAmount
4555+
))
4556+
} else {
4557+
let stableId = self.nextStableId
4558+
self.nextStableId += 1
4559+
state.pinnedMessages.append(Message(
4560+
id: Message.Id(space: .local, id: pendingSendStarsValue.messageId),
4561+
stableId: stableId,
4562+
isIncoming: false,
4563+
author: EnginePeer(fromPeer),
4564+
isFromAdmin: isAdmin,
4565+
text: "",
4566+
entities: [],
4567+
date: currentTime,
4568+
lifetime: lifetime,
4569+
paidStars: totalAmount
4570+
))
4571+
}
45534572
} else {
4554-
let stableId = self.nextStableId
4555-
self.nextStableId += 1
4556-
state.pinnedMessages.append(Message(
4557-
id: Message.Id(space: .local, id: pendingSendStarsValue.messageId),
4558-
stableId: stableId,
4559-
isIncoming: false,
4560-
author: EnginePeer(fromPeer),
4561-
isFromAdmin: isAdmin,
4562-
text: "",
4563-
entities: [],
4564-
date: currentTime,
4565-
lifetime: lifetime,
4566-
paidStars: totalAmount
4567-
))
4573+
if let index = state.pinnedMessages.firstIndex(where: { $0.id == Message.Id(space: .local, id: pendingSendStarsValue.messageId) }) {
4574+
state.pinnedMessages.remove(at: index)
4575+
}
45684576
}
45694577
}
45704578

@@ -4647,6 +4655,26 @@ public final class GroupCallMessagesContext {
46474655
}
46484656
})
46494657
}
4658+
4659+
func updateSettings(minMessagePrice: Int64) {
4660+
if self.minMessagePrice != minMessagePrice {
4661+
self.minMessagePrice = minMessagePrice
4662+
4663+
var updatedState: State?
4664+
for i in (0 ..< self.state.pinnedMessages.count).reversed() {
4665+
let message = self.state.pinnedMessages[i]
4666+
if let paidStars = message.paidStars, paidStars < minMessagePrice {
4667+
if updatedState == nil {
4668+
updatedState = self.state
4669+
}
4670+
updatedState?.pinnedMessages.remove(at: i)
4671+
}
4672+
}
4673+
if let updatedState {
4674+
self.state = updatedState
4675+
}
4676+
}
4677+
}
46504678
}
46514679

46524680
private let queue: Queue
@@ -4702,6 +4730,12 @@ public final class GroupCallMessagesContext {
47024730
}
47034731
}
47044732

4733+
public func updateSettings(minMessagePrice: Int64) {
4734+
self.impl.with { impl in
4735+
impl.updateSettings(minMessagePrice: minMessagePrice)
4736+
}
4737+
}
4738+
47054739
public static func getStarAmountParamMapping(params: LiveChatMessageParams, value: Int64) -> (period: Int, maxLength: Int, emojiCount: Int, color: Message.Color?) {
47064740
for item in params.paramSets.reversed() {
47074741
if value >= item.minStars {

submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContentLiveChatComponent.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ final class StoryContentLiveChatComponent: Component {
128128
private let pinnedBar = ComponentView<Empty>()
129129

130130
private let listState = AsyncListComponent.ExternalState()
131+
private var isScrollToBottomScheduled: Bool = false
131132
private let list = ComponentView<Empty>()
132133
private let listShadowView: UIView
133134

@@ -536,6 +537,10 @@ final class StoryContentLiveChatComponent: Component {
536537
}
537538
}
538539

540+
func scheduleScrollLiveChatToBottom() {
541+
self.isScrollToBottomScheduled = true
542+
}
543+
539544
func update(component: StoryContentLiveChatComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: ComponentTransition) -> CGSize {
540545
self.isUpdating = true
541546
defer {
@@ -727,6 +732,13 @@ final class StoryContentLiveChatComponent: Component {
727732
listTransition = listTransition.withAnimation(.none)
728733
}
729734

735+
if self.isScrollToBottomScheduled {
736+
self.isScrollToBottomScheduled = false
737+
if let firstItem = listItems.first {
738+
self.listState.resetScrolling(id: firstItem.id)
739+
}
740+
}
741+
730742
let _ = self.list.update(
731743
transition: listTransition,
732744
component: AnyComponent(AsyncListComponent(

submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemContentComponent.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,13 @@ final class StoryItemContentComponent: Component {
3737
let baseRate: Double
3838
let isVideoBuffering: Bool
3939
let isCurrent: Bool
40+
let isUIHidden: Bool
4041
let preferHighQuality: Bool
4142
let isEmbeddedInCamera: Bool
4243
let activateReaction: (UIView, MessageReaction.Reaction) -> Void
4344
let controller: () -> ViewController?
4445

45-
init(context: AccountContext, strings: PresentationStrings, peer: EnginePeer, item: EngineStoryItem, availableReactions: StoryAvailableReactions?, entityFiles: [MediaId: TelegramMediaFile], audioMode: StoryContentItem.AudioMode, baseRate: Double, isVideoBuffering: Bool, isCurrent: Bool, preferHighQuality: Bool, isEmbeddedInCamera: Bool, activateReaction: @escaping (UIView, MessageReaction.Reaction) -> Void, controller: @escaping () -> ViewController?) {
46+
init(context: AccountContext, strings: PresentationStrings, peer: EnginePeer, item: EngineStoryItem, availableReactions: StoryAvailableReactions?, entityFiles: [MediaId: TelegramMediaFile], audioMode: StoryContentItem.AudioMode, baseRate: Double, isVideoBuffering: Bool, isCurrent: Bool, isUIHidden: Bool, preferHighQuality: Bool, isEmbeddedInCamera: Bool, activateReaction: @escaping (UIView, MessageReaction.Reaction) -> Void, controller: @escaping () -> ViewController?) {
4647
self.context = context
4748
self.strings = strings
4849
self.peer = peer
@@ -53,6 +54,7 @@ final class StoryItemContentComponent: Component {
5354
self.baseRate = baseRate
5455
self.isVideoBuffering = isVideoBuffering
5556
self.isCurrent = isCurrent
57+
self.isUIHidden = isUIHidden
5658
self.preferHighQuality = preferHighQuality
5759
self.isEmbeddedInCamera = isEmbeddedInCamera
5860
self.activateReaction = activateReaction
@@ -87,6 +89,9 @@ final class StoryItemContentComponent: Component {
8789
if lhs.isCurrent != rhs.isCurrent {
8890
return false
8991
}
92+
if lhs.isUIHidden != rhs.isUIHidden {
93+
return false
94+
}
9095
if lhs.isEmbeddedInCamera != rhs.isEmbeddedInCamera {
9196
return false
9297
}
@@ -805,6 +810,13 @@ final class StoryItemContentComponent: Component {
805810
restorePictureInPictureImpl = dismissController()
806811
})
807812
}
813+
814+
func scheduleScrollLiveChatToBottom() {
815+
guard let liveChatView = self.liveChat?.view as? StoryContentLiveChatComponent.View else {
816+
return
817+
}
818+
liveChatView.scheduleScrollLiveChatToBottom()
819+
}
808820

809821
func update(component: StoryItemContentComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<StoryContentItem.Environment>, transition: ComponentTransition) -> CGSize {
810822
self.isUpdating = true
@@ -1018,9 +1030,11 @@ final class StoryItemContentComponent: Component {
10181030
if let liveChatView = liveChat.view {
10191031
if liveChatView.superview == nil {
10201032
liveChat.parentState = state
1033+
liveChatView.layer.allowsGroupOpacity = true
10211034
self.insertSubview(liveChatView, aboveSubview: self.imageView)
10221035
}
10231036
mediaStreamTransition.setFrame(view: liveChatView, frame: liveChatFrame)
1037+
mediaStreamTransition.setAlpha(view: liveChatView, alpha: component.isUIHidden ? 0.0 : 1.0)
10241038
}
10251039

10261040
if case .rtc = liveStream.kind, component.isEmbeddedInCamera {

submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1644,6 +1644,7 @@ public final class StoryItemSetContainerComponent: Component {
16441644
baseRate: component.storyItemSharedState.baseRate,
16451645
isVideoBuffering: visibleItem.isBuffering,
16461646
isCurrent: index == centralIndex,
1647+
isUIHidden: component.hideUI,
16471648
preferHighQuality: component.slice.additionalPeerData.preferHighQualityStories,
16481649
isEmbeddedInCamera: component.isEmbeddedInCamera,
16491650
activateReaction: { [weak self] reactionView, reaction in

submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerViewSendMessage.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,7 @@ final class StoryItemSetContainerSendMessage: @unchecked(Sendable) {
764764
if !(visibleItemView.liveChatState?.isExpanded ?? true) {
765765
visibleItemView.toggleLiveChatExpanded()
766766
}
767+
visibleItemView.scheduleScrollLiveChatToBottom()
767768
}
768769

769770
let entities = generateChatInputTextEntities(text)

0 commit comments

Comments
 (0)