Update API

This commit is contained in:
Ali 2023-09-01 16:53:19 +04:00
parent 0192d976c8
commit f0336cd98a
9 changed files with 148 additions and 25 deletions

View File

@ -941,7 +941,12 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
self.chatListDisplayNode.mainContainerNode.present = { [weak self] c in
if let strongSelf = self {
strongSelf.present(c, in: .window(.root))
if c is UndoOverlayController {
strongSelf.dismissAllUndoControllers()
strongSelf.present(c, in: .current)
} else {
strongSelf.present(c, in: .window(.root))
}
}
}

View File

@ -708,7 +708,7 @@ private func mappedInsertEntries(context: AccountContext, nodeInteraction: ChatL
case .premiumUpgrade, .premiumAnnualDiscount, .premiumRestore:
nodeInteraction?.openPremiumIntro()
case .reviewLogin:
nodeInteraction?.openActiveSessions()
break
}
case .hide:
switch notice {
@ -1028,7 +1028,7 @@ private func mappedUpdateEntries(context: AccountContext, nodeInteraction: ChatL
case .premiumUpgrade, .premiumAnnualDiscount, .premiumRestore:
nodeInteraction?.openPremiumIntro()
case .reviewLogin:
nodeInteraction?.openActiveSessions()
break
}
case .hide:
switch notice {
@ -1623,7 +1623,7 @@ public final class ChatListNode: ListView {
animationBackgroundColor = UIColor(rgb: 0x474747)
}
//TODO:localize
self.present?(UndoOverlayController(presentationData: presentationData, content: .universal(animation: "anim_success", scale: 1.0, colors: ["info1.info1.stroke": animationBackgroundColor, "info2.info2.Fill": animationBackgroundColor], title: "New Login Allowed", text: "You can check the list of your active logins in [Settings > Devices]().", customUndoText: nil, timeout: 5), elevatedLayout: true, action: { [weak self] action in
self.present?(UndoOverlayController(presentationData: presentationData, content: .universal(animation: "anim_success", scale: 1.0, colors: ["info1.info1.stroke": animationBackgroundColor, "info2.info2.Fill": animationBackgroundColor], title: "New Login Allowed", text: "You can check the list of your active logins in [Settings > Devices]().", customUndoText: nil, timeout: 5), elevatedLayout: false, action: { [weak self] action in
switch action {
case .info:
self?.interaction?.openActiveSessions()

View File

@ -804,7 +804,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
dict[1374088783] = { return Api.StoryItem.parse_storyItemDeleted($0) }
dict[-5388013] = { return Api.StoryItem.parse_storyItemSkipped($0) }
dict[-1329730875] = { return Api.StoryView.parse_storyView($0) }
dict[-968094825] = { return Api.StoryViews.parse_storyViews($0) }
dict[-1923523370] = { return Api.StoryViews.parse_storyViews($0) }
dict[1964978502] = { return Api.TextWithEntities.parse_textWithEntities($0) }
dict[-1609668650] = { return Api.Theme.parse_theme($0) }
dict[-94849324] = { return Api.ThemeSettings.parse_themeSettings($0) }

View File

@ -610,17 +610,23 @@ public extension Api {
}
public extension Api {
enum StoryViews: TypeConstructorDescription {
case storyViews(flags: Int32, viewsCount: Int32, reactionsCount: Int32, recentViewers: [Int64]?)
case storyViews(flags: Int32, viewsCount: Int32, forwardsCount: Int32?, reactions: [Api.ReactionCount]?, reactionsCount: Int32?, recentViewers: [Int64]?)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
switch self {
case .storyViews(let flags, let viewsCount, let reactionsCount, let recentViewers):
case .storyViews(let flags, let viewsCount, let forwardsCount, let reactions, let reactionsCount, let recentViewers):
if boxed {
buffer.appendInt32(-968094825)
buffer.appendInt32(-1923523370)
}
serializeInt32(flags, buffer: buffer, boxed: false)
serializeInt32(viewsCount, buffer: buffer, boxed: false)
serializeInt32(reactionsCount, buffer: buffer, boxed: false)
if Int(flags) & Int(1 << 2) != 0 {serializeInt32(forwardsCount!, buffer: buffer, boxed: false)}
if Int(flags) & Int(1 << 3) != 0 {buffer.appendInt32(481674261)
buffer.appendInt32(Int32(reactions!.count))
for item in reactions! {
item.serialize(buffer, true)
}}
if Int(flags) & Int(1 << 4) != 0 {serializeInt32(reactionsCount!, buffer: buffer, boxed: false)}
if Int(flags) & Int(1 << 0) != 0 {buffer.appendInt32(481674261)
buffer.appendInt32(Int32(recentViewers!.count))
for item in recentViewers! {
@ -632,8 +638,8 @@ public extension Api {
public func descriptionFields() -> (String, [(String, Any)]) {
switch self {
case .storyViews(let flags, let viewsCount, let reactionsCount, let recentViewers):
return ("storyViews", [("flags", flags as Any), ("viewsCount", viewsCount as Any), ("reactionsCount", reactionsCount as Any), ("recentViewers", recentViewers as Any)])
case .storyViews(let flags, let viewsCount, let forwardsCount, let reactions, let reactionsCount, let recentViewers):
return ("storyViews", [("flags", flags as Any), ("viewsCount", viewsCount as Any), ("forwardsCount", forwardsCount as Any), ("reactions", reactions as Any), ("reactionsCount", reactionsCount as Any), ("recentViewers", recentViewers as Any)])
}
}
@ -643,17 +649,25 @@ public extension Api {
var _2: Int32?
_2 = reader.readInt32()
var _3: Int32?
_3 = reader.readInt32()
var _4: [Int64]?
if Int(_1!) & Int(1 << 2) != 0 {_3 = reader.readInt32() }
var _4: [Api.ReactionCount]?
if Int(_1!) & Int(1 << 3) != 0 {if let _ = reader.readInt32() {
_4 = Api.parseVector(reader, elementSignature: 0, elementType: Api.ReactionCount.self)
} }
var _5: Int32?
if Int(_1!) & Int(1 << 4) != 0 {_5 = reader.readInt32() }
var _6: [Int64]?
if Int(_1!) & Int(1 << 0) != 0 {if let _ = reader.readInt32() {
_4 = Api.parseVector(reader, elementSignature: 570911930, elementType: Int64.self)
_6 = Api.parseVector(reader, elementSignature: 570911930, elementType: Int64.self)
} }
let _c1 = _1 != nil
let _c2 = _2 != nil
let _c3 = _3 != nil
let _c4 = (Int(_1!) & Int(1 << 0) == 0) || _4 != nil
if _c1 && _c2 && _c3 && _c4 {
return Api.StoryViews.storyViews(flags: _1!, viewsCount: _2!, reactionsCount: _3!, recentViewers: _4)
let _c3 = (Int(_1!) & Int(1 << 2) == 0) || _3 != nil
let _c4 = (Int(_1!) & Int(1 << 3) == 0) || _4 != nil
let _c5 = (Int(_1!) & Int(1 << 4) == 0) || _5 != nil
let _c6 = (Int(_1!) & Int(1 << 0) == 0) || _6 != nil
if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 {
return Api.StoryViews.storyViews(flags: _1!, viewsCount: _2!, forwardsCount: _3, reactions: _4, reactionsCount: _5, recentViewers: _6)
}
else {
return nil

View File

@ -1,7 +1,7 @@
import Postbox
import TelegramApi
public struct MessageReaction: Equatable, PostboxCoding {
public struct MessageReaction: Equatable, PostboxCoding, Codable {
public enum Reaction: Hashable, Codable, PostboxCoding {
case builtin(String)
case custom(Int64)
@ -75,6 +75,24 @@ public struct MessageReaction: Equatable, PostboxCoding {
}
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: StringCodingKey.self)
if let value = try container.decodeIfPresent(String.self, forKey: "v") {
self.value = .builtin(value)
} else {
self.value = .custom(try container.decode(Int64.self, forKey: "cfid"))
}
self.count = try container.decode(Int32.self, forKey: "c")
if let chosenOrder = try container.decodeIfPresent(Int32.self, forKey: "s") {
self.chosenOrder = Int(chosenOrder)
} else if let isSelected = try container.decodeIfPresent(Int32.self, forKey: "s"), isSelected != 0 {
self.chosenOrder = 0
} else {
self.chosenOrder = nil
}
}
public func encode(_ encoder: PostboxEncoder) {
switch self.value {
case let .builtin(value):
@ -89,6 +107,19 @@ public struct MessageReaction: Equatable, PostboxCoding {
encoder.encodeNil(forKey: "cord")
}
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: StringCodingKey.self)
switch self.value {
case let .builtin(value):
try container.encode(value, forKey: "v")
case let .custom(fileId):
try container.encode(fileId, forKey: "cfid")
}
try container.encode(self.count, forKey: "c")
try container.encodeIfPresent(self.chosenOrder.flatMap(Int32.init), forKey: "cord")
}
}
extension MessageReaction.Reaction {

View File

@ -358,7 +358,14 @@ public final class EngineStoryViewListContext {
mediaAreas: item.mediaAreas,
text: item.text,
entities: item.entities,
views: Stories.Item.Views(seenCount: Int(count), reactedCount: Int(reactionsCount), seenPeerIds: currentViews.seenPeerIds, hasList: currentViews.hasList),
views: Stories.Item.Views(
seenCount: Int(count),
reactedCount: Int(reactionsCount),
forwardCount: currentViews.forwardCount,
seenPeerIds: currentViews.seenPeerIds,
reactions: currentViews.reactions,
hasList: currentViews.hasList
),
privacy: item.privacy,
isPinned: item.isPinned,
isExpired: item.isExpired,
@ -387,7 +394,14 @@ public final class EngineStoryViewListContext {
mediaAreas: item.mediaAreas,
text: item.text,
entities: item.entities,
views: Stories.Item.Views(seenCount: Int(count), reactedCount: Int(reactionsCount), seenPeerIds: currentViews.seenPeerIds, hasList: currentViews.hasList),
views: Stories.Item.Views(
seenCount: Int(count),
reactedCount: Int(reactionsCount),
forwardCount: currentViews.forwardCount,
seenPeerIds: currentViews.seenPeerIds,
reactions: currentViews.reactions,
hasList: currentViews.hasList
),
privacy: item.privacy,
isPinned: item.isPinned,
isExpired: item.isExpired,

View File

@ -42,19 +42,25 @@ public enum Stories {
private enum CodingKeys: String, CodingKey {
case seenCount = "seenCount"
case reactedCount = "reactedCount"
case forwardCount = "forwardCount"
case seenPeerIds = "seenPeerIds"
case reactions = "reactions"
case hasList = "hasList"
}
public var seenCount: Int
public var reactedCount: Int
public var forwardCount: Int
public var seenPeerIds: [PeerId]
public var reactions: [MessageReaction]
public var hasList: Bool
public init(seenCount: Int, reactedCount: Int, seenPeerIds: [PeerId], hasList: Bool) {
public init(seenCount: Int, reactedCount: Int, forwardCount: Int, seenPeerIds: [PeerId], reactions: [MessageReaction], hasList: Bool) {
self.seenCount = seenCount
self.reactedCount = reactedCount
self.forwardCount = forwardCount
self.seenPeerIds = seenPeerIds
self.reactions = reactions
self.hasList = hasList
}
@ -63,7 +69,9 @@ public enum Stories {
self.seenCount = Int(try container.decode(Int32.self, forKey: .seenCount))
self.reactedCount = Int(try container.decodeIfPresent(Int32.self, forKey: .reactedCount) ?? 0)
self.forwardCount = Int(try container.decodeIfPresent(Int32.self, forKey: .forwardCount) ?? 0)
self.seenPeerIds = try container.decode([Int64].self, forKey: .seenPeerIds).map(PeerId.init)
self.reactions = try container.decodeIfPresent([MessageReaction].self, forKey: .reactions) ?? []
self.hasList = try container.decodeIfPresent(Bool.self, forKey: .hasList) ?? true
}
@ -72,7 +80,9 @@ public enum Stories {
try container.encode(Int32(clamping: self.seenCount), forKey: .seenCount)
try container.encode(Int32(clamping: self.reactedCount), forKey: .reactedCount)
try container.encode(Int32(clamping: self.forwardCount), forKey: .forwardCount)
try container.encode(self.seenPeerIds.map { $0.toInt64() }, forKey: .seenPeerIds)
try container.encode(self.reactions, forKey: .reactions)
try container.encode(self.hasList, forKey: .hasList)
}
}
@ -1445,13 +1455,32 @@ extension Api.StoryItem {
extension Stories.Item.Views {
init(apiViews: Api.StoryViews) {
switch apiViews {
case let .storyViews(flags, viewsCount, reactionsCount, recentViewers):
case let .storyViews(flags, viewsCount, forwardsCount, reactions, reactionsCount, recentViewers):
//storyViews#8d595cd6 flags:# has_viewers:flags.1?true views_count:int forwards_count:flags.2?int reactions:flags.3?Vector<ReactionCount> reactions_count:flags.4?int recent_viewers:flags.0?Vector<long> = StoryViews;
let hasList = (flags & (1 << 1)) != 0
var seenPeerIds: [PeerId] = []
if let recentViewers = recentViewers {
seenPeerIds = recentViewers.map { PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value($0)) }
}
self.init(seenCount: Int(viewsCount), reactedCount: Int(reactionsCount), seenPeerIds: seenPeerIds, hasList: hasList)
var mappedReactions: [MessageReaction] = []
if let reactions = reactions {
for result in reactions {
switch result {
case let .reactionCount(_, chosenOrder, reaction, count):
if let reaction = MessageReaction.Reaction(apiReaction: reaction) {
mappedReactions.append(MessageReaction(value: reaction, count: count, chosenOrder: chosenOrder.flatMap(Int.init)))
}
}
}
}
self.init(
seenCount: Int(viewsCount),
reactedCount: Int(reactionsCount ?? 0),
forwardCount: Int(forwardsCount ?? 0),
seenPeerIds: seenPeerIds,
reactions: mappedReactions,
hasList: hasList
)
}
}
}

View File

@ -14,13 +14,17 @@ public final class EngineStoryItem: Equatable {
public final class Views: Equatable {
public let seenCount: Int
public let reactedCount: Int
public var forwardCount: Int
public let seenPeers: [EnginePeer]
public let reactions: [MessageReaction]
public let hasList: Bool
public init(seenCount: Int, reactedCount: Int, seenPeers: [EnginePeer], hasList: Bool) {
public init(seenCount: Int, reactedCount: Int, forwardCount: Int, seenPeers: [EnginePeer], reactions: [MessageReaction], hasList: Bool) {
self.seenCount = seenCount
self.reactedCount = reactedCount
self.forwardCount = forwardCount
self.seenPeers = seenPeers
self.reactions = reactions
self.hasList = hasList
}
@ -31,9 +35,15 @@ public final class EngineStoryItem: Equatable {
if lhs.reactedCount != rhs.reactedCount {
return false
}
if lhs.forwardCount != rhs.forwardCount {
return false
}
if lhs.seenPeers != rhs.seenPeers {
return false
}
if lhs.reactions != rhs.reactions {
return false
}
if lhs.hasList != rhs.hasList {
return false
}
@ -159,7 +169,9 @@ extension EngineStoryItem {
return Stories.Item.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeerIds: views.seenPeers.map(\.id),
reactions: views.reactions,
hasList: views.hasList
)
},
@ -533,9 +545,11 @@ public final class PeerStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return transaction.getPeer(id).flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -661,9 +675,11 @@ public final class PeerStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return transaction.getPeer(id).flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -813,9 +829,11 @@ public final class PeerStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -856,9 +874,11 @@ public final class PeerStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -901,9 +921,11 @@ public final class PeerStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -942,9 +964,11 @@ public final class PeerStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -1107,9 +1131,11 @@ public final class PeerExpiringStoryListContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return transaction.getPeer(id).flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},

View File

@ -169,9 +169,11 @@ public final class StoryContentContextImpl: StoryContentContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},
@ -1076,9 +1078,11 @@ public final class SingleStoryContentContextImpl: StoryContentContext {
return EngineStoryItem.Views(
seenCount: views.seenCount,
reactedCount: views.reactedCount,
forwardCount: views.forwardCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
},
reactions: views.reactions,
hasList: views.hasList
)
},