From bb7e1ae3001b9145471519815969976a600d5ba0 Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Mon, 19 Jan 2026 00:28:21 +0800 Subject: [PATCH] Refactor constructor use sites for types 540-559 to struct pattern Migrated Api.phone.*, Api.photos.*, Api.stats.*, Api.premium.* constructors to use struct-wrapped enum pattern with --struct-count=560. Co-Authored-By: Claude Opus 4.5 --- submodules/TelegramApi/Sources/Api37.swift | 74 ++++- submodules/TelegramApi/Sources/Api38.swift | 268 +++++++++++++++++- .../Sources/State/CallSessionManager.swift | 9 +- .../Sources/State/ChannelBoost.swift | 9 +- .../Statistics/MessageStatistics.swift | 3 +- .../Sources/Statistics/PeerStatistics.swift | 11 +- .../Sources/Statistics/StoryStatistics.swift | 6 +- .../TelegramEngine/Calls/GroupCalls.swift | 33 ++- .../Calls/TelegramEngineCalls.swift | 3 +- .../Peers/PeerPhotoUpdater.swift | 12 +- .../Peers/RequestUserPhotos.swift | 6 +- 11 files changed, 382 insertions(+), 52 deletions(-) diff --git a/submodules/TelegramApi/Sources/Api37.swift b/submodules/TelegramApi/Sources/Api37.swift index c8c07b4f61..f784ee60ea 100644 --- a/submodules/TelegramApi/Sources/Api37.swift +++ b/submodules/TelegramApi/Sources/Api37.swift @@ -957,7 +957,13 @@ public extension Api.payments { } public extension Api.phone { enum ExportedGroupCallInvite: TypeConstructorDescription { - case exportedGroupCallInvite(link: String) + public class Cons_exportedGroupCallInvite { + public var link: String + public init(link: String) { + self.link = link + } + } + case exportedGroupCallInvite(Cons_exportedGroupCallInvite) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -986,7 +992,21 @@ public extension Api.phone { } public extension Api.phone { enum GroupCall: TypeConstructorDescription { - case groupCall(call: Api.GroupCall, participants: [Api.GroupCallParticipant], participantsNextOffset: String, chats: [Api.Chat], users: [Api.User]) + public class Cons_groupCall { + public var call: Api.GroupCall + public var participants: [Api.GroupCallParticipant] + public var participantsNextOffset: String + public var chats: [Api.Chat] + public var users: [Api.User] + public init(call: Api.GroupCall, participants: [Api.GroupCallParticipant], participantsNextOffset: String, chats: [Api.Chat], users: [Api.User]) { + self.call = call + self.participants = participants + self.participantsNextOffset = participantsNextOffset + self.chats = chats + self.users = users + } + } + case groupCall(Cons_groupCall) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -1015,7 +1035,19 @@ public extension Api.phone { } public extension Api.phone { enum GroupCallStars: TypeConstructorDescription { - case groupCallStars(totalStars: Int64, topDonors: [Api.GroupCallDonor], chats: [Api.Chat], users: [Api.User]) + public class Cons_groupCallStars { + public var totalStars: Int64 + public var topDonors: [Api.GroupCallDonor] + public var chats: [Api.Chat] + public var users: [Api.User] + public init(totalStars: Int64, topDonors: [Api.GroupCallDonor], chats: [Api.Chat], users: [Api.User]) { + self.totalStars = totalStars + self.topDonors = topDonors + self.chats = chats + self.users = users + } + } + case groupCallStars(Cons_groupCallStars) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -1044,7 +1076,13 @@ public extension Api.phone { } public extension Api.phone { enum GroupCallStreamChannels: TypeConstructorDescription { - case groupCallStreamChannels(channels: [Api.GroupCallStreamChannel]) + public class Cons_groupCallStreamChannels { + public var channels: [Api.GroupCallStreamChannel] + public init(channels: [Api.GroupCallStreamChannel]) { + self.channels = channels + } + } + case groupCallStreamChannels(Cons_groupCallStreamChannels) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -1073,7 +1111,15 @@ public extension Api.phone { } public extension Api.phone { enum GroupCallStreamRtmpUrl: TypeConstructorDescription { - case groupCallStreamRtmpUrl(url: String, key: String) + public class Cons_groupCallStreamRtmpUrl { + public var url: String + public var key: String + public init(url: String, key: String) { + self.url = url + self.key = key + } + } + case groupCallStreamRtmpUrl(Cons_groupCallStreamRtmpUrl) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -1102,7 +1148,23 @@ public extension Api.phone { } public extension Api.phone { enum GroupParticipants: TypeConstructorDescription { - case groupParticipants(count: Int32, participants: [Api.GroupCallParticipant], nextOffset: String, chats: [Api.Chat], users: [Api.User], version: Int32) + public class Cons_groupParticipants { + public var count: Int32 + public var participants: [Api.GroupCallParticipant] + public var nextOffset: String + public var chats: [Api.Chat] + public var users: [Api.User] + public var version: Int32 + public init(count: Int32, participants: [Api.GroupCallParticipant], nextOffset: String, chats: [Api.Chat], users: [Api.User], version: Int32) { + self.count = count + self.participants = participants + self.nextOffset = nextOffset + self.chats = chats + self.users = users + self.version = version + } + } + case groupParticipants(Cons_groupParticipants) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG diff --git a/submodules/TelegramApi/Sources/Api38.swift b/submodules/TelegramApi/Sources/Api38.swift index 5363ebea11..7cf94a3f64 100644 --- a/submodules/TelegramApi/Sources/Api38.swift +++ b/submodules/TelegramApi/Sources/Api38.swift @@ -1,6 +1,16 @@ public extension Api.phone { enum JoinAsPeers: TypeConstructorDescription { - case joinAsPeers(peers: [Api.Peer], chats: [Api.Chat], users: [Api.User]) + public class Cons_joinAsPeers { + public var peers: [Api.Peer] + public var chats: [Api.Chat] + public var users: [Api.User] + public init(peers: [Api.Peer], chats: [Api.Chat], users: [Api.User]) { + self.peers = peers + self.chats = chats + self.users = users + } + } + case joinAsPeers(Cons_joinAsPeers) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -29,7 +39,15 @@ public extension Api.phone { } public extension Api.phone { enum PhoneCall: TypeConstructorDescription { - case phoneCall(phoneCall: Api.PhoneCall, users: [Api.User]) + public class Cons_phoneCall { + public var phoneCall: Api.PhoneCall + public var users: [Api.User] + public init(phoneCall: Api.PhoneCall, users: [Api.User]) { + self.phoneCall = phoneCall + self.users = users + } + } + case phoneCall(Cons_phoneCall) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -58,7 +76,15 @@ public extension Api.phone { } public extension Api.photos { enum Photo: TypeConstructorDescription { - case photo(photo: Api.Photo, users: [Api.User]) + public class Cons_photo { + public var photo: Api.Photo + public var users: [Api.User] + public init(photo: Api.Photo, users: [Api.User]) { + self.photo = photo + self.users = users + } + } + case photo(Cons_photo) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -87,8 +113,26 @@ public extension Api.photos { } public extension Api.photos { enum Photos: TypeConstructorDescription { - case photos(photos: [Api.Photo], users: [Api.User]) - case photosSlice(count: Int32, photos: [Api.Photo], users: [Api.User]) + public class Cons_photos { + public var photos: [Api.Photo] + public var users: [Api.User] + public init(photos: [Api.Photo], users: [Api.User]) { + self.photos = photos + self.users = users + } + } + public class Cons_photosSlice { + public var count: Int32 + public var photos: [Api.Photo] + public var users: [Api.User] + public init(count: Int32, photos: [Api.Photo], users: [Api.User]) { + self.count = count + self.photos = photos + self.users = users + } + } + case photos(Cons_photos) + case photosSlice(Cons_photosSlice) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -124,7 +168,21 @@ public extension Api.photos { } public extension Api.premium { enum BoostsList: TypeConstructorDescription { - case boostsList(flags: Int32, count: Int32, boosts: [Api.Boost], nextOffset: String?, users: [Api.User]) + public class Cons_boostsList { + public var flags: Int32 + public var count: Int32 + public var boosts: [Api.Boost] + public var nextOffset: String? + public var users: [Api.User] + public init(flags: Int32, count: Int32, boosts: [Api.Boost], nextOffset: String?, users: [Api.User]) { + self.flags = flags + self.count = count + self.boosts = boosts + self.nextOffset = nextOffset + self.users = users + } + } + case boostsList(Cons_boostsList) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -153,7 +211,31 @@ public extension Api.premium { } public extension Api.premium { enum BoostsStatus: TypeConstructorDescription { - case boostsStatus(flags: Int32, level: Int32, currentLevelBoosts: Int32, boosts: Int32, giftBoosts: Int32?, nextLevelBoosts: Int32?, premiumAudience: Api.StatsPercentValue?, boostUrl: String, prepaidGiveaways: [Api.PrepaidGiveaway]?, myBoostSlots: [Int32]?) + public class Cons_boostsStatus { + public var flags: Int32 + public var level: Int32 + public var currentLevelBoosts: Int32 + public var boosts: Int32 + public var giftBoosts: Int32? + public var nextLevelBoosts: Int32? + public var premiumAudience: Api.StatsPercentValue? + public var boostUrl: String + public var prepaidGiveaways: [Api.PrepaidGiveaway]? + public var myBoostSlots: [Int32]? + public init(flags: Int32, level: Int32, currentLevelBoosts: Int32, boosts: Int32, giftBoosts: Int32?, nextLevelBoosts: Int32?, premiumAudience: Api.StatsPercentValue?, boostUrl: String, prepaidGiveaways: [Api.PrepaidGiveaway]?, myBoostSlots: [Int32]?) { + self.flags = flags + self.level = level + self.currentLevelBoosts = currentLevelBoosts + self.boosts = boosts + self.giftBoosts = giftBoosts + self.nextLevelBoosts = nextLevelBoosts + self.premiumAudience = premiumAudience + self.boostUrl = boostUrl + self.prepaidGiveaways = prepaidGiveaways + self.myBoostSlots = myBoostSlots + } + } + case boostsStatus(Cons_boostsStatus) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -182,7 +264,17 @@ public extension Api.premium { } public extension Api.premium { enum MyBoosts: TypeConstructorDescription { - case myBoosts(myBoosts: [Api.MyBoost], chats: [Api.Chat], users: [Api.User]) + public class Cons_myBoosts { + public var myBoosts: [Api.MyBoost] + public var chats: [Api.Chat] + public var users: [Api.User] + public init(myBoosts: [Api.MyBoost], chats: [Api.Chat], users: [Api.User]) { + self.myBoosts = myBoosts + self.chats = chats + self.users = users + } + } + case myBoosts(Cons_myBoosts) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -211,7 +303,15 @@ public extension Api.premium { } public extension Api.smsjobs { enum EligibilityToJoin: TypeConstructorDescription { - case eligibleToJoin(termsUrl: String, monthlySentSms: Int32) + public class Cons_eligibleToJoin { + public var termsUrl: String + public var monthlySentSms: Int32 + public init(termsUrl: String, monthlySentSms: Int32) { + self.termsUrl = termsUrl + self.monthlySentSms = monthlySentSms + } + } + case eligibleToJoin(Cons_eligibleToJoin) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -240,7 +340,27 @@ public extension Api.smsjobs { } public extension Api.smsjobs { enum Status: TypeConstructorDescription { - case status(flags: Int32, recentSent: Int32, recentSince: Int32, recentRemains: Int32, totalSent: Int32, totalSince: Int32, lastGiftSlug: String?, termsUrl: String) + public class Cons_status { + public var flags: Int32 + public var recentSent: Int32 + public var recentSince: Int32 + public var recentRemains: Int32 + public var totalSent: Int32 + public var totalSince: Int32 + public var lastGiftSlug: String? + public var termsUrl: String + public init(flags: Int32, recentSent: Int32, recentSince: Int32, recentRemains: Int32, totalSent: Int32, totalSince: Int32, lastGiftSlug: String?, termsUrl: String) { + self.flags = flags + self.recentSent = recentSent + self.recentSince = recentSince + self.recentRemains = recentRemains + self.totalSent = totalSent + self.totalSince = totalSince + self.lastGiftSlug = lastGiftSlug + self.termsUrl = termsUrl + } + } + case status(Cons_status) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -269,7 +389,55 @@ public extension Api.smsjobs { } public extension Api.stats { enum BroadcastStats: TypeConstructorDescription { - case broadcastStats(period: Api.StatsDateRangeDays, followers: Api.StatsAbsValueAndPrev, viewsPerPost: Api.StatsAbsValueAndPrev, sharesPerPost: Api.StatsAbsValueAndPrev, reactionsPerPost: Api.StatsAbsValueAndPrev, viewsPerStory: Api.StatsAbsValueAndPrev, sharesPerStory: Api.StatsAbsValueAndPrev, reactionsPerStory: Api.StatsAbsValueAndPrev, enabledNotifications: Api.StatsPercentValue, growthGraph: Api.StatsGraph, followersGraph: Api.StatsGraph, muteGraph: Api.StatsGraph, topHoursGraph: Api.StatsGraph, interactionsGraph: Api.StatsGraph, ivInteractionsGraph: Api.StatsGraph, viewsBySourceGraph: Api.StatsGraph, newFollowersBySourceGraph: Api.StatsGraph, languagesGraph: Api.StatsGraph, reactionsByEmotionGraph: Api.StatsGraph, storyInteractionsGraph: Api.StatsGraph, storyReactionsByEmotionGraph: Api.StatsGraph, recentPostsInteractions: [Api.PostInteractionCounters]) + public class Cons_broadcastStats { + public var period: Api.StatsDateRangeDays + public var followers: Api.StatsAbsValueAndPrev + public var viewsPerPost: Api.StatsAbsValueAndPrev + public var sharesPerPost: Api.StatsAbsValueAndPrev + public var reactionsPerPost: Api.StatsAbsValueAndPrev + public var viewsPerStory: Api.StatsAbsValueAndPrev + public var sharesPerStory: Api.StatsAbsValueAndPrev + public var reactionsPerStory: Api.StatsAbsValueAndPrev + public var enabledNotifications: Api.StatsPercentValue + public var growthGraph: Api.StatsGraph + public var followersGraph: Api.StatsGraph + public var muteGraph: Api.StatsGraph + public var topHoursGraph: Api.StatsGraph + public var interactionsGraph: Api.StatsGraph + public var ivInteractionsGraph: Api.StatsGraph + public var viewsBySourceGraph: Api.StatsGraph + public var newFollowersBySourceGraph: Api.StatsGraph + public var languagesGraph: Api.StatsGraph + public var reactionsByEmotionGraph: Api.StatsGraph + public var storyInteractionsGraph: Api.StatsGraph + public var storyReactionsByEmotionGraph: Api.StatsGraph + public var recentPostsInteractions: [Api.PostInteractionCounters] + public init(period: Api.StatsDateRangeDays, followers: Api.StatsAbsValueAndPrev, viewsPerPost: Api.StatsAbsValueAndPrev, sharesPerPost: Api.StatsAbsValueAndPrev, reactionsPerPost: Api.StatsAbsValueAndPrev, viewsPerStory: Api.StatsAbsValueAndPrev, sharesPerStory: Api.StatsAbsValueAndPrev, reactionsPerStory: Api.StatsAbsValueAndPrev, enabledNotifications: Api.StatsPercentValue, growthGraph: Api.StatsGraph, followersGraph: Api.StatsGraph, muteGraph: Api.StatsGraph, topHoursGraph: Api.StatsGraph, interactionsGraph: Api.StatsGraph, ivInteractionsGraph: Api.StatsGraph, viewsBySourceGraph: Api.StatsGraph, newFollowersBySourceGraph: Api.StatsGraph, languagesGraph: Api.StatsGraph, reactionsByEmotionGraph: Api.StatsGraph, storyInteractionsGraph: Api.StatsGraph, storyReactionsByEmotionGraph: Api.StatsGraph, recentPostsInteractions: [Api.PostInteractionCounters]) { + self.period = period + self.followers = followers + self.viewsPerPost = viewsPerPost + self.sharesPerPost = sharesPerPost + self.reactionsPerPost = reactionsPerPost + self.viewsPerStory = viewsPerStory + self.sharesPerStory = sharesPerStory + self.reactionsPerStory = reactionsPerStory + self.enabledNotifications = enabledNotifications + self.growthGraph = growthGraph + self.followersGraph = followersGraph + self.muteGraph = muteGraph + self.topHoursGraph = topHoursGraph + self.interactionsGraph = interactionsGraph + self.ivInteractionsGraph = ivInteractionsGraph + self.viewsBySourceGraph = viewsBySourceGraph + self.newFollowersBySourceGraph = newFollowersBySourceGraph + self.languagesGraph = languagesGraph + self.reactionsByEmotionGraph = reactionsByEmotionGraph + self.storyInteractionsGraph = storyInteractionsGraph + self.storyReactionsByEmotionGraph = storyReactionsByEmotionGraph + self.recentPostsInteractions = recentPostsInteractions + } + } + case broadcastStats(Cons_broadcastStats) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -298,7 +466,45 @@ public extension Api.stats { } public extension Api.stats { enum MegagroupStats: TypeConstructorDescription { - case megagroupStats(period: Api.StatsDateRangeDays, members: Api.StatsAbsValueAndPrev, messages: Api.StatsAbsValueAndPrev, viewers: Api.StatsAbsValueAndPrev, posters: Api.StatsAbsValueAndPrev, growthGraph: Api.StatsGraph, membersGraph: Api.StatsGraph, newMembersBySourceGraph: Api.StatsGraph, languagesGraph: Api.StatsGraph, messagesGraph: Api.StatsGraph, actionsGraph: Api.StatsGraph, topHoursGraph: Api.StatsGraph, weekdaysGraph: Api.StatsGraph, topPosters: [Api.StatsGroupTopPoster], topAdmins: [Api.StatsGroupTopAdmin], topInviters: [Api.StatsGroupTopInviter], users: [Api.User]) + public class Cons_megagroupStats { + public var period: Api.StatsDateRangeDays + public var members: Api.StatsAbsValueAndPrev + public var messages: Api.StatsAbsValueAndPrev + public var viewers: Api.StatsAbsValueAndPrev + public var posters: Api.StatsAbsValueAndPrev + public var growthGraph: Api.StatsGraph + public var membersGraph: Api.StatsGraph + public var newMembersBySourceGraph: Api.StatsGraph + public var languagesGraph: Api.StatsGraph + public var messagesGraph: Api.StatsGraph + public var actionsGraph: Api.StatsGraph + public var topHoursGraph: Api.StatsGraph + public var weekdaysGraph: Api.StatsGraph + public var topPosters: [Api.StatsGroupTopPoster] + public var topAdmins: [Api.StatsGroupTopAdmin] + public var topInviters: [Api.StatsGroupTopInviter] + public var users: [Api.User] + public init(period: Api.StatsDateRangeDays, members: Api.StatsAbsValueAndPrev, messages: Api.StatsAbsValueAndPrev, viewers: Api.StatsAbsValueAndPrev, posters: Api.StatsAbsValueAndPrev, growthGraph: Api.StatsGraph, membersGraph: Api.StatsGraph, newMembersBySourceGraph: Api.StatsGraph, languagesGraph: Api.StatsGraph, messagesGraph: Api.StatsGraph, actionsGraph: Api.StatsGraph, topHoursGraph: Api.StatsGraph, weekdaysGraph: Api.StatsGraph, topPosters: [Api.StatsGroupTopPoster], topAdmins: [Api.StatsGroupTopAdmin], topInviters: [Api.StatsGroupTopInviter], users: [Api.User]) { + self.period = period + self.members = members + self.messages = messages + self.viewers = viewers + self.posters = posters + self.growthGraph = growthGraph + self.membersGraph = membersGraph + self.newMembersBySourceGraph = newMembersBySourceGraph + self.languagesGraph = languagesGraph + self.messagesGraph = messagesGraph + self.actionsGraph = actionsGraph + self.topHoursGraph = topHoursGraph + self.weekdaysGraph = weekdaysGraph + self.topPosters = topPosters + self.topAdmins = topAdmins + self.topInviters = topInviters + self.users = users + } + } + case megagroupStats(Cons_megagroupStats) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -327,7 +533,15 @@ public extension Api.stats { } public extension Api.stats { enum MessageStats: TypeConstructorDescription { - case messageStats(viewsGraph: Api.StatsGraph, reactionsByEmotionGraph: Api.StatsGraph) + public class Cons_messageStats { + public var viewsGraph: Api.StatsGraph + public var reactionsByEmotionGraph: Api.StatsGraph + public init(viewsGraph: Api.StatsGraph, reactionsByEmotionGraph: Api.StatsGraph) { + self.viewsGraph = viewsGraph + self.reactionsByEmotionGraph = reactionsByEmotionGraph + } + } + case messageStats(Cons_messageStats) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -356,7 +570,23 @@ public extension Api.stats { } public extension Api.stats { enum PublicForwards: TypeConstructorDescription { - case publicForwards(flags: Int32, count: Int32, forwards: [Api.PublicForward], nextOffset: String?, chats: [Api.Chat], users: [Api.User]) + public class Cons_publicForwards { + public var flags: Int32 + public var count: Int32 + public var forwards: [Api.PublicForward] + public var nextOffset: String? + public var chats: [Api.Chat] + public var users: [Api.User] + public init(flags: Int32, count: Int32, forwards: [Api.PublicForward], nextOffset: String?, chats: [Api.Chat], users: [Api.User]) { + self.flags = flags + self.count = count + self.forwards = forwards + self.nextOffset = nextOffset + self.chats = chats + self.users = users + } + } + case publicForwards(Cons_publicForwards) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG @@ -385,7 +615,15 @@ public extension Api.stats { } public extension Api.stats { enum StoryStats: TypeConstructorDescription { - case storyStats(viewsGraph: Api.StatsGraph, reactionsByEmotionGraph: Api.StatsGraph) + public class Cons_storyStats { + public var viewsGraph: Api.StatsGraph + public var reactionsByEmotionGraph: Api.StatsGraph + public init(viewsGraph: Api.StatsGraph, reactionsByEmotionGraph: Api.StatsGraph) { + self.viewsGraph = viewsGraph + self.reactionsByEmotionGraph = reactionsByEmotionGraph + } + } + case storyStats(Cons_storyStats) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { #if DEBUG diff --git a/submodules/TelegramCore/Sources/State/CallSessionManager.swift b/submodules/TelegramCore/Sources/State/CallSessionManager.swift index 0934a4b02e..f5eb58ef58 100644 --- a/submodules/TelegramCore/Sources/State/CallSessionManager.swift +++ b/submodules/TelegramCore/Sources/State/CallSessionManager.swift @@ -1622,7 +1622,8 @@ private func acceptCallSession(accountPeerId: PeerId, postbox: Postbox, network: if let call = call { return postbox.transaction { transaction -> AcceptCallResult in switch call { - case let .phoneCall(phoneCall, users): + case let .phoneCall(phoneCallData): + let (phoneCall, users) = (phoneCallData.phoneCall, phoneCallData.users) updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: AccumulatedPeers(users: users)) switch phoneCall { @@ -1693,7 +1694,8 @@ private func requestCallSession(postbox: Postbox, network: Network, peerId: Peer return network.request(Api.functions.phone.requestCall(flags: callFlags, userId: inputUser, randomId: Int32(bitPattern: arc4random()), gAHash: Buffer(data: gAHash), protocol: .phoneCallProtocol(.init(flags: (1 << 0) | (1 << 1), minLayer: minLayer, maxLayer: maxLayer, libraryVersions: versions)))) |> map { result -> RequestCallSessionResult in switch result { - case let .phoneCall(phoneCall, _): + case let .phoneCall(phoneCallData): + let (phoneCall, _) = (phoneCallData.phoneCall, phoneCallData.users) switch phoneCall { case let .phoneCallRequested(phoneCallRequestedData): let (id, accessHash) = (phoneCallRequestedData.id, phoneCallRequestedData.accessHash) @@ -1737,7 +1739,8 @@ private func confirmCallSession(network: Network, stableId: CallSessionStableId, |> map { result -> Api.PhoneCall? in if let result = result { switch result { - case let .phoneCall(phoneCall, _): + case let .phoneCall(phoneCallData): + let (phoneCall, _) = (phoneCallData.phoneCall, phoneCallData.users) return phoneCall } } else { diff --git a/submodules/TelegramCore/Sources/State/ChannelBoost.swift b/submodules/TelegramCore/Sources/State/ChannelBoost.swift index fda0d2ab97..d9f7df244a 100644 --- a/submodules/TelegramCore/Sources/State/ChannelBoost.swift +++ b/submodules/TelegramCore/Sources/State/ChannelBoost.swift @@ -100,7 +100,8 @@ func _internal_getChannelBoostStatus(account: Account, peerId: PeerId) -> Signal return nil } switch result { - case let .boostsStatus(flags, level, currentLevelBoosts, boosts, giftBoosts, nextLevelBoosts, premiumAudience, boostUrl, prepaidGiveaways, myBoostSlots): + case let .boostsStatus(boostsStatusData): + let (flags, level, currentLevelBoosts, boosts, giftBoosts, nextLevelBoosts, premiumAudience, boostUrl, prepaidGiveaways, myBoostSlots) = (boostsStatusData.flags, boostsStatusData.level, boostsStatusData.currentLevelBoosts, boostsStatusData.boosts, boostsStatusData.giftBoosts, boostsStatusData.nextLevelBoosts, boostsStatusData.premiumAudience, boostsStatusData.boostUrl, boostsStatusData.prepaidGiveaways, boostsStatusData.myBoostSlots) let _ = myBoostSlots return ChannelBoostStatus(level: Int(level), boosts: Int(boosts), giftBoosts: giftBoosts.flatMap(Int.init), currentLevelBoosts: Int(currentLevelBoosts), nextLevelBoosts: nextLevelBoosts.flatMap(Int.init), premiumAudience: premiumAudience.flatMap({ StatsPercentValue(apiPercentValue: $0) }), url: boostUrl, prepaidGiveaways: prepaidGiveaways?.map({ PrepaidGiveaway(apiPrepaidGiveaway: $0) }) ?? [], boostedByMe: (flags & (1 << 2)) != 0) } @@ -274,7 +275,8 @@ private final class ChannelBoostersContextImpl { return ([], 0, nil) } switch result { - case let .boostsList(_, count, boosts, nextOffset, users): + case let .boostsList(boostsListData): + let (_, count, boosts, nextOffset, users) = (boostsListData.flags, boostsListData.count, boostsListData.boosts, boostsListData.nextOffset, boostsListData.users) updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: AccumulatedPeers(users: users)) var resultBoosts: [ChannelBoostersContext.State.Boost] = [] for boost in boosts { @@ -547,7 +549,8 @@ extension MyBoostStatus { init(apiMyBoostStatus: Api.premium.MyBoosts, accountPeerId: PeerId, transaction: Transaction) { var boostsResult: [MyBoostStatus.Boost] = [] switch apiMyBoostStatus { - case let .myBoosts(myBoosts, chats, users): + case let .myBoosts(myBoostsData): + let (myBoosts, chats, users) = (myBoostsData.myBoosts, myBoostsData.chats, myBoostsData.users) let parsedPeers = AccumulatedPeers(transaction: transaction, chats: chats, users: users) updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: parsedPeers) for boost in myBoosts { diff --git a/submodules/TelegramCore/Sources/Statistics/MessageStatistics.swift b/submodules/TelegramCore/Sources/Statistics/MessageStatistics.swift index 81e0e51d96..8b490736fb 100644 --- a/submodules/TelegramCore/Sources/Statistics/MessageStatistics.swift +++ b/submodules/TelegramCore/Sources/Statistics/MessageStatistics.swift @@ -98,7 +98,8 @@ private func requestMessageStats(postbox: Postbox, network: Network, messageId: return signal |> mapToSignal { result -> Signal in - if case let .messageStats(apiInteractionsGraph, apiReactionsGraph) = result { + if case let .messageStats(messageStatsData) = result { + let (apiInteractionsGraph, apiReactionsGraph) = (messageStatsData.viewsGraph, messageStatsData.reactionsByEmotionGraph) let interactionsGraph = StatsGraph(apiStatsGraph: apiInteractionsGraph) var interactionsGraphDelta: Int64 = 86400 if case let .Loaded(_, data) = interactionsGraph { diff --git a/submodules/TelegramCore/Sources/Statistics/PeerStatistics.swift b/submodules/TelegramCore/Sources/Statistics/PeerStatistics.swift index acc639122f..00fb5a033b 100644 --- a/submodules/TelegramCore/Sources/Statistics/PeerStatistics.swift +++ b/submodules/TelegramCore/Sources/Statistics/PeerStatistics.swift @@ -836,7 +836,8 @@ private func requestGroupStats(accountPeerId: PeerId, postbox: Postbox, network: return signal |> mapToSignal { result -> Signal in return postbox.transaction { transaction -> GroupStats? in - if case let .megagroupStats(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, users) = result { + if case let .megagroupStats(megagroupStatsData) = result { + let users = megagroupStatsData.users updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: AccumulatedPeers(users: users)) } return GroupStats(apiMegagroupStats: result) @@ -1203,7 +1204,8 @@ extension ChannelStatsPostInteractions { extension ChannelStats { init(apiBroadcastStats: Api.stats.BroadcastStats, peerId: PeerId) { switch apiBroadcastStats { - case let .broadcastStats(period, followers, viewsPerPost, sharesPerPost, reactionsPerPost, viewsPerStory, sharesPerStory, reactionsPerStory, enabledNotifications, apiGrowthGraph, apiFollowersGraph, apiMuteGraph, apiTopHoursGraph, apiInteractionsGraph, apiInstantViewInteractionsGraph, apiViewsBySourceGraph, apiNewFollowersBySourceGraph, apiLanguagesGraph, apiReactionsByEmotionGraph, apiStoryInteractionsGraph, apiStoryReactionsByEmotionGraph, recentPostInteractions): + case let .broadcastStats(broadcastStatsData): + let (period, followers, viewsPerPost, sharesPerPost, reactionsPerPost, viewsPerStory, sharesPerStory, reactionsPerStory, enabledNotifications, apiGrowthGraph, apiFollowersGraph, apiMuteGraph, apiTopHoursGraph, apiInteractionsGraph, apiInstantViewInteractionsGraph, apiViewsBySourceGraph, apiNewFollowersBySourceGraph, apiLanguagesGraph, apiReactionsByEmotionGraph, apiStoryInteractionsGraph, apiStoryReactionsByEmotionGraph, recentPostInteractions) = (broadcastStatsData.period, broadcastStatsData.followers, broadcastStatsData.viewsPerPost, broadcastStatsData.sharesPerPost, broadcastStatsData.reactionsPerPost, broadcastStatsData.viewsPerStory, broadcastStatsData.sharesPerStory, broadcastStatsData.reactionsPerStory, broadcastStatsData.enabledNotifications, broadcastStatsData.growthGraph, broadcastStatsData.followersGraph, broadcastStatsData.muteGraph, broadcastStatsData.topHoursGraph, broadcastStatsData.interactionsGraph, broadcastStatsData.ivInteractionsGraph, broadcastStatsData.viewsBySourceGraph, broadcastStatsData.newFollowersBySourceGraph, broadcastStatsData.languagesGraph, broadcastStatsData.reactionsByEmotionGraph, broadcastStatsData.storyInteractionsGraph, broadcastStatsData.storyReactionsByEmotionGraph, broadcastStatsData.recentPostsInteractions) let growthGraph = StatsGraph(apiStatsGraph: apiGrowthGraph) let isEmpty = growthGraph.isEmpty @@ -1267,9 +1269,10 @@ extension GroupStatsTopInviter { extension GroupStats { init(apiMegagroupStats: Api.stats.MegagroupStats) { switch apiMegagroupStats { - case let .megagroupStats(period, members, messages, viewers, posters, apiGrowthGraph, apiMembersGraph, apiNewMembersBySourceGraph, apiLanguagesGraph, apiMessagesGraph, apiActionsGraph, apiTopHoursGraph, apiTopWeekdaysGraph, topPosters, topAdmins, topInviters, _): + case let .megagroupStats(megagroupStatsData): + let (period, members, messages, viewers, posters, apiGrowthGraph, apiMembersGraph, apiNewMembersBySourceGraph, apiLanguagesGraph, apiMessagesGraph, apiActionsGraph, apiTopHoursGraph, apiTopWeekdaysGraph, topPosters, topAdmins, topInviters) = (megagroupStatsData.period, megagroupStatsData.members, megagroupStatsData.messages, megagroupStatsData.viewers, megagroupStatsData.posters, megagroupStatsData.growthGraph, megagroupStatsData.membersGraph, megagroupStatsData.newMembersBySourceGraph, megagroupStatsData.languagesGraph, megagroupStatsData.messagesGraph, megagroupStatsData.actionsGraph, megagroupStatsData.topHoursGraph, megagroupStatsData.weekdaysGraph, megagroupStatsData.topPosters, megagroupStatsData.topAdmins, megagroupStatsData.topInviters) let growthGraph = StatsGraph(apiStatsGraph: apiGrowthGraph) - + self.init(period: StatsDateRange(apiStatsDateRangeDays: period), members: StatsValue(apiStatsAbsValueAndPrev: members), messages: StatsValue(apiStatsAbsValueAndPrev: messages), viewers: StatsValue(apiStatsAbsValueAndPrev: viewers), posters: StatsValue(apiStatsAbsValueAndPrev: posters), growthGraph: growthGraph, membersGraph: StatsGraph(apiStatsGraph: apiMembersGraph), newMembersBySourceGraph: StatsGraph(apiStatsGraph: apiNewMembersBySourceGraph), languagesGraph: StatsGraph(apiStatsGraph: apiLanguagesGraph), messagesGraph: StatsGraph(apiStatsGraph: apiMessagesGraph), actionsGraph: StatsGraph(apiStatsGraph: apiActionsGraph), topHoursGraph: StatsGraph(apiStatsGraph: apiTopHoursGraph), topWeekdaysGraph: StatsGraph(apiStatsGraph: apiTopWeekdaysGraph), topPosters: topPosters.map { GroupStatsTopPoster(apiStatsGroupTopPoster: $0) }, topAdmins: topAdmins.map { GroupStatsTopAdmin(apiStatsGroupTopAdmin: $0) }, topInviters: topInviters.map { GroupStatsTopInviter(apiStatsGroupTopInviter: $0) }) } } diff --git a/submodules/TelegramCore/Sources/Statistics/StoryStatistics.swift b/submodules/TelegramCore/Sources/Statistics/StoryStatistics.swift index 591d1c9da2..d4610f4f05 100644 --- a/submodules/TelegramCore/Sources/Statistics/StoryStatistics.swift +++ b/submodules/TelegramCore/Sources/Statistics/StoryStatistics.swift @@ -68,7 +68,8 @@ private func requestStoryStats(accountPeerId: PeerId, postbox: Postbox, network: return signal |> mapToSignal { result -> Signal in - if case let .storyStats(apiInteractionsGraph, apiReactionsGraph) = result { + if case let .storyStats(storyStatsData) = result { + let (apiInteractionsGraph, apiReactionsGraph) = (storyStatsData.viewsGraph, storyStatsData.reactionsByEmotionGraph) let interactionsGraph = StatsGraph(apiStatsGraph: apiInteractionsGraph) var interactionsGraphDelta: Int64 = 86400 if case let .Loaded(_, data) = interactionsGraph { @@ -294,7 +295,8 @@ private final class StoryStatsPublicForwardsContextImpl { return ([], 0, nil) } switch result { - case let .publicForwards(_, count, forwards, nextOffset, chats, users): + case let .publicForwards(publicForwardsData): + let (count, forwards, nextOffset, chats, users) = (publicForwardsData.count, publicForwardsData.forwards, publicForwardsData.nextOffset, publicForwardsData.chats, publicForwardsData.users) var peers: [PeerId: Peer] = [:] for user in users { if let user = TelegramUser.merge(transaction.getPeer(user.peerId) as? TelegramUser, rhs: user) { diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Calls/GroupCalls.swift b/submodules/TelegramCore/Sources/TelegramEngine/Calls/GroupCalls.swift index b393271b4b..7f9c1e88e8 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Calls/GroupCalls.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Calls/GroupCalls.swift @@ -218,7 +218,8 @@ func _internal_getCurrentGroupCall(account: Account, reference: InternalGroupCal } |> mapToSignal { result -> Signal in switch result { - case let .groupCall(call, participants, _, chats, users): + case let .groupCall(groupCallData): + let (call, participants, chats, users) = (groupCallData.call, groupCallData.participants, groupCallData.chats, groupCallData.users) return account.postbox.transaction { transaction -> GroupCallSummary? in guard let info = GroupCallInfo(call) else { return nil @@ -278,7 +279,8 @@ func _internal_getCurrentGroupCallInfo(account: Account, reference: InternalGrou return .single(nil) } switch result { - case let .groupCall(call, participants, _, chats, users): + case let .groupCall(groupCallData): + let (call, participants, chats, users) = (groupCallData.call, groupCallData.participants, groupCallData.chats, groupCallData.users) return account.postbox.transaction { transaction -> (participants: [PeerId], duration: Int32?)? in if case let .groupCallDiscarded(groupCallDiscardedData) = call { let (_, _, duration) = (groupCallDiscardedData.id, groupCallDiscardedData.accessHash, groupCallDiscardedData.duration) @@ -557,7 +559,8 @@ func _internal_getGroupCallParticipants(account: Account, reference: InternalGro if let result { switch result { - case let .groupParticipants(count, participants, nextOffset, chats, users, apiVersion): + case let .groupParticipants(groupParticipantsData): + let (count, participants, nextOffset, chats, users, apiVersion) = (groupParticipantsData.count, groupParticipantsData.participants, groupParticipantsData.nextOffset, groupParticipantsData.chats, groupParticipantsData.users, groupParticipantsData.version) totalCount = Int(count) version = apiVersion @@ -2850,7 +2853,8 @@ func _internal_groupCallInviteLinks(account: Account, reference: InternalGroupCa return .single(nil) } |> mapToSignal { result -> Signal in - if let result = result, case let .exportedGroupCallInvite(link) = result { + if let result = result, case let .exportedGroupCallInvite(exportedGroupCallInviteData) = result { + let link = exportedGroupCallInviteData.link return .single(link) } return .single(nil) @@ -2862,7 +2866,8 @@ func _internal_groupCallInviteLinks(account: Account, reference: InternalGroupCa return .single(nil) } |> mapToSignal { result -> Signal in - if let result = result, case let .exportedGroupCallInvite(link) = result { + if let result = result, case let .exportedGroupCallInvite(exportedGroupCallInviteData) = result { + let link = exportedGroupCallInviteData.link return .single(link) } return .single(nil) @@ -2921,7 +2926,8 @@ func _internal_groupCallDisplayAsAvailablePeers(accountPeerId: PeerId, network: return .single([]) } switch result { - case let .joinAsPeers(_, chats, users): + case let .joinAsPeers(joinAsPeersData): + let (chats, users) = (joinAsPeersData.chats, joinAsPeersData.users) return postbox.transaction { transaction -> [FoundPeer] in var subscribers: [PeerId: Int32] = [:] let parsedPeers = AccumulatedPeers(transaction: transaction, chats: chats, users: users) @@ -3080,7 +3086,8 @@ func _internal_getAudioBroadcastDataSource(account: Account, callId: Int64, acce return .single(nil) } switch result { - case let .groupCall(call, _, _, _, _): + case let .groupCall(groupCallData): + let call = groupCallData.call if let datacenterId = GroupCallInfo(call)?.streamDcId.flatMap(Int.init) { return account.network.download(datacenterId: datacenterId, isMedia: true, tag: nil) |> map { download -> AudioBroadcastDataSource? in @@ -3311,7 +3318,8 @@ func _internal_getGroupCallStreamCredentials(account: Account, peerId: PeerId, i } |> map { result -> GroupCallStreamCredentials in switch result { - case let .groupCallStreamRtmpUrl(url, key): + case let .groupCallStreamRtmpUrl(groupCallStreamRtmpUrlData): + let (url, key) = (groupCallStreamRtmpUrlData.url, groupCallStreamRtmpUrlData.key) return GroupCallStreamCredentials(url: url, streamKey: key) } } @@ -3359,7 +3367,8 @@ func _internal_createConferenceCall(postbox: Postbox, network: Network, accountP } |> castError(CreateConferenceCallError.self) |> mapToSignal { result -> Signal in - if let result, case let .exportedGroupCallInvite(link) = result { + if let result, case let .exportedGroupCallInvite(exportedGroupCallInviteData) = result { + let link = exportedGroupCallInviteData.link let slug = link.components(separatedBy: "/").last ?? link return .single(EngineCreatedGroupCall( slug: slug, @@ -4124,7 +4133,8 @@ public final class GroupCallMessagesContext { return postbox.transaction { transaction -> (Api.phone.GroupCallStars, [PeerId: Peer])? in var peers: [PeerId: Peer] = [:] switch result { - case let .groupCallStars(_, topDonors, chats, users): + case let .groupCallStars(groupCallStarsData): + let (topDonors, chats, users) = (groupCallStarsData.topDonors, groupCallStarsData.chats, groupCallStarsData.users) updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: AccumulatedPeers(chats: chats, users: users)) for topDonor in topDonors { switch topDonor { @@ -4147,7 +4157,8 @@ public final class GroupCallMessagesContext { } if let (result, _) = result { switch result { - case let .groupCallStars(totalStars, topDonors, _, _): + case let .groupCallStars(groupCallStarsData): + let (totalStars, topDonors) = (groupCallStarsData.totalStars, groupCallStarsData.topDonors) var state = self.state state.topStars = topDonors.map { topDonor in switch topDonor { diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Calls/TelegramEngineCalls.swift b/submodules/TelegramCore/Sources/TelegramEngine/Calls/TelegramEngineCalls.swift index 2c3495474b..15ff6759bf 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Calls/TelegramEngineCalls.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Calls/TelegramEngineCalls.swift @@ -161,7 +161,8 @@ public extension TelegramEngine { return dataSource.download.request(Api.functions.phone.getGroupCallStreamChannels(call: .inputGroupCall(.init(id: callId, accessHash: accessHash)))) |> mapToSignal { result -> Signal in switch result { - case let .groupCallStreamChannels(channels): + case let .groupCallStreamChannels(groupCallStreamChannelsData): + let channels = groupCallStreamChannelsData.channels let state = EngineCallStreamState(channels: channels.map { channel -> EngineCallStreamState.Channel in switch channel { case let .groupCallStreamChannel(groupCallStreamChannelData): diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/PeerPhotoUpdater.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/PeerPhotoUpdater.swift index 4b33ede2bc..d83df9c872 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Peers/PeerPhotoUpdater.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/PeerPhotoUpdater.swift @@ -235,7 +235,8 @@ func _internal_updatePeerPhotoInternal(postbox: Postbox, network: Network, state var videoRepresentations: [TelegramMediaImage.VideoRepresentation] = [] var image: TelegramMediaImage? switch photo { - case let .photo(apiPhoto, _): + case let .photo(photoData): + let (apiPhoto, _) = (photoData.photo, photoData.users) image = telegramMediaImageFromApiPhoto(apiPhoto) switch apiPhoto { case .photoEmpty: @@ -451,7 +452,8 @@ func _internal_updatePeerPhotoInternal(postbox: Postbox, network: Network, state var updatedImage: TelegramMediaImage? var representations: [TelegramMediaImageRepresentation] = [] switch photo { - case let .photo(apiPhoto, _): + case let .photo(photoData): + let (apiPhoto, _) = (photoData.photo, photoData.users) updatedImage = telegramMediaImageFromApiPhoto(apiPhoto) switch apiPhoto { case .photoEmpty: @@ -502,7 +504,8 @@ func _internal_updatePeerPhotoInternal(postbox: Postbox, network: Network, state } else { var updatedUsers: [TelegramUser] = [] switch photo { - case let .photo(_, apiUsers): + case let .photo(photoData): + let (_, apiUsers) = (photoData.photo, photoData.users) updatedUsers = apiUsers.map { TelegramUser(user: $0) } } return postbox.transaction { transaction -> UpdatePeerPhotoStatus in @@ -585,7 +588,8 @@ func _internal_updatePeerPhotoExisting(network: Network, reference: TelegramMedi return .complete() } |> mapToSignal { photo -> Signal in - if case let .photo(photo, _) = photo { + if case let .photo(photoData) = photo { + let (photo, _) = (photoData.photo, photoData.users) return .single(telegramMediaImageFromApiPhoto(photo)) } else { return .complete() diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/RequestUserPhotos.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/RequestUserPhotos.swift index 94247461b4..f2236fafab 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Peers/RequestUserPhotos.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/RequestUserPhotos.swift @@ -40,10 +40,12 @@ func _internal_requestPeerPhotos(accountPeerId: PeerId, postbox: Postbox, networ let totalCount:Int let photos: [Api.Photo] switch result { - case let .photos(photosValue, _): + case let .photos(photosData): + let (photosValue, _) = (photosData.photos, photosData.users) photos = photosValue totalCount = photos.count - case let .photosSlice(count, photosValue, _): + case let .photosSlice(photosSliceData): + let (count, photosValue, _) = (photosSliceData.count, photosSliceData.photos, photosSliceData.users) photos = photosValue totalCount = Int(count) }