Refactor constructor use sites for types 210-220 to struct pattern

Types refactored:
- myBoost, nearestDc, notificationSound*, notifyForumTopic, notifyPeer
- outboxReadDate, page, pageBlock*, pageCaption, pageListItem*

Files modified (8):
- ApiUtils/InstantPage.swift (33 constructors)
- ApiUtils/TelegramPeerNotificationSettings.swift (2 constructors)
- ForumChannels.swift (1 constructor)
- State/AccountStateManagementUtils.swift (2 constructors)
- State/ChannelBoost.swift (1 constructor)
- State/UpdatesApiUtils.swift (1 constructor)
- TelegramEngine/Messages/MessageReadStats.swift (1 constructor)
- TelegramEngine/Peers/NotificationExceptionsList.swift (1 constructor)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Isaac 2026-01-18 01:15:19 +08:00
parent 94b53b190a
commit 3e5775b48e
11 changed files with 469 additions and 85 deletions

View file

@ -625,7 +625,23 @@ public extension Api {
}
public extension Api {
enum MyBoost: TypeConstructorDescription {
case myBoost(flags: Int32, slot: Int32, peer: Api.Peer?, date: Int32, expires: Int32, cooldownUntilDate: Int32?)
public class Cons_myBoost {
public var flags: Int32
public var slot: Int32
public var peer: Api.Peer?
public var date: Int32
public var expires: Int32
public var cooldownUntilDate: Int32?
public init(flags: Int32, slot: Int32, peer: Api.Peer?, date: Int32, expires: Int32, cooldownUntilDate: Int32?) {
self.flags = flags
self.slot = slot
self.peer = peer
self.date = date
self.expires = expires
self.cooldownUntilDate = cooldownUntilDate
}
}
case myBoost(Cons_myBoost)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG
@ -654,7 +670,17 @@ public extension Api {
}
public extension Api {
enum NearestDc: TypeConstructorDescription {
case nearestDc(country: String, thisDc: Int32, nearestDc: Int32)
public class Cons_nearestDc {
public var country: String
public var thisDc: Int32
public var nearestDc: Int32
public init(country: String, thisDc: Int32, nearestDc: Int32) {
self.country = country
self.thisDc = thisDc
self.nearestDc = nearestDc
}
}
case nearestDc(Cons_nearestDc)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG

View file

@ -1,9 +1,23 @@
public extension Api {
enum NotificationSound: TypeConstructorDescription {
public class Cons_notificationSoundLocal {
public var title: String
public var data: String
public init(title: String, data: String) {
self.title = title
self.data = data
}
}
public class Cons_notificationSoundRingtone {
public var id: Int64
public init(id: Int64) {
self.id = id
}
}
case notificationSoundDefault
case notificationSoundLocal(title: String, data: String)
case notificationSoundLocal(Cons_notificationSoundLocal)
case notificationSoundNone
case notificationSoundRingtone(id: Int64)
case notificationSoundRingtone(Cons_notificationSoundRingtone)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG
@ -53,10 +67,24 @@ public extension Api {
}
public extension Api {
enum NotifyPeer: TypeConstructorDescription {
public class Cons_notifyForumTopic {
public var peer: Api.Peer
public var topMsgId: Int32
public init(peer: Api.Peer, topMsgId: Int32) {
self.peer = peer
self.topMsgId = topMsgId
}
}
public class Cons_notifyPeer {
public var peer: Api.Peer
public init(peer: Api.Peer) {
self.peer = peer
}
}
case notifyBroadcasts
case notifyChats
case notifyForumTopic(peer: Api.Peer, topMsgId: Int32)
case notifyPeer(peer: Api.Peer)
case notifyForumTopic(Cons_notifyForumTopic)
case notifyPeer(Cons_notifyPeer)
case notifyUsers
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
@ -114,7 +142,13 @@ public extension Api {
}
public extension Api {
enum OutboxReadDate: TypeConstructorDescription {
case outboxReadDate(date: Int32)
public class Cons_outboxReadDate {
public var date: Int32
public init(date: Int32) {
self.date = date
}
}
case outboxReadDate(Cons_outboxReadDate)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG
@ -143,7 +177,23 @@ public extension Api {
}
public extension Api {
enum Page: TypeConstructorDescription {
case page(flags: Int32, url: String, blocks: [Api.PageBlock], photos: [Api.Photo], documents: [Api.Document], views: Int32?)
public class Cons_page {
public var flags: Int32
public var url: String
public var blocks: [Api.PageBlock]
public var photos: [Api.Photo]
public var documents: [Api.Document]
public var views: Int32?
public init(flags: Int32, url: String, blocks: [Api.PageBlock], photos: [Api.Photo], documents: [Api.Document], views: Int32?) {
self.flags = flags
self.url = url
self.blocks = blocks
self.photos = photos
self.documents = documents
self.views = views
}
}
case page(Cons_page)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG
@ -172,35 +222,265 @@ public extension Api {
}
public extension Api {
indirect enum PageBlock: TypeConstructorDescription {
case pageBlockAnchor(name: String)
case pageBlockAudio(audioId: Int64, caption: Api.PageCaption)
case pageBlockAuthorDate(author: Api.RichText, publishedDate: Int32)
case pageBlockBlockquote(text: Api.RichText, caption: Api.RichText)
case pageBlockChannel(channel: Api.Chat)
case pageBlockCollage(items: [Api.PageBlock], caption: Api.PageCaption)
case pageBlockCover(cover: Api.PageBlock)
case pageBlockDetails(flags: Int32, blocks: [Api.PageBlock], title: Api.RichText)
public class Cons_pageBlockAnchor {
public var name: String
public init(name: String) {
self.name = name
}
}
public class Cons_pageBlockAudio {
public var audioId: Int64
public var caption: Api.PageCaption
public init(audioId: Int64, caption: Api.PageCaption) {
self.audioId = audioId
self.caption = caption
}
}
public class Cons_pageBlockAuthorDate {
public var author: Api.RichText
public var publishedDate: Int32
public init(author: Api.RichText, publishedDate: Int32) {
self.author = author
self.publishedDate = publishedDate
}
}
public class Cons_pageBlockBlockquote {
public var text: Api.RichText
public var caption: Api.RichText
public init(text: Api.RichText, caption: Api.RichText) {
self.text = text
self.caption = caption
}
}
public class Cons_pageBlockChannel {
public var channel: Api.Chat
public init(channel: Api.Chat) {
self.channel = channel
}
}
public class Cons_pageBlockCollage {
public var items: [Api.PageBlock]
public var caption: Api.PageCaption
public init(items: [Api.PageBlock], caption: Api.PageCaption) {
self.items = items
self.caption = caption
}
}
public class Cons_pageBlockCover {
public var cover: Api.PageBlock
public init(cover: Api.PageBlock) {
self.cover = cover
}
}
public class Cons_pageBlockDetails {
public var flags: Int32
public var blocks: [Api.PageBlock]
public var title: Api.RichText
public init(flags: Int32, blocks: [Api.PageBlock], title: Api.RichText) {
self.flags = flags
self.blocks = blocks
self.title = title
}
}
public class Cons_pageBlockEmbed {
public var flags: Int32
public var url: String?
public var html: String?
public var posterPhotoId: Int64?
public var w: Int32?
public var h: Int32?
public var caption: Api.PageCaption
public init(flags: Int32, url: String?, html: String?, posterPhotoId: Int64?, w: Int32?, h: Int32?, caption: Api.PageCaption) {
self.flags = flags
self.url = url
self.html = html
self.posterPhotoId = posterPhotoId
self.w = w
self.h = h
self.caption = caption
}
}
public class Cons_pageBlockEmbedPost {
public var url: String
public var webpageId: Int64
public var authorPhotoId: Int64
public var author: String
public var date: Int32
public var blocks: [Api.PageBlock]
public var caption: Api.PageCaption
public init(url: String, webpageId: Int64, authorPhotoId: Int64, author: String, date: Int32, blocks: [Api.PageBlock], caption: Api.PageCaption) {
self.url = url
self.webpageId = webpageId
self.authorPhotoId = authorPhotoId
self.author = author
self.date = date
self.blocks = blocks
self.caption = caption
}
}
public class Cons_pageBlockFooter {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockHeader {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockKicker {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockList {
public var items: [Api.PageListItem]
public init(items: [Api.PageListItem]) {
self.items = items
}
}
public class Cons_pageBlockMap {
public var geo: Api.GeoPoint
public var zoom: Int32
public var w: Int32
public var h: Int32
public var caption: Api.PageCaption
public init(geo: Api.GeoPoint, zoom: Int32, w: Int32, h: Int32, caption: Api.PageCaption) {
self.geo = geo
self.zoom = zoom
self.w = w
self.h = h
self.caption = caption
}
}
public class Cons_pageBlockOrderedList {
public var items: [Api.PageListOrderedItem]
public init(items: [Api.PageListOrderedItem]) {
self.items = items
}
}
public class Cons_pageBlockParagraph {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockPhoto {
public var flags: Int32
public var photoId: Int64
public var caption: Api.PageCaption
public var url: String?
public var webpageId: Int64?
public init(flags: Int32, photoId: Int64, caption: Api.PageCaption, url: String?, webpageId: Int64?) {
self.flags = flags
self.photoId = photoId
self.caption = caption
self.url = url
self.webpageId = webpageId
}
}
public class Cons_pageBlockPreformatted {
public var text: Api.RichText
public var language: String
public init(text: Api.RichText, language: String) {
self.text = text
self.language = language
}
}
public class Cons_pageBlockPullquote {
public var text: Api.RichText
public var caption: Api.RichText
public init(text: Api.RichText, caption: Api.RichText) {
self.text = text
self.caption = caption
}
}
public class Cons_pageBlockRelatedArticles {
public var title: Api.RichText
public var articles: [Api.PageRelatedArticle]
public init(title: Api.RichText, articles: [Api.PageRelatedArticle]) {
self.title = title
self.articles = articles
}
}
public class Cons_pageBlockSlideshow {
public var items: [Api.PageBlock]
public var caption: Api.PageCaption
public init(items: [Api.PageBlock], caption: Api.PageCaption) {
self.items = items
self.caption = caption
}
}
public class Cons_pageBlockSubheader {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockSubtitle {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockTable {
public var flags: Int32
public var title: Api.RichText
public var rows: [Api.PageTableRow]
public init(flags: Int32, title: Api.RichText, rows: [Api.PageTableRow]) {
self.flags = flags
self.title = title
self.rows = rows
}
}
public class Cons_pageBlockTitle {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
public class Cons_pageBlockVideo {
public var flags: Int32
public var videoId: Int64
public var caption: Api.PageCaption
public init(flags: Int32, videoId: Int64, caption: Api.PageCaption) {
self.flags = flags
self.videoId = videoId
self.caption = caption
}
}
case pageBlockAnchor(Cons_pageBlockAnchor)
case pageBlockAudio(Cons_pageBlockAudio)
case pageBlockAuthorDate(Cons_pageBlockAuthorDate)
case pageBlockBlockquote(Cons_pageBlockBlockquote)
case pageBlockChannel(Cons_pageBlockChannel)
case pageBlockCollage(Cons_pageBlockCollage)
case pageBlockCover(Cons_pageBlockCover)
case pageBlockDetails(Cons_pageBlockDetails)
case pageBlockDivider
case pageBlockEmbed(flags: Int32, url: String?, html: String?, posterPhotoId: Int64?, w: Int32?, h: Int32?, caption: Api.PageCaption)
case pageBlockEmbedPost(url: String, webpageId: Int64, authorPhotoId: Int64, author: String, date: Int32, blocks: [Api.PageBlock], caption: Api.PageCaption)
case pageBlockFooter(text: Api.RichText)
case pageBlockHeader(text: Api.RichText)
case pageBlockKicker(text: Api.RichText)
case pageBlockList(items: [Api.PageListItem])
case pageBlockMap(geo: Api.GeoPoint, zoom: Int32, w: Int32, h: Int32, caption: Api.PageCaption)
case pageBlockOrderedList(items: [Api.PageListOrderedItem])
case pageBlockParagraph(text: Api.RichText)
case pageBlockPhoto(flags: Int32, photoId: Int64, caption: Api.PageCaption, url: String?, webpageId: Int64?)
case pageBlockPreformatted(text: Api.RichText, language: String)
case pageBlockPullquote(text: Api.RichText, caption: Api.RichText)
case pageBlockRelatedArticles(title: Api.RichText, articles: [Api.PageRelatedArticle])
case pageBlockSlideshow(items: [Api.PageBlock], caption: Api.PageCaption)
case pageBlockSubheader(text: Api.RichText)
case pageBlockSubtitle(text: Api.RichText)
case pageBlockTable(flags: Int32, title: Api.RichText, rows: [Api.PageTableRow])
case pageBlockTitle(text: Api.RichText)
case pageBlockEmbed(Cons_pageBlockEmbed)
case pageBlockEmbedPost(Cons_pageBlockEmbedPost)
case pageBlockFooter(Cons_pageBlockFooter)
case pageBlockHeader(Cons_pageBlockHeader)
case pageBlockKicker(Cons_pageBlockKicker)
case pageBlockList(Cons_pageBlockList)
case pageBlockMap(Cons_pageBlockMap)
case pageBlockOrderedList(Cons_pageBlockOrderedList)
case pageBlockParagraph(Cons_pageBlockParagraph)
case pageBlockPhoto(Cons_pageBlockPhoto)
case pageBlockPreformatted(Cons_pageBlockPreformatted)
case pageBlockPullquote(Cons_pageBlockPullquote)
case pageBlockRelatedArticles(Cons_pageBlockRelatedArticles)
case pageBlockSlideshow(Cons_pageBlockSlideshow)
case pageBlockSubheader(Cons_pageBlockSubheader)
case pageBlockSubtitle(Cons_pageBlockSubtitle)
case pageBlockTable(Cons_pageBlockTable)
case pageBlockTitle(Cons_pageBlockTitle)
case pageBlockUnsupported
case pageBlockVideo(flags: Int32, videoId: Int64, caption: Api.PageCaption)
case pageBlockVideo(Cons_pageBlockVideo)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG

View file

@ -1,6 +1,14 @@
public extension Api {
indirect enum PageCaption: TypeConstructorDescription {
case pageCaption(text: Api.RichText, credit: Api.RichText)
public class Cons_pageCaption {
public var text: Api.RichText
public var credit: Api.RichText
public init(text: Api.RichText, credit: Api.RichText) {
self.text = text
self.credit = credit
}
}
case pageCaption(Cons_pageCaption)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG
@ -29,8 +37,20 @@ public extension Api {
}
public extension Api {
indirect enum PageListItem: TypeConstructorDescription {
case pageListItemBlocks(blocks: [Api.PageBlock])
case pageListItemText(text: Api.RichText)
public class Cons_pageListItemBlocks {
public var blocks: [Api.PageBlock]
public init(blocks: [Api.PageBlock]) {
self.blocks = blocks
}
}
public class Cons_pageListItemText {
public var text: Api.RichText
public init(text: Api.RichText) {
self.text = text
}
}
case pageListItemBlocks(Cons_pageListItemBlocks)
case pageListItemText(Cons_pageListItemText)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG
@ -66,8 +86,24 @@ public extension Api {
}
public extension Api {
indirect enum PageListOrderedItem: TypeConstructorDescription {
case pageListOrderedItemBlocks(num: String, blocks: [Api.PageBlock])
case pageListOrderedItemText(num: String, text: Api.RichText)
public class Cons_pageListOrderedItemBlocks {
public var num: String
public var blocks: [Api.PageBlock]
public init(num: String, blocks: [Api.PageBlock]) {
self.num = num
self.blocks = blocks
}
}
public class Cons_pageListOrderedItemText {
public var num: String
public var text: Api.RichText
public init(num: String, text: Api.RichText) {
self.num = num
self.text = text
}
}
case pageListOrderedItemBlocks(Cons_pageListOrderedItemBlocks)
case pageListOrderedItemText(Cons_pageListOrderedItemText)
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
#if DEBUG

View file

@ -6,7 +6,8 @@ import TelegramApi
extension InstantPageCaption {
convenience init(apiCaption: Api.PageCaption) {
switch apiCaption {
case let .pageCaption(text, credit):
case let .pageCaption(pageCaptionData):
let (text, credit) = (pageCaptionData.text, pageCaptionData.credit)
self.init(text: RichText(apiText: text), credit: RichText(apiText: credit))
}
}
@ -28,18 +29,22 @@ public extension InstantPageListItem {
extension InstantPageListItem {
init(apiListItem: Api.PageListItem) {
switch apiListItem {
case let .pageListItemText(text):
case let .pageListItemText(pageListItemTextData):
let text = pageListItemTextData.text
self = .text(RichText(apiText: text), nil)
case let .pageListItemBlocks(blocks):
case let .pageListItemBlocks(pageListItemBlocksData):
let blocks = pageListItemBlocksData.blocks
self = .blocks(blocks.map({ InstantPageBlock(apiBlock: $0) }), nil)
}
}
init(apiListOrderedItem: Api.PageListOrderedItem) {
switch apiListOrderedItem {
case let .pageListOrderedItemText(num, text):
case let .pageListOrderedItemText(pageListOrderedItemTextData):
let (num, text) = (pageListOrderedItemTextData.num, pageListOrderedItemTextData.text)
self = .text(RichText(apiText: text), num)
case let .pageListOrderedItemBlocks(num, blocks):
case let .pageListOrderedItemBlocks(pageListOrderedItemBlocksData):
let (num, blocks) = (pageListOrderedItemBlocksData.num, pageListOrderedItemBlocksData.blocks)
self = .blocks(blocks.map({ InstantPageBlock(apiBlock: $0) }), num)
}
}
@ -93,69 +98,96 @@ extension InstantPageBlock {
switch apiBlock {
case .pageBlockUnsupported:
self = .unsupported
case let .pageBlockTitle(text):
case let .pageBlockTitle(pageBlockTitleData):
let text = pageBlockTitleData.text
self = .title(RichText(apiText: text))
case let .pageBlockSubtitle(text):
case let .pageBlockSubtitle(pageBlockSubtitleData):
let text = pageBlockSubtitleData.text
self = .subtitle(RichText(apiText: text))
case let .pageBlockAuthorDate(author, publishedDate):
case let .pageBlockAuthorDate(pageBlockAuthorDateData):
let (author, publishedDate) = (pageBlockAuthorDateData.author, pageBlockAuthorDateData.publishedDate)
self = .authorDate(author: RichText(apiText: author), date: publishedDate)
case let .pageBlockHeader(text):
case let .pageBlockHeader(pageBlockHeaderData):
let text = pageBlockHeaderData.text
self = .header(RichText(apiText: text))
case let .pageBlockSubheader(text):
case let .pageBlockSubheader(pageBlockSubheaderData):
let text = pageBlockSubheaderData.text
self = .subheader(RichText(apiText: text))
case let .pageBlockParagraph(text):
case let .pageBlockParagraph(pageBlockParagraphData):
let text = pageBlockParagraphData.text
self = .paragraph(RichText(apiText: text))
case let .pageBlockPreformatted(text, _):
case let .pageBlockPreformatted(pageBlockPreformattedData):
let text = pageBlockPreformattedData.text
self = .preformatted(RichText(apiText: text))
case let .pageBlockFooter(text):
case let .pageBlockFooter(pageBlockFooterData):
let text = pageBlockFooterData.text
self = .footer(RichText(apiText: text))
case .pageBlockDivider:
self = .divider
case let .pageBlockAnchor(name):
case let .pageBlockAnchor(pageBlockAnchorData):
let name = pageBlockAnchorData.name
self = .anchor(name)
case let .pageBlockBlockquote(text, caption):
case let .pageBlockBlockquote(pageBlockBlockquoteData):
let (text, caption) = (pageBlockBlockquoteData.text, pageBlockBlockquoteData.caption)
self = .blockQuote(text: RichText(apiText: text), caption: RichText(apiText: caption))
case let .pageBlockPullquote(text, caption):
case let .pageBlockPullquote(pageBlockPullquoteData):
let (text, caption) = (pageBlockPullquoteData.text, pageBlockPullquoteData.caption)
self = .pullQuote(text: RichText(apiText: text), caption: RichText(apiText: caption))
case let .pageBlockPhoto(flags, photoId, caption, url, webpageId):
case let .pageBlockPhoto(pageBlockPhotoData):
let (flags, photoId, caption, url, webpageId) = (pageBlockPhotoData.flags, pageBlockPhotoData.photoId, pageBlockPhotoData.caption, pageBlockPhotoData.url, pageBlockPhotoData.webpageId)
var webpageMediaId: MediaId?
if (flags & (1 << 0)) != 0, let webpageId = webpageId, webpageId != 0 {
webpageMediaId = MediaId(namespace: Namespaces.Media.CloudWebpage, id: webpageId)
}
self = .image(id: MediaId(namespace: Namespaces.Media.CloudImage, id: photoId), caption: InstantPageCaption(apiCaption: caption), url: url, webpageId: webpageMediaId)
case let .pageBlockVideo(flags, videoId, caption):
case let .pageBlockVideo(pageBlockVideoData):
let (flags, videoId, caption) = (pageBlockVideoData.flags, pageBlockVideoData.videoId, pageBlockVideoData.caption)
self = .video(id: MediaId(namespace: Namespaces.Media.CloudFile, id: videoId), caption: InstantPageCaption(apiCaption: caption), autoplay: (flags & (1 << 0)) != 0, loop: (flags & (1 << 1)) != 0)
case let .pageBlockCover(cover):
case let .pageBlockCover(pageBlockCoverData):
let cover = pageBlockCoverData.cover
self = .cover(InstantPageBlock(apiBlock: cover))
case let .pageBlockEmbed(flags, url, html, posterPhotoId, w, h, caption):
case let .pageBlockEmbed(pageBlockEmbedData):
let (flags, url, html, posterPhotoId, w, h, caption) = (pageBlockEmbedData.flags, pageBlockEmbedData.url, pageBlockEmbedData.html, pageBlockEmbedData.posterPhotoId, pageBlockEmbedData.w, pageBlockEmbedData.h, pageBlockEmbedData.caption)
var dimensions: PixelDimensions?
if let w = w, let h = h {
dimensions = PixelDimensions(width: w, height: h)
}
self = .webEmbed(url: url, html: html, dimensions: dimensions, caption: InstantPageCaption(apiCaption: caption), stretchToWidth: (flags & (1 << 0)) != 0, allowScrolling: (flags & (1 << 3)) != 0, coverId: posterPhotoId.flatMap { MediaId(namespace: Namespaces.Media.CloudImage, id: $0) })
case let .pageBlockEmbedPost(url, webpageId, authorPhotoId, author, date, blocks, caption):
case let .pageBlockEmbedPost(pageBlockEmbedPostData):
let (url, webpageId, authorPhotoId, author, date, blocks, caption) = (pageBlockEmbedPostData.url, pageBlockEmbedPostData.webpageId, pageBlockEmbedPostData.authorPhotoId, pageBlockEmbedPostData.author, pageBlockEmbedPostData.date, pageBlockEmbedPostData.blocks, pageBlockEmbedPostData.caption)
self = .postEmbed(url: url, webpageId: webpageId == 0 ? nil : MediaId(namespace: Namespaces.Media.CloudWebpage, id: webpageId), avatarId: authorPhotoId == 0 ? nil : MediaId(namespace: Namespaces.Media.CloudImage, id: authorPhotoId), author: author, date: date, blocks: blocks.map({ InstantPageBlock(apiBlock: $0) }), caption: InstantPageCaption(apiCaption: caption))
case let .pageBlockCollage(items, caption):
case let .pageBlockCollage(pageBlockCollageData):
let (items, caption) = (pageBlockCollageData.items, pageBlockCollageData.caption)
self = .collage(items: items.map({ InstantPageBlock(apiBlock: $0) }), caption: InstantPageCaption(apiCaption: caption))
case let .pageBlockSlideshow(items, caption):
case let .pageBlockSlideshow(pageBlockSlideshowData):
let (items, caption) = (pageBlockSlideshowData.items, pageBlockSlideshowData.caption)
self = .slideshow(items: items.map({ InstantPageBlock(apiBlock: $0) }), caption: InstantPageCaption(apiCaption: caption))
case let .pageBlockChannel(channel: apiChat):
case let .pageBlockChannel(pageBlockChannelData):
let apiChat = pageBlockChannelData.channel
self = .channelBanner(parseTelegramGroupOrChannel(chat: apiChat) as? TelegramChannel)
case let .pageBlockAudio(audioId, caption):
case let .pageBlockAudio(pageBlockAudioData):
let (audioId, caption) = (pageBlockAudioData.audioId, pageBlockAudioData.caption)
self = .audio(id: MediaId(namespace: Namespaces.Media.CloudFile, id: audioId), caption: InstantPageCaption(apiCaption: caption))
case let .pageBlockKicker(text):
case let .pageBlockKicker(pageBlockKickerData):
let text = pageBlockKickerData.text
self = .kicker(RichText(apiText: text))
case let .pageBlockTable(flags, title, rows):
case let .pageBlockTable(pageBlockTableData):
let (flags, title, rows) = (pageBlockTableData.flags, pageBlockTableData.title, pageBlockTableData.rows)
self = .table(title: RichText(apiText: title), rows: rows.map({ InstantPageTableRow(apiTableRow: $0) }), bordered: (flags & (1 << 0)) != 0, striped: (flags & (1 << 1)) != 0)
case let .pageBlockList(items):
case let .pageBlockList(pageBlockListData):
let items = pageBlockListData.items
self = .list(items: items.map({ InstantPageListItem(apiListItem: $0) }), ordered: false)
case let .pageBlockOrderedList(items):
case let .pageBlockOrderedList(pageBlockOrderedListData):
let items = pageBlockOrderedListData.items
self = .list(items: items.map({ InstantPageListItem(apiListOrderedItem: $0) }), ordered: true)
case let .pageBlockDetails(flags, blocks, title):
case let .pageBlockDetails(pageBlockDetailsData):
let (flags, blocks, title) = (pageBlockDetailsData.flags, pageBlockDetailsData.blocks, pageBlockDetailsData.title)
self = .details(title: RichText(apiText: title), blocks: blocks.map({ InstantPageBlock(apiBlock: $0) }), expanded: (flags & (1 << 0)) != 0)
case let .pageBlockRelatedArticles(title, articles):
case let .pageBlockRelatedArticles(pageBlockRelatedArticlesData):
let (title, articles) = (pageBlockRelatedArticlesData.title, pageBlockRelatedArticlesData.articles)
self = .relatedArticles(title: RichText(apiText: title), articles: articles.map({ InstantPageRelatedArticle(apiRelatedArticle: $0) }))
case let .pageBlockMap(geo, zoom, w, h, caption):
case let .pageBlockMap(pageBlockMapData):
let (geo, zoom, w, h, caption) = (pageBlockMapData.geo, pageBlockMapData.zoom, pageBlockMapData.w, pageBlockMapData.h, pageBlockMapData.caption)
switch geo {
case let .geoPoint(geoPointData):
let (long, lat) = (geoPointData.long, geoPointData.lat)
@ -177,7 +209,8 @@ extension InstantPage {
let url: String
let views: Int32?
switch apiPage {
case let .page(flags, pageUrl, pageBlocks, pagePhotos, pageDocuments, pageViews):
case let .page(pageData):
let (flags, pageUrl, pageBlocks, pagePhotos, pageDocuments, pageViews) = (pageData.flags, pageData.url, pageData.blocks, pageData.photos, pageData.documents, pageData.views)
url = pageUrl
blocks = pageBlocks
photos = pagePhotos

View file

@ -68,7 +68,8 @@ extension PeerMessageSound {
self = .default
case .notificationSoundNone:
self = .none
case let .notificationSoundLocal(_, data):
case let .notificationSoundLocal(notificationSoundLocalData):
let (_, data) = (notificationSoundLocalData.title, notificationSoundLocalData.data)
var rawApiSound = data
if let index = rawApiSound.firstIndex(of: ".") {
rawApiSound = String(rawApiSound[..<index])
@ -94,7 +95,8 @@ extension PeerMessageSound {
}
}
self = parsedSound
case let .notificationSoundRingtone(id):
case let .notificationSoundRingtone(notificationSoundRingtoneData):
let id = notificationSoundRingtoneData.id
self = .cloud(fileId: id)
}
}
@ -107,12 +109,12 @@ extension PeerMessageSound {
return .notificationSoundDefault
case let .bundledModern(id):
let string = "\(id + 100)"
return .notificationSoundLocal(title: string, data: string)
return .notificationSoundLocal(.init(title: string, data: string))
case let .bundledClassic(id):
let string = "\(id + 2)"
return .notificationSoundLocal(title: string, data: string)
return .notificationSoundLocal(.init(title: string, data: string))
case let .cloud(fileId):
return .notificationSoundRingtone(id: fileId)
return .notificationSoundRingtone(.init(id: fileId))
}
}
}

View file

@ -1183,7 +1183,8 @@ func _internal_forumChannelTopicNotificationExceptions(account: Account, id: Eng
switch update {
case let .updateNotifySettings(peer, notifySettings):
switch peer {
case let .notifyForumTopic(_, topMsgId):
case let .notifyForumTopic(notifyForumTopicData):
let topMsgId = notifyForumTopicData.topMsgId
list.append((Int64(topMsgId), EnginePeer.NotificationSettings(TelegramPeerNotificationSettings(apiSettings: notifySettings))))
default:
break

View file

@ -1253,10 +1253,12 @@ private func finalStateWithUpdatesAndServerTime(accountPeerId: PeerId, postbox:
updatedState.updateAudioTranscription(messageId: MessageId(peerId: peer.peerId, namespace: Namespaces.Message.Cloud, id: msgId), id: transcriptionId, isPending: isPending, text: text)
case let .updateNotifySettings(apiPeer, apiNotificationSettings):
switch apiPeer {
case let .notifyPeer(peer):
case let .notifyPeer(notifyPeerData):
let peer = notifyPeerData.peer
let notificationSettings = TelegramPeerNotificationSettings(apiSettings: apiNotificationSettings)
updatedState.updateNotificationSettings(.peer(peerId: peer.peerId, threadId: nil), notificationSettings: notificationSettings)
case let .notifyForumTopic(peer, topMsgId):
case let .notifyForumTopic(notifyForumTopicData):
let (peer, topMsgId) = (notifyForumTopicData.peer, notifyForumTopicData.topMsgId)
let notificationSettings = TelegramPeerNotificationSettings(apiSettings: apiNotificationSettings)
updatedState.updateNotificationSettings(.peer(peerId: peer.peerId, threadId: Int64(topMsgId)), notificationSettings: notificationSettings)
case .notifyUsers:

View file

@ -552,7 +552,8 @@ extension MyBoostStatus {
updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: parsedPeers)
for boost in myBoosts {
switch boost {
case let .myBoost(_, slot, peer, date, expires, cooldownUntilDate):
case let .myBoost(myBoostData):
let (slot, peer, date, expires, cooldownUntilDate) = (myBoostData.slot, myBoostData.peer, myBoostData.date, myBoostData.expires, myBoostData.cooldownUntilDate)
var boostPeer: EnginePeer?
if let peerId = peer?.peerId, let peer = transaction.getPeer(peerId) {
boostPeer = EnginePeer(peer)

View file

@ -345,7 +345,8 @@ extension Api.Update {
return [PeerId(namespace: Namespaces.Peer.CloudChannel, id: PeerId.Id._internalFromInt64Value(channelId))]
case let .updateNotifySettings(peer, _):
switch peer {
case let .notifyPeer(peer):
case let .notifyPeer(notifyPeerData):
let peer = notifyPeerData.peer
return [peer.peerId]
default:
return []

View file

@ -37,7 +37,8 @@ func _internal_messageReadStats(account: Account, id: MessageId) -> Signal<Messa
return MessageReadStats(reactionCount: 0, peers: [], readTimestamps: [:])
}
switch result {
case let .outboxReadDate(date):
case let .outboxReadDate(outboxReadDateData):
let date = outboxReadDateData.date
return MessageReadStats(reactionCount: 0, peers: [EnginePeer(peer)], readTimestamps: [peer.id: date])
}
}

View file

@ -51,7 +51,8 @@ func _internal_notificationExceptionsList(accountPeerId: PeerId, postbox: Postbo
switch update {
case let .updateNotifySettings(apiPeer, notifySettings):
switch apiPeer {
case let .notifyPeer(notifyPeer):
case let .notifyPeer(notifyPeerData):
let notifyPeer = notifyPeerData.peer
let peerId: PeerId
switch notifyPeer {
case let .peerUser(userId):