@@ -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