mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix API and clear join as cache on error
This commit is contained in:
parent
985ecfc013
commit
7803f5604f
@ -142,7 +142,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
|
|||||||
dict[767652808] = { return Api.InputEncryptedFile.parse_inputEncryptedFileBigUploaded($0) }
|
dict[767652808] = { return Api.InputEncryptedFile.parse_inputEncryptedFileBigUploaded($0) }
|
||||||
dict[1304052993] = { return Api.account.Takeout.parse_takeout($0) }
|
dict[1304052993] = { return Api.account.Takeout.parse_takeout($0) }
|
||||||
dict[-1456996667] = { return Api.messages.InactiveChats.parse_inactiveChats($0) }
|
dict[-1456996667] = { return Api.messages.InactiveChats.parse_inactiveChats($0) }
|
||||||
dict[-1184160274] = { return Api.GroupCallParticipant.parse_groupCallParticipant($0) }
|
dict[430815881] = { return Api.GroupCallParticipant.parse_groupCallParticipant($0) }
|
||||||
dict[1443858741] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedMessage($0) }
|
dict[1443858741] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedMessage($0) }
|
||||||
dict[-1802240206] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedFile($0) }
|
dict[-1802240206] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedFile($0) }
|
||||||
dict[289586518] = { return Api.SavedContact.parse_savedPhoneContact($0) }
|
dict[289586518] = { return Api.SavedContact.parse_savedPhoneContact($0) }
|
||||||
|
@ -3604,13 +3604,13 @@ public extension Api {
|
|||||||
|
|
||||||
}
|
}
|
||||||
public enum GroupCallParticipant: TypeConstructorDescription {
|
public enum GroupCallParticipant: TypeConstructorDescription {
|
||||||
case groupCallParticipant(flags: Int32, peer: Api.Peer, date: Int32, activeDate: Int32?, source: Int32, volume: Int32?, about: String?, raiseHandRating: Int64?, params: Api.DataJSON?)
|
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) {
|
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
|
||||||
switch self {
|
switch self {
|
||||||
case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about, let raiseHandRating, let params):
|
case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about, let raiseHandRating):
|
||||||
if boxed {
|
if boxed {
|
||||||
buffer.appendInt32(-1184160274)
|
buffer.appendInt32(430815881)
|
||||||
}
|
}
|
||||||
serializeInt32(flags, buffer: buffer, boxed: false)
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
peer.serialize(buffer, true)
|
peer.serialize(buffer, true)
|
||||||
@ -3620,15 +3620,14 @@ public extension Api {
|
|||||||
if Int(flags) & Int(1 << 7) != 0 {serializeInt32(volume!, 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 << 11) != 0 {serializeString(about!, buffer: buffer, boxed: false)}
|
||||||
if Int(flags) & Int(1 << 13) != 0 {serializeInt64(raiseHandRating!, buffer: buffer, boxed: false)}
|
if Int(flags) & Int(1 << 13) != 0 {serializeInt64(raiseHandRating!, buffer: buffer, boxed: false)}
|
||||||
if Int(flags) & Int(1 << 6) != 0 {params!.serialize(buffer, true)}
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func descriptionFields() -> (String, [(String, Any)]) {
|
public func descriptionFields() -> (String, [(String, Any)]) {
|
||||||
switch self {
|
switch self {
|
||||||
case .groupCallParticipant(let flags, let peer, let date, let activeDate, let source, let volume, let about, let raiseHandRating, let params):
|
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), ("params", params)])
|
return ("groupCallParticipant", [("flags", flags), ("peer", peer), ("date", date), ("activeDate", activeDate), ("source", source), ("volume", volume), ("about", about), ("raiseHandRating", raiseHandRating)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3651,10 +3650,6 @@ public extension Api {
|
|||||||
if Int(_1!) & Int(1 << 11) != 0 {_7 = parseString(reader) }
|
if Int(_1!) & Int(1 << 11) != 0 {_7 = parseString(reader) }
|
||||||
var _8: Int64?
|
var _8: Int64?
|
||||||
if Int(_1!) & Int(1 << 13) != 0 {_8 = reader.readInt64() }
|
if Int(_1!) & Int(1 << 13) != 0 {_8 = reader.readInt64() }
|
||||||
var _9: Api.DataJSON?
|
|
||||||
if Int(_1!) & Int(1 << 6) != 0 {if let signature = reader.readInt32() {
|
|
||||||
_9 = Api.parse(reader, signature: signature) as? Api.DataJSON
|
|
||||||
} }
|
|
||||||
let _c1 = _1 != nil
|
let _c1 = _1 != nil
|
||||||
let _c2 = _2 != nil
|
let _c2 = _2 != nil
|
||||||
let _c3 = _3 != nil
|
let _c3 = _3 != nil
|
||||||
@ -3663,9 +3658,8 @@ public extension Api {
|
|||||||
let _c6 = (Int(_1!) & Int(1 << 7) == 0) || _6 != nil
|
let _c6 = (Int(_1!) & Int(1 << 7) == 0) || _6 != nil
|
||||||
let _c7 = (Int(_1!) & Int(1 << 11) == 0) || _7 != nil
|
let _c7 = (Int(_1!) & Int(1 << 11) == 0) || _7 != nil
|
||||||
let _c8 = (Int(_1!) & Int(1 << 13) == 0) || _8 != nil
|
let _c8 = (Int(_1!) & Int(1 << 13) == 0) || _8 != nil
|
||||||
let _c9 = (Int(_1!) & Int(1 << 6) == 0) || _9 != nil
|
if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 {
|
||||||
if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 {
|
return Api.GroupCallParticipant.groupCallParticipant(flags: _1!, peer: _2!, date: _3!, activeDate: _4, source: _5!, volume: _6, about: _7, raiseHandRating: _8)
|
||||||
return Api.GroupCallParticipant.groupCallParticipant(flags: _1!, peer: _2!, date: _3!, activeDate: _4, source: _5!, volume: _6, about: _7, raiseHandRating: _8, params: _9)
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return nil
|
return nil
|
||||||
|
@ -1184,6 +1184,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall {
|
|||||||
]), on: .root, blockInteraction: false, completion: {})
|
]), on: .root, blockInteraction: false, completion: {})
|
||||||
} else if case .invalidJoinAsPeer = error {
|
} else if case .invalidJoinAsPeer = error {
|
||||||
let peerId = strongSelf.peerId
|
let peerId = strongSelf.peerId
|
||||||
|
let _ = clearCachedGroupCallDisplayAsAvailablePeers(account: strongSelf.accountContext.account, peerId: peerId).start()
|
||||||
let _ = (strongSelf.accountContext.account.postbox.transaction { transaction -> Void in
|
let _ = (strongSelf.accountContext.account.postbox.transaction { transaction -> Void in
|
||||||
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, current in
|
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, current in
|
||||||
if let current = current as? CachedChannelData {
|
if let current = current as? CachedChannelData {
|
||||||
|
@ -110,7 +110,8 @@ public func getCurrentGroupCall(account: Account, callId: Int64, accessHash: Int
|
|||||||
|
|
||||||
loop: for participant in participants {
|
loop: for participant in participants {
|
||||||
switch participant {
|
switch participant {
|
||||||
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating, params):
|
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating/*, params*/):
|
||||||
|
let params: Api.DataJSON? = nil
|
||||||
let peerId: PeerId
|
let peerId: PeerId
|
||||||
switch apiPeerId {
|
switch apiPeerId {
|
||||||
case let .peerUser(userId):
|
case let .peerUser(userId):
|
||||||
@ -297,7 +298,8 @@ public func getGroupCallParticipants(account: Account, callId: Int64, accessHash
|
|||||||
|
|
||||||
loop: for participant in participants {
|
loop: for participant in participants {
|
||||||
switch participant {
|
switch participant {
|
||||||
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating, params):
|
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating/*, params*/):
|
||||||
|
let params: Api.DataJSON? = nil
|
||||||
let peerId: PeerId
|
let peerId: PeerId
|
||||||
switch apiPeerId {
|
switch apiPeerId {
|
||||||
case let .peerUser(userId):
|
case let .peerUser(userId):
|
||||||
@ -404,15 +406,35 @@ public func joinGroupCall(account: Account, peerId: PeerId, joinAs: PeerId?, cal
|
|||||||
}
|
}
|
||||||
|
|
||||||
let joinRequest = account.network.request(Api.functions.phone.joinGroupCall(flags: flags, call: .inputGroupCall(id: callId, accessHash: accessHash), joinAs: inputJoinAs, inviteHash: inviteHash, params: .dataJSON(data: joinPayload)))
|
let joinRequest = account.network.request(Api.functions.phone.joinGroupCall(flags: flags, call: .inputGroupCall(id: callId, accessHash: accessHash), joinAs: inputJoinAs, inviteHash: inviteHash, params: .dataJSON(data: joinPayload)))
|
||||||
|> mapError { error -> JoinGroupCallError in
|
|> `catch` { error -> Signal<Api.Updates, JoinGroupCallError> in
|
||||||
if error.errorDescription == "GROUPCALL_ANONYMOUS_FORBIDDEN" {
|
if error.errorDescription == "GROUPCALL_ANONYMOUS_FORBIDDEN" {
|
||||||
return .anonymousNotAllowed
|
return .fail(.anonymousNotAllowed)
|
||||||
} else if error.errorDescription == "GROUPCALL_PARTICIPANTS_TOO_MUCH" {
|
} else if error.errorDescription == "GROUPCALL_PARTICIPANTS_TOO_MUCH" {
|
||||||
return .tooManyParticipants
|
return .fail(.tooManyParticipants)
|
||||||
} else if error.errorDescription == "JOIN_AS_PEER_INVALID" {
|
} else if error.errorDescription == "JOIN_AS_PEER_INVALID" {
|
||||||
return .invalidJoinAsPeer
|
return .fail(.invalidJoinAsPeer)
|
||||||
|
} else if error.errorDescription == "GROUPCALL_INVALID" {
|
||||||
|
return account.postbox.transaction { transaction -> Signal<Api.Updates, JoinGroupCallError> in
|
||||||
|
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, current in
|
||||||
|
if let current = current as? CachedGroupData {
|
||||||
|
if current.activeCall?.id == callId {
|
||||||
|
return current.withUpdatedActiveCall(nil)
|
||||||
|
}
|
||||||
|
} else if let current = current as? CachedChannelData {
|
||||||
|
if current.activeCall?.id == callId {
|
||||||
|
return current.withUpdatedActiveCall(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return current
|
||||||
|
})
|
||||||
|
|
||||||
|
return .fail(.generic)
|
||||||
|
}
|
||||||
|
|> castError(JoinGroupCallError.self)
|
||||||
|
|> switchToLatest
|
||||||
|
} else {
|
||||||
|
return .fail(.generic)
|
||||||
}
|
}
|
||||||
return .generic
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let getParticipantsRequest = getGroupCallParticipants(account: account, callId: callId, accessHash: accessHash, offset: "", ssrcs: [], limit: 100, sortAscending: true)
|
let getParticipantsRequest = getGroupCallParticipants(account: account, callId: callId, accessHash: accessHash, offset: "", ssrcs: [], limit: 100, sortAscending: true)
|
||||||
@ -525,7 +547,8 @@ public func joinGroupCall(account: Account, peerId: PeerId, joinAs: PeerId?, cal
|
|||||||
case let .updateGroupCallParticipants(_, participants, _):
|
case let .updateGroupCallParticipants(_, participants, _):
|
||||||
loop: for participant in participants {
|
loop: for participant in participants {
|
||||||
switch participant {
|
switch participant {
|
||||||
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating, params):
|
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating/*, params*/):
|
||||||
|
let params: Api.DataJSON? = nil
|
||||||
let peerId: PeerId
|
let peerId: PeerId
|
||||||
switch apiPeerId {
|
switch apiPeerId {
|
||||||
case let .peerUser(userId):
|
case let .peerUser(userId):
|
||||||
@ -1731,7 +1754,8 @@ public final class GroupCallParticipantsContext {
|
|||||||
extension GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate {
|
extension GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate {
|
||||||
init(_ apiParticipant: Api.GroupCallParticipant) {
|
init(_ apiParticipant: Api.GroupCallParticipant) {
|
||||||
switch apiParticipant {
|
switch apiParticipant {
|
||||||
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating, params):
|
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating/*, params*/):
|
||||||
|
let params: Api.DataJSON? = nil
|
||||||
let peerId: PeerId
|
let peerId: PeerId
|
||||||
switch apiPeerId {
|
switch apiPeerId {
|
||||||
case let .peerUser(userId):
|
case let .peerUser(userId):
|
||||||
@ -1794,7 +1818,8 @@ extension GroupCallParticipantsContext.Update.StateUpdate {
|
|||||||
var participantUpdates: [GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate] = []
|
var participantUpdates: [GroupCallParticipantsContext.Update.StateUpdate.ParticipantUpdate] = []
|
||||||
for participant in participants {
|
for participant in participants {
|
||||||
switch participant {
|
switch participant {
|
||||||
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating, params):
|
case let .groupCallParticipant(flags, apiPeerId, date, activeDate, source, volume, about, raiseHandRating/*, params*/):
|
||||||
|
let params: Api.DataJSON? = nil
|
||||||
let peerId: PeerId
|
let peerId: PeerId
|
||||||
switch apiPeerId {
|
switch apiPeerId {
|
||||||
case let .peerUser(userId):
|
case let .peerUser(userId):
|
||||||
@ -2016,6 +2041,14 @@ public final class CachedDisplayAsPeers: PostboxCoding {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func clearCachedGroupCallDisplayAsAvailablePeers(account: Account, peerId: PeerId) -> Signal<Never, NoError> {
|
||||||
|
return account.postbox.transaction { transaction -> Void in
|
||||||
|
let key = ValueBoxKey(length: 8)
|
||||||
|
key.setInt64(0, value: peerId.toInt64())
|
||||||
|
transaction.removeItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.cachedGroupCallDisplayAsPeers, key: key))
|
||||||
|
}
|
||||||
|
|> ignoreValues
|
||||||
|
}
|
||||||
|
|
||||||
public func cachedGroupCallDisplayAsAvailablePeers(account: Account, peerId: PeerId) -> Signal<[FoundPeer], NoError> {
|
public func cachedGroupCallDisplayAsAvailablePeers(account: Account, peerId: PeerId) -> Signal<[FoundPeer], NoError> {
|
||||||
let key = ValueBoxKey(length: 8)
|
let key = ValueBoxKey(length: 8)
|
||||||
|
@ -210,7 +210,7 @@ public class BoxedMessage: NSObject {
|
|||||||
|
|
||||||
public class Serialization: NSObject, MTSerialization {
|
public class Serialization: NSObject, MTSerialization {
|
||||||
public func currentLayer() -> UInt {
|
public func currentLayer() -> UInt {
|
||||||
return 127
|
return 126
|
||||||
}
|
}
|
||||||
|
|
||||||
public func parseMessage(_ data: Data!) -> Any! {
|
public func parseMessage(_ data: Data!) -> Any! {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user