From e3814b94f5e593422a262b0cf80deaab78df77ef Mon Sep 17 00:00:00 2001 From: overtake Date: Fri, 5 Mar 2021 14:39:03 +0400 Subject: [PATCH] update api --- submodules/TelegramApi/Sources/Api0.swift | 2 +- submodules/TelegramApi/Sources/Api2.swift | 24 +++--- submodules/TelegramApi/Sources/Api4.swift | 22 +++--- .../TelegramCore/Sources/GroupCalls.swift | 77 ++++++++++--------- 4 files changed, 67 insertions(+), 58 deletions(-) diff --git a/submodules/TelegramApi/Sources/Api0.swift b/submodules/TelegramApi/Sources/Api0.swift index 5727467be5..9d38265344 100644 --- a/submodules/TelegramApi/Sources/Api0.swift +++ b/submodules/TelegramApi/Sources/Api0.swift @@ -142,7 +142,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[767652808] = { return Api.InputEncryptedFile.parse_inputEncryptedFileBigUploaded($0) } dict[1304052993] = { return Api.account.Takeout.parse_takeout($0) } dict[-1456996667] = { return Api.messages.InactiveChats.parse_inactiveChats($0) } - dict[-763544865] = { return Api.GroupCallParticipant.parse_groupCallParticipant($0) } + dict[2085094779] = { return Api.GroupCallParticipant.parse_groupCallParticipant($0) } dict[1443858741] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedMessage($0) } dict[-1802240206] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedFile($0) } dict[289586518] = { return Api.SavedContact.parse_savedPhoneContact($0) } diff --git a/submodules/TelegramApi/Sources/Api2.swift b/submodules/TelegramApi/Sources/Api2.swift index 33e657b206..ca971baefa 100644 --- a/submodules/TelegramApi/Sources/Api2.swift +++ b/submodules/TelegramApi/Sources/Api2.swift @@ -3604,29 +3604,30 @@ public extension Api { } public enum GroupCallParticipant: TypeConstructorDescription { - case groupCallParticipant(flags: Int32, peer: Api.Peer, date: Int32, activeDate: Int32?, source: Int32, volume: Int32?, about: String?) + case groupCallParticipant(flags: Int32, peer: Api.Peer, date: Int32, activeDate: Int32?, source: Int32?, volume: Int32?, about: String?, raiseHandRating: Int64?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about): + case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about, let raiseHandRating): if boxed { - buffer.appendInt32(-763544865) + buffer.appendInt32(2085094779) } serializeInt32(flags, buffer: buffer, boxed: false) peer.serialize(buffer, true) serializeInt32(date, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 3) != 0 {serializeInt32(activeDate!, buffer: buffer, boxed: false)} - serializeInt32(source, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 12) != 0 {serializeInt32(source!, buffer: buffer, boxed: false)} if Int(flags) & Int(1 << 7) != 0 {serializeInt32(volume!, buffer: buffer, boxed: false)} if Int(flags) & Int(1 << 11) != 0 {serializeString(about!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 13) != 0 {serializeInt64(raiseHandRating!, buffer: buffer, boxed: false)} break } } public func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about): - return ("groupCallParticipant", [("flags", flags), ("peer", peer), ("date", date), ("activeDate", activeDate), ("source", source), ("volume", volume), ("about", about)]) + case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about, let raiseHandRating): + return ("groupCallParticipant", [("flags", flags), ("peer", peer), ("date", date), ("activeDate", activeDate), ("source", source), ("volume", volume), ("about", about), ("raiseHandRating", raiseHandRating)]) } } @@ -3642,20 +3643,23 @@ public extension Api { var _4: Int32? if Int(_1!) & Int(1 << 3) != 0 {_4 = reader.readInt32() } var _5: Int32? - _5 = reader.readInt32() + if Int(_1!) & Int(1 << 12) != 0 {_5 = reader.readInt32() } var _6: Int32? if Int(_1!) & Int(1 << 7) != 0 {_6 = reader.readInt32() } var _7: String? if Int(_1!) & Int(1 << 11) != 0 {_7 = parseString(reader) } + var _8: Int64? + if Int(_1!) & Int(1 << 13) != 0 {_8 = reader.readInt64() } let _c1 = _1 != nil let _c2 = _2 != nil let _c3 = _3 != nil let _c4 = (Int(_1!) & Int(1 << 3) == 0) || _4 != nil - let _c5 = _5 != nil + let _c5 = (Int(_1!) & Int(1 << 12) == 0) || _5 != nil let _c6 = (Int(_1!) & Int(1 << 7) == 0) || _6 != nil let _c7 = (Int(_1!) & Int(1 << 11) == 0) || _7 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 { - return Api.GroupCallParticipant.groupCallParticipant(flags: _1!, peer: _2!, date: _3!, activeDate: _4, source: _5!, volume: _6, about: _7) + let _c8 = (Int(_1!) & Int(1 << 13) == 0) || _8 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 { + return Api.GroupCallParticipant.groupCallParticipant(flags: _1!, peer: _2!, date: _3!, activeDate: _4, source: _5, volume: _6, about: _7, raiseHandRating: _8) } else { return nil diff --git a/submodules/TelegramApi/Sources/Api4.swift b/submodules/TelegramApi/Sources/Api4.swift index 7ebbbe2ffa..6b458629fb 100644 --- a/submodules/TelegramApi/Sources/Api4.swift +++ b/submodules/TelegramApi/Sources/Api4.swift @@ -7595,14 +7595,13 @@ public extension Api { }) } - public static func createGroupCall(flags: Int32, peer: Api.InputPeer, joinAs: Api.InputPeer?, randomId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + public static func createGroupCall(peer: Api.InputPeer, joinAs: Api.InputPeer, randomId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() - buffer.appendInt32(534090322) - serializeInt32(flags, buffer: buffer, boxed: false) + buffer.appendInt32(130050293) peer.serialize(buffer, true) - if Int(flags) & Int(1 << 0) != 0 {joinAs!.serialize(buffer, true)} + joinAs.serialize(buffer, true) serializeInt32(randomId, buffer: buffer, boxed: false) - return (FunctionDescription(name: "phone.createGroupCall", parameters: [("flags", flags), ("peer", peer), ("joinAs", joinAs), ("randomId", randomId)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in + return (FunctionDescription(name: "phone.createGroupCall", parameters: [("peer", peer), ("joinAs", joinAs), ("randomId", randomId)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in let reader = BufferReader(buffer) var result: Api.Updates? if let signature = reader.readInt32() { @@ -7612,12 +7611,12 @@ public extension Api { }) } - public static func joinGroupCall(flags: Int32, call: Api.InputGroupCall, joinAs: Api.InputPeer?, params: Api.DataJSON) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + public static func joinGroupCall(flags: Int32, call: Api.InputGroupCall, joinAs: Api.InputPeer, params: Api.DataJSON) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() - buffer.appendInt32(780232376) + buffer.appendInt32(909354416) serializeInt32(flags, buffer: buffer, boxed: false) call.serialize(buffer, true) - if Int(flags) & Int(1 << 1) != 0 {joinAs!.serialize(buffer, true)} + joinAs.serialize(buffer, true) params.serialize(buffer, true) return (FunctionDescription(name: "phone.joinGroupCall", parameters: [("flags", flags), ("call", call), ("joinAs", joinAs), ("params", params)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in let reader = BufferReader(buffer) @@ -7764,14 +7763,15 @@ public extension Api { }) } - public static func editGroupCallParticipant(flags: Int32, call: Api.InputGroupCall, participant: Api.InputPeer, volume: Int32?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + public static func editGroupCallParticipant(flags: Int32, call: Api.InputGroupCall, participant: Api.InputPeer, volume: Int32?, raiseHand: Api.Bool?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() - buffer.appendInt32(1192486819) + buffer.appendInt32(-646583424) serializeInt32(flags, buffer: buffer, boxed: false) call.serialize(buffer, true) participant.serialize(buffer, true) if Int(flags) & Int(1 << 1) != 0 {serializeInt32(volume!, buffer: buffer, boxed: false)} - return (FunctionDescription(name: "phone.editGroupCallParticipant", parameters: [("flags", flags), ("call", call), ("participant", participant), ("volume", volume)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in + if Int(flags) & Int(1 << 2) != 0 {raiseHand!.serialize(buffer, true)} + return (FunctionDescription(name: "phone.editGroupCallParticipant", parameters: [("flags", flags), ("call", call), ("participant", participant), ("volume", volume), ("raiseHand", raiseHand)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in let reader = BufferReader(buffer) var result: Api.Updates? if let signature = reader.readInt32() { diff --git a/submodules/TelegramCore/Sources/GroupCalls.swift b/submodules/TelegramCore/Sources/GroupCalls.swift index bf9cd29295..274721141b 100644 --- a/submodules/TelegramCore/Sources/GroupCalls.swift +++ b/submodules/TelegramCore/Sources/GroupCalls.swift @@ -106,7 +106,7 @@ public func getCurrentGroupCall(account: Account, callId: Int64, accessHash: Int loop: for participant in participants { switch participant { - case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about): + case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating): let peerId: PeerId switch apiPeerId { @@ -168,26 +168,17 @@ public enum CreateGroupCallError { case anonymousNotAllowed } -public func createGroupCall(account: Account, peerId: PeerId, joinAs: PeerId?) -> Signal { +public func createGroupCall(account: Account, peerId: PeerId, joinAs: PeerId) -> Signal { return account.postbox.transaction { transaction -> (Api.InputPeer?, Api.InputPeer?) in - let callPeer = transaction.getPeer(peerId).flatMap(apiInputPeer) - if let joinAs = joinAs { - return (callPeer, transaction.getPeer(joinAs).flatMap(apiInputPeer)) - } else { - return (callPeer, nil) - } + return (transaction.getPeer(peerId).flatMap(apiInputPeer), transaction.getPeer(joinAs).flatMap(apiInputPeer)) } |> castError(CreateGroupCallError.self) |> mapToSignal { (inputPeer, inputJoinAs) -> Signal in - guard let inputPeer = inputPeer else { + guard let inputPeer = inputPeer, let inputJoinAs = inputJoinAs else { return .fail(.generic) } - var flags: Int32 = 0 - if let _ = inputJoinAs { - flags |= (1 << 0) - } - return account.network.request(Api.functions.phone.createGroupCall(flags: flags, peer: inputPeer, joinAs: inputJoinAs, randomId: Int32.random(in: Int32.min ... Int32.max))) + return account.network.request(Api.functions.phone.createGroupCall(peer: inputPeer, joinAs: inputJoinAs, randomId: Int32.random(in: Int32.min ... Int32.max))) |> mapError { error -> CreateGroupCallError in if error.errorDescription == "ANONYMOUS_CALLS_DISABLED" { return .anonymousNotAllowed @@ -281,7 +272,7 @@ public func getGroupCallParticipants(account: Account, callId: Int64, accessHash loop: for participant in participants { switch participant { - case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about): + case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating): let peerId: PeerId switch apiPeerId { @@ -321,7 +312,8 @@ public func getGroupCallParticipants(account: Account, callId: Int64, accessHash activityRank: nil, muteState: muteState, volume: volume, - about: about + about: about, + raiseHandRating: raiseHandRating )) } } @@ -356,27 +348,21 @@ public struct JoinGroupCallResult { public var state: GroupCallParticipantsContext.State } -public func joinGroupCall(account: Account, peerId: PeerId, joinAs: PeerId?, callId: Int64, accessHash: Int64, preferMuted: Bool, joinPayload: String) -> Signal { +public func joinGroupCall(account: Account, peerId: PeerId, joinAs: PeerId, callId: Int64, accessHash: Int64, preferMuted: Bool, joinPayload: String) -> Signal { return account.postbox.transaction { transaction -> Api.InputPeer? in - if let joinAs = joinAs { - return transaction.getPeer(joinAs).flatMap(apiInputPeer) - } else { - return .inputPeerSelf - } + return transaction.getPeer(joinAs).flatMap(apiInputPeer) } |> castError(JoinGroupCallError.self) |> mapToSignal { inputJoinAs in - + guard let inputJoinAs = inputJoinAs else { + return .fail(.generic) + } var flags: Int32 = 0 if preferMuted { flags |= (1 << 0) } - if let _ = inputJoinAs { - flags |= (1 << 1) - } - return account.network.request(Api.functions.phone.joinGroupCall(flags: flags, call: .inputGroupCall(id: callId, accessHash: accessHash), joinAs: inputJoinAs, params: .dataJSON(data: joinPayload))) |> mapError { error -> JoinGroupCallError in if error.errorDescription == "GROUPCALL_ANONYMOUS_FORBIDDEN" { @@ -681,6 +667,7 @@ public final class GroupCallParticipantsContext { public var muteState: MuteState? public var volume: Int32? public var about: String? + public var raiseHandRating: Int32? public init( peer: Peer, ssrc: UInt32, @@ -690,7 +677,8 @@ public final class GroupCallParticipantsContext { activityRank: Int?, muteState: MuteState?, volume: Int32?, - about: String? + about: String?, + raiseHandRating: Int32? ) { self.peer = peer self.ssrc = ssrc @@ -701,6 +689,7 @@ public final class GroupCallParticipantsContext { self.muteState = muteState self.volume = volume self.about = about + self.raiseHandRating = raiseHandRating } public static func ==(lhs: Participant, rhs: Participant) -> Bool { @@ -728,6 +717,9 @@ public final class GroupCallParticipantsContext { if lhs.about != rhs.about { return false } + if lhs.raiseHandRating != rhs.raiseHandRating { + return false + } return true } @@ -830,6 +822,7 @@ public final class GroupCallParticipantsContext { public var participationStatusChange: ParticipationStatusChange public var volume: Int32? public var about: String? + public var raiseHandRating: Int32? init( peerId: PeerId, ssrc: UInt32, @@ -839,7 +832,8 @@ public final class GroupCallParticipantsContext { muteState: Participant.MuteState?, participationStatusChange: ParticipationStatusChange, volume: Int32?, - about: String? + about: String?, + raiseHandRating: Int32? ) { self.peerId = peerId self.ssrc = ssrc @@ -850,6 +844,7 @@ public final class GroupCallParticipantsContext { self.participationStatusChange = participationStatusChange self.volume = volume self.about = about + self.raiseHandRating = raiseHandRating } } @@ -1316,7 +1311,8 @@ public final class GroupCallParticipantsContext { activityRank: previousActivityRank, muteState: participantUpdate.muteState, volume: participantUpdate.volume, - about: participantUpdate.about + about: participantUpdate.about, + raiseHandRating: participantUpdate.raiseHandRating ) updatedParticipants.append(participant) } @@ -1379,7 +1375,7 @@ public final class GroupCallParticipantsContext { })) } - public func updateMuteState(peerId: PeerId, muteState: Participant.MuteState?, volume: Int32?) { + public func updateMuteState(peerId: PeerId, muteState: Participant.MuteState?, volume: Int32?, raiseHand: Bool?) { if let current = self.stateValue.overlayState.pendingMuteStateChanges[peerId] { if current.state == muteState { return @@ -1421,8 +1417,15 @@ public final class GroupCallParticipantsContext { if let muteState = muteState, (!muteState.canUnmute || peerId == account.peerId || muteState.mutedByYou) { flags |= 1 << 0 } + let raiseHandApi: Api.Bool? + if let raiseHand = raiseHand { + flags |= 1 << 2 + raiseHandApi = raiseHand ? .boolTrue : .boolFalse + } else { + raiseHandApi = nil + } - return account.network.request(Api.functions.phone.editGroupCallParticipant(flags: flags, call: .inputGroupCall(id: id, accessHash: accessHash), participant: inputPeer, volume: volume)) + return account.network.request(Api.functions.phone.editGroupCallParticipant(flags: flags, call: .inputGroupCall(id: id, accessHash: accessHash), participant: inputPeer, volume: volume, raiseHand: raiseHandApi)) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) @@ -1531,7 +1534,7 @@ public final class GroupCallParticipantsContext { extension GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate { init(_ apiParticipant: Api.GroupCallParticipant) { switch apiParticipant { - case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about): + case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating): let peerId: PeerId switch apiPeerId { case let .peerUser(userId): @@ -1580,7 +1583,8 @@ extension GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate { muteState: muteState, participationStatusChange: participationStatusChange, volume: volume, - about: about + about: about, + raiseHandRating: raiseHandRating ) } } @@ -1591,7 +1595,7 @@ extension GroupCallParticipantsContext.Update.StateUpdate { var participantUpdates: [GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate] = [] for participant in participants { switch participant { - case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about): + case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating): let peerId: PeerId switch apiPeerId { case let .peerUser(userId): @@ -1640,7 +1644,8 @@ extension GroupCallParticipantsContext.Update.StateUpdate { muteState: muteState, participationStatusChange: participationStatusChange, volume: volume, - about: about + about: about, + raiseHandRating: raiseHandRating )) } }