Skip to content

Commit 4d184eb

Browse files
author
Isaac
committed
Fix stars settings
1 parent cbab90d commit 4d184eb

File tree

2 files changed

+68
-32
lines changed

2 files changed

+68
-32
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 {

0 commit comments

Comments
 (0)