Skip to content

Commit d7fadef

Browse files
author
Isaac
committed
Merge branch 'master' into beta
2 parents df96d16 + 2adccff commit d7fadef

File tree

312 files changed

+20379
-4444
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

312 files changed

+20379
-4444
lines changed

Telegram/Telegram-iOS/en.lproj/Localizable.strings

Lines changed: 126 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11127,6 +11127,9 @@ Sorry for the inconvenience.";
1112711127
"Chat.BottomSearchPanel.MessageCount_1" = "message";
1112811128
"Chat.BottomSearchPanel.MessageCount_any" = "messages";
1112911129

11130+
"Chat.BottomSearchPanel.StoryCount_1" = "story";
11131+
"Chat.BottomSearchPanel.StoryCount_any" = "stories";
11132+
1113011133
"Chat.BottomSearchPanel.DisplayModeFormat" = "Show as %@";
1113111134
"Chat.BottomSearchPanel.DisplayModeChat" = "Chat";
1113211135
"Chat.BottomSearchPanel.DisplayModeList" = "List";
@@ -11750,9 +11753,11 @@ Sorry for the inconvenience.";
1175011753
"Monetization.TransactionInfo.ViewInExplorer" = "View in Blockchain Explorer";
1175111754

1175211755
"Monetization.Intro.Title" = "Earn From Your Channel";
11756+
"Monetization.Intro.Bot.Title" = "Earn From Your Bot";
1175311757

1175411758
"Monetization.Intro.Ads.Title" = "Telegram Ads";
1175511759
"Monetization.Intro.Ads.Text" = "Telegram can display ads in your channel.";
11760+
"Monetization.Intro.Bot.Ads.Text" = "Telegram can display ads in your bot.";
1175611761

1175711762
"Monetization.Intro.Split.Title" = "50:50 Revenue Split";
1175811763
"Monetization.Intro.Split.Text" = "You receive 50% of the ad revenue in TON.";
@@ -11776,13 +11781,18 @@ Sorry for the inconvenience.";
1177611781
"AdsInfo.Info" = "Telegram Ads are very different from ads on other platforms. Ads such as this one:";
1177711782
"AdsInfo.Respect.Title" = "Respect Your Privacy";
1177811783
"AdsInfo.Respect.Text" = "Ads on Telegram do not use your personal information and are based on the channel in which you see them.";
11784+
"AdsInfo.Bot.Respect.Text" = "Ads on Telegram do not use your personal information and are based on the bot in which you see them.";
1177911785
"AdsInfo.Split.Title" = "Help the Channel Creator";
1178011786
"AdsInfo.Split.Text" = "50% of the revenue from Telegram Ads goes to the owner of the channel where they are displayed.";
11787+
"AdsInfo.Bot.Split.Title" = "Help the Bot Creator";
11788+
"AdsInfo.Bot.Split.Text" = "50% of the revenue from Telegram Ads goes to the owner of the bot where they are displayed.";
1178111789
"AdsInfo.Ads.Title" = "Can Be Removed";
1178211790
"AdsInfo.Ads.Text" = "You can turn off ads by subscribing to [Telegram Premium](), and Level %@ channels can remove them for their subscribers.";
11791+
"AdsInfo.Bot.Ads.Text" = "You can turn off ads by subscribing to [Telegram Premium]().";
1178311792

1178411793
"AdsInfo.Launch.Title" = "Can I Launch an Ad?";
1178511794
"AdsInfo.Launch.Text" = "Anyone can create ads to display in this channel – with minimal budgets. Check out the Telegram Ad Platform for details. [Learn More >]()";
11795+
"AdsInfo.Bot.Launch.Text" = "Anyone can create ads to display in this bot – with minimal budgets. Check out the Telegram Ad Platform for details. [Learn More >]()";
1178611796
"AdsInfo.Launch.Text_URL" = "https://promote.telegram.org";
1178711797

1178811798
"AdsInfo.Understood" = "Understood";
@@ -12393,6 +12403,16 @@ Sorry for the inconvenience.";
1239312403
"HashtagSearch.StoriesFound_any" = "%@ Stories Found";
1239412404
"HashtagSearch.StoriesFoundInfo" = "View stories with %@";
1239512405

12406+
"HashtagSearch.Stories_1" = "%@ Story";
12407+
"HashtagSearch.Stories_any" = "%@ Stories";
12408+
"HashtagSearch.LocalStoriesFound" = "%1$@ in %2$@";
12409+
12410+
"HashtagSearch.Posts_1" = "%@ Message";
12411+
"HashtagSearch.Posts_any" = "%@ Messages";
12412+
"HashtagSearch.FoundInfoFormat" = "View %1$@ with %2$@";
12413+
"HashtagSearch.FoundStories" = "stories";
12414+
"HashtagSearch.FoundPosts" = "posts";
12415+
1239612416
"Stars.BotRevenue.Title" = "Stars Balance";
1239712417
"Stars.BotRevenue.Revenue.Title" = "Stars Received";
1239812418
"Stars.BotRevenue.Proceeds.Title" = "Rewards Overview";
@@ -12963,6 +12983,7 @@ Sorry for the inconvenience.";
1296312983

1296412984
"Gift.View.Title" = "Gift";
1296512985
"Gift.View.ReceivedTitle" = "Received Gift";
12986+
"Gift.View.UnavailableTitle" = "Unavailable";
1296612987
"Gift.View.KeepOrConvertDescription" = "You can keep this gift in your Profile or convert it to %@. [More About Stars >]()";
1296712988
"Gift.View.KeepOrConvertDescription.Stars_1" = "%@ Star";
1296812989
"Gift.View.KeepOrConvertDescription.Stars_any" = "%@ Stars";
@@ -12972,20 +12993,42 @@ Sorry for the inconvenience.";
1297212993
"Gift.View.OtherDescription" = "%1$@ can keep this gift in their Profile or convert it to %2$@. [More About Stars >]()";
1297312994
"Gift.View.OtherDescription.Stars_1" = "%@ Star";
1297412995
"Gift.View.OtherDescription.Stars_any" = "%@ Stars";
12996+
"Gift.View.UnavailableDescription" = "This gift has sold out";
1297512997
"Gift.View.From" = "From";
1297612998
"Gift.View.HiddenName" = "Hidden Name";
12999+
"Gift.View.Send" = "send a gift";
1297713000
"Gift.View.Date" = "Date";
13001+
"Gift.View.FirstSale" = "First Sale";
13002+
"Gift.View.LastSale" = "Last Sale";
13003+
"Gift.View.Value" = "Value";
13004+
"Gift.View.Sale" = "sell for %@";
13005+
"Gift.View.Sale.Stars_1" = "%@ Star";
13006+
"Gift.View.Sale.Stars_any" = "%@ Stars";
1297813007
"Gift.View.Availability" = "Availability";
1297913008
"Gift.View.Availability.Of" = "%1$@ of %2$@";
13009+
"Gift.View.Availability.NewOf" = "%1$@ of %2$@ left";
13010+
"Gift.View.Visibility" = "Visibility";
13011+
"Gift.View.Visibility.Visible" = "Visible on your page";
13012+
"Gift.View.Visibility.Hide" = "hide";
1298013013
"Gift.View.Hide" = "Hide from My Page";
1298113014
"Gift.View.Display" = "Display on My Page";
1298213015
"Gift.View.Convert" = "Convert to %@";
1298313016
"Gift.View.Convert.Stars_1" = "%@ Star";
1298413017
"Gift.View.Convert.Stars_any" = "%@ Stars";
13018+
13019+
"Gift.View.NameHidden" = "Only you can see the senders's name.";
13020+
"Gift.View.NameAndMessageHidden" = "Only you can see the senders's name and message.";
13021+
13022+
"Gift.View.DisplayedInfo" = "The gift is visible on your Page. [View >]()";
13023+
"Gift.View.HiddenInfo" = "This gift is hidden. Only you can see it.";
13024+
1298513025
"Gift.Displayed.Title" = "Gift Saved to Profile";
1298613026
"Gift.Displayed.Text" = "The gift is now displayed in [your profile]().";
13027+
"Gift.Displayed.NewText" = "The gift is now shown on your Page.";
13028+
"Gift.Displayed.View" = "View";
1298713029
"Gift.Hidden.Title" = "Gift Removed from Profile";
1298813030
"Gift.Hidden.Text" = "The gift is no longer displayed in [your profile]().";
13031+
"Gift.Hidden.NewText" = "The gift is removed from your Page.";
1298913032
"Gift.Convert.Title" = "Convert Gift to Stars";
1299013033
"Gift.Convert.Text" = "Do you want to convert this gift from **%1$@** to **%2$@**?\n\nThis will permanently destroy the gift.";
1299113034
"Gift.Convert.Stars_1" = "%@ Star";
@@ -13007,8 +13050,8 @@ Sorry for the inconvenience.";
1300713050
"Gift.Options.Gift.Text" = "Give **%@** gifts that can be kept on the profile or converted to Stars. [What are Stars >]()";
1300813051
"Gift.Options.Gift.Filter.AllGifts" = "All Gifts";
1300913052
"Gift.Options.Gift.Filter.Limited" = "Limited";
13010-
"Gift.Options.Gift.Limited" = "Limited";
13011-
"Gift.Options.Gift.SoldOut" = "Sold Out";
13053+
"Gift.Options.Gift.Limited" = "limited";
13054+
"Gift.Options.Gift.SoldOut" = "sold out";
1301213055
"Gift.Options.SoldOut.Text" = "Sorry, this gift is sold out.";
1301313056

1301413057
"PeerInfo.PaneGifts" = "Gifts";
@@ -13077,3 +13120,84 @@ Sorry for the inconvenience.";
1307713120

1307813121
"WebBrowser.AuthChallenge.Title" = "Sign in to %@";
1307913122
"WebBrowser.AuthChallenge.Text" = "Your login information will be sent securely.";
13123+
13124+
13125+
"ChatList.Search.FilterPublicPosts" = "Public Posts";
13126+
"DialogList.SearchSectionPublicPosts" = "Public Posts";
13127+
13128+
"Chat.PrivateMessageEditTimestamp.Date" = "edited %@";
13129+
"Chat.PrivateMessageEditTimestamp.TodayAt" = "edited today at %@";
13130+
"Chat.PrivateMessageEditTimestamp.YesterdayAt" = "edited yesterday at %@";
13131+
13132+
"Stars.Transaction.Gift.Title" = "Gift";
13133+
13134+
"ChatList.Search.Open" = "OPEN";
13135+
"ChatList.Search.ShowMore" = "Show More";
13136+
13137+
"AttachmentMenu.AddPhotoOrVideo" = "Add Photo or Video";
13138+
"AttachmentMenu.AddDocument" = "Add Document";
13139+
13140+
"Chat.BotAd.Title" = "Ad";
13141+
"Chat.BotAd.WhatIsThis" = "what's this?";
13142+
13143+
"ChatList.Search.TopAppsInfo" = "Which apps are included here? [Learn >]()";
13144+
13145+
"TopApps.Info.Title" = "Top Mini Apps";
13146+
"TopApps.Info.Text" = "This catalogue ranks mini apps based on their daily revenue, measured in Stars. To be listed, developers must set their main mini app in [@botfather]() (as described [here](https://core.telegram.org/bots/webapps#launching-the-main-mini-app)), have over **1,000** daily users, and earn a daily revenue above **1,000** Stars, based on weekly average.";
13147+
"TopApps.Info.Done" = "Understood";
13148+
13149+
"Stars.Intro.Transaction.TelegramBotApi.Title" = "Paid Broadcast";
13150+
"Stars.Intro.Transaction.TelegramBotApi.Messages_1" = "%@ Message";
13151+
"Stars.Intro.Transaction.TelegramBotApi.Messages_any" = "%@ Messages";
13152+
13153+
"Stars.Transaction.TelegramBotApi.Title" = "Paid Broadcast";
13154+
"Stars.Transaction.TelegramBotApi.Messages_1" = "%@ Message";
13155+
"Stars.Transaction.TelegramBotApi.Messages_any" = "%@ Messages";
13156+
13157+
"Monetization.Bot.Header" = "Telegram shares 50% of the revenue from ads displayed in your bot. [Learn More >]()";
13158+
"Monetization.Bot.BalanceTitle" = "AVAILABLE BALANCE";
13159+
13160+
"Resolve.ChannelErrorNotFound" = "Sorry, this channel doesn't seem to exist.";
13161+
13162+
"Stats.TonBotRevenue.Title" = "TON Balance";
13163+
13164+
"PeerInfo.BotBalance.Title" = "BALANCE";
13165+
"PeerInfo.BotBalance.Ton" = "Ton";
13166+
"PeerInfo.BotBalance.Stars" = "Stars";
13167+
13168+
"Gallery.ToastVideoSpeedSwipe" = "Swipe sideways to adjust speed.";
13169+
"Gallery.VideoSettings.QualitySectionTitle" = "QUALITY";
13170+
"Gallery.VideoSettings.SpeedSectionTitle" = "PLAYBACK SPEED";
13171+
"Gallery.VideoSettings.SpeedControlTitle" = "Speed";
13172+
13173+
"Gallery.VideoSettings.QualityAuto" = "Auto";
13174+
"Gallery.VideoSettings.QualityLow" = "Low";
13175+
"Gallery.VideoSettings.QualityMedium" = "Medium";
13176+
"Gallery.VideoSettings.QualityHD" = "High";
13177+
"Gallery.VideoSettings.QualityFHD" = "Full HD";
13178+
"Gallery.VideoSettings.QualityQHD" = "Ultra-High";
13179+
13180+
"Gallery.VideoSettings.IconQualityLow" = "L";
13181+
"Gallery.VideoSettings.IconQualityMedium" = "SD";
13182+
"Gallery.VideoSettings.IconQualityHD" = "HD";
13183+
"Gallery.VideoSettings.IconQualityFHD" = "FHD";
13184+
"Gallery.VideoSettings.IconQualityQHD" = "QHD";
13185+
13186+
"Gallery.MenuSaveToGallery" = "Save to Gallery";
13187+
"Gallery.SaveToGallery.Quality" = "Save in %@p";
13188+
"Gallery.SaveToGallery.Original" = "Save Original";
13189+
13190+
"VideoChat.ScheduleButtonTitle" = "Schedule Video Chat";
13191+
13192+
"Chat.ToastImprovingVideo.Title" = "Improving video...";
13193+
"Chat.ToastImprovingVideo.Text" = "The video will be published after it's optimized for the best viewing experience.";
13194+
"Chat.ToastVideoPublished.Title" = "Video Published";
13195+
"Chat.ToastVideoPublished.Action" = "View";
13196+
"Chat.MessageTooltipVideoProcessing" = "Processing video may take a few minutes.";
13197+
13198+
"Chat.VideoProcessingServiceMessage_1" = "This video will be published once converted and optimized";
13199+
"Chat.VideoProcessingServiceMessage_any" = "These videos will be published once converted and optimized";
13200+
13201+
"Chat.ScheduledForceSendProcessingVideo.Title" = "Wait!";
13202+
"Chat.ScheduledForceSendProcessingVideo.Text" = "This video hasn't been converted and optimized yet. If you send it now, the viewers of the video may experience slow download speed.";
13203+
"Chat.ScheduledForceSendProcessingVideo.Action" = "Send Anyway";

build-system/Make/Make.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ def __init__(self, bazel, override_bazel_version, override_xcode_version, bazel_
106106
# 1. resolves issues with the linker caused by the swift-objc mixing.
107107
# 2. makes the resulting binaries significantly smaller (up to 9% for this project).
108108
#'--swiftcopt=-num-threads', '--swiftcopt=1',
109-
'--swiftcopt=-j1',
110-
'--features=swift._num_threads_0_in_swiftcopts',
109+
'--swiftcopt=-num-threads', '--swiftcopt=1',
111110

112111
# Strip unsused code.
113112
'--features=dead_strip',

build-system/bazel-rules/rules_swift

Submodule rules_swift updated 179 files

submodules/AccountContext/Sources/AccountContext.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,7 @@ public enum ChatListSearchFilter: Equatable {
641641
case voice
642642
case peer(PeerId, Bool, String, String)
643643
case date(Int32?, Int32, String)
644+
case publicPosts
644645

645646
public var id: Int64 {
646647
switch self {
@@ -664,6 +665,8 @@ public enum ChatListSearchFilter: Equatable {
664665
return 8
665666
case .voice:
666667
return 9
668+
case .publicPosts:
669+
return 10
667670
case let .peer(peerId, _, _, _):
668671
return peerId.id._internalGetInt64Value()
669672
case let .date(_, date, _):
@@ -810,7 +813,7 @@ public enum CollectibleItemInfoScreenSubject {
810813

811814

812815
public enum StorySearchControllerScope {
813-
case query(String)
816+
case query(EnginePeer?, String)
814817
case location(coordinates: MediaArea.Coordinates, venue: MediaArea.Venue)
815818
}
816819

@@ -938,7 +941,7 @@ public protocol SharedAccountContext: AnyObject {
938941
func makeStorageManagementController(context: AccountContext) -> ViewController
939942
func makeAttachmentFileController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)?, bannedSendMedia: (Int32, Bool)?, presentGallery: @escaping () -> Void, presentFiles: @escaping () -> Void, send: @escaping (AnyMediaReference) -> Void) -> AttachmentFileController
940943
func makeGalleryCaptionPanelView(context: AccountContext, chatLocation: ChatLocation, isScheduledMessages: Bool, isFile: Bool, customEmojiAvailable: Bool, present: @escaping (ViewController) -> Void, presentInGlobalOverlay: @escaping (ViewController) -> Void) -> NSObject?
941-
func makeHashtagSearchController(context: AccountContext, peer: EnginePeer?, query: String, all: Bool) -> ViewController
944+
func makeHashtagSearchController(context: AccountContext, peer: EnginePeer?, query: String, stories: Bool, forceDark: Bool) -> ViewController
942945
func makeStorySearchController(context: AccountContext, scope: StorySearchControllerScope, listContext: SearchStoryListContext?) -> ViewController
943946
func makeMyStoriesController(context: AccountContext, isArchive: Bool) -> ViewController
944947
func makeArchiveSettingsController(context: AccountContext) -> ViewController
@@ -971,7 +974,7 @@ public protocol SharedAccountContext: AnyObject {
971974
func chatAvailableMessageActions(engine: TelegramEngine, accountPeerId: EnginePeer.Id, messageIds: Set<EngineMessage.Id>, messages: [EngineMessage.Id: EngineMessage], peers: [EnginePeer.Id: EnginePeer]) -> Signal<ChatAvailableMessageActions, NoError>
972975
func resolveUrl(context: AccountContext, peerId: PeerId?, url: String, skipUrlAuth: Bool) -> Signal<ResolvedUrl, NoError>
973976
func resolveUrlWithProgress(context: AccountContext, peerId: PeerId?, url: String, skipUrlAuth: Bool) -> Signal<ResolveUrlResult, NoError>
974-
func openResolvedUrl(_ resolvedUrl: ResolvedUrl, context: AccountContext, urlContext: OpenURLContext, navigationController: NavigationController?, forceExternal: Bool, openPeer: @escaping (EnginePeer, ChatControllerInteractionNavigateToPeer) -> Void, sendFile: ((FileMediaReference) -> Void)?, sendSticker: ((FileMediaReference, UIView, CGRect) -> Bool)?, sendEmoji: ((String, ChatTextInputTextCustomEmojiAttribute) -> Void)?, requestMessageActionUrlAuth: ((MessageActionUrlSubject) -> Void)?, joinVoiceChat: ((PeerId, String?, CachedChannelData.ActiveCall) -> Void)?, present: @escaping (ViewController, Any?) -> Void, dismissInput: @escaping () -> Void, contentContext: Any?, progress: Promise<Bool>?, completion: (() -> Void)?)
977+
func openResolvedUrl(_ resolvedUrl: ResolvedUrl, context: AccountContext, urlContext: OpenURLContext, navigationController: NavigationController?, forceExternal: Bool, forceUpdate: Bool, openPeer: @escaping (EnginePeer, ChatControllerInteractionNavigateToPeer) -> Void, sendFile: ((FileMediaReference) -> Void)?, sendSticker: ((FileMediaReference, UIView, CGRect) -> Bool)?, sendEmoji: ((String, ChatTextInputTextCustomEmojiAttribute) -> Void)?, requestMessageActionUrlAuth: ((MessageActionUrlSubject) -> Void)?, joinVoiceChat: ((PeerId, String?, CachedChannelData.ActiveCall) -> Void)?, present: @escaping (ViewController, Any?) -> Void, dismissInput: @escaping () -> Void, contentContext: Any?, progress: Promise<Bool>?, completion: (() -> Void)?)
975978
func openAddContact(context: AccountContext, firstName: String, lastName: String, phoneNumber: String, label: String, present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, completed: @escaping () -> Void)
976979
func openAddPersonContact(context: AccountContext, peerId: PeerId, pushController: @escaping (ViewController) -> Void, present: @escaping (ViewController, Any?) -> Void)
977980
func presentContactsWarningSuppression(context: AccountContext, present: (ViewController, Any?) -> Void)

submodules/AccountContext/Sources/ChatController.swift

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public final class ChatMessageItemAssociatedData: Equatable {
6363
public let isStandalone: Bool
6464
public let isInline: Bool
6565
public let showSensitiveContent: Bool
66-
public let starGifts: [Int64: TelegramMediaFile]
6766

6867
public init(
6968
automaticDownloadPeerType: MediaAutoDownloadPeerType,
@@ -97,8 +96,7 @@ public final class ChatMessageItemAssociatedData: Equatable {
9796
deviceContactsNumbers: Set<String> = Set(),
9897
isStandalone: Bool = false,
9998
isInline: Bool = false,
100-
showSensitiveContent: Bool = false,
101-
starGifts: [Int64: TelegramMediaFile] = [:]
99+
showSensitiveContent: Bool = false
102100
) {
103101
self.automaticDownloadPeerType = automaticDownloadPeerType
104102
self.automaticDownloadPeerId = automaticDownloadPeerId
@@ -132,7 +130,6 @@ public final class ChatMessageItemAssociatedData: Equatable {
132130
self.isStandalone = isStandalone
133131
self.isInline = isInline
134132
self.showSensitiveContent = showSensitiveContent
135-
self.starGifts = starGifts
136133
}
137134

138135
public static func == (lhs: ChatMessageItemAssociatedData, rhs: ChatMessageItemAssociatedData) -> Bool {
@@ -226,9 +223,6 @@ public final class ChatMessageItemAssociatedData: Equatable {
226223
if lhs.showSensitiveContent != rhs.showSensitiveContent {
227224
return false
228225
}
229-
if lhs.starGifts != rhs.starGifts {
230-
return false
231-
}
232226
return true
233227
}
234228
}
@@ -870,7 +864,7 @@ public struct ChatInputQueryCommandsResult: Equatable {
870864

871865
public enum ChatPresentationInputQueryResult: Equatable {
872866
case stickers([FoundStickerItem])
873-
case hashtags([String])
867+
case hashtags([String], String)
874868
case mentions([EnginePeer])
875869
case commands(ChatInputQueryCommandsResult)
876870
case emojis([(String, TelegramMediaFile?, String)], NSRange)
@@ -884,9 +878,9 @@ public enum ChatPresentationInputQueryResult: Equatable {
884878
} else {
885879
return false
886880
}
887-
case let .hashtags(lhsResults):
888-
if case let .hashtags(rhsResults) = rhs {
889-
return lhsResults == rhsResults
881+
case let .hashtags(lhsResults, lhsQuery):
882+
if case let .hashtags(rhsResults, rhsQuery) = rhs {
883+
return lhsResults == rhsResults && lhsQuery == rhsQuery
890884
} else {
891885
return false
892886
}
@@ -1031,14 +1025,18 @@ public protocol ChatController: ViewController {
10311025

10321026
var visibleContextController: ViewController? { get }
10331027

1028+
var contentContainerNode: ASDisplayNode { get }
1029+
10341030
var searching: ValuePromise<Bool> { get }
1031+
var searchResultsCount: ValuePromise<Int32> { get }
1032+
var externalSearchResultsCount: Int32? { get set }
10351033

10361034
var alwaysShowSearchResultsAsList: Bool { get set }
10371035
var includeSavedPeersInSearchResults: Bool { get set }
10381036
var showListEmptyResults: Bool { get set }
1037+
func beginMessageSearch(_ query: String)
10391038

10401039
func updatePresentationMode(_ mode: ChatControllerPresentationMode)
1041-
func beginMessageSearch(_ query: String)
10421040
func displayPromoAnnouncement(text: String)
10431041

10441042
func updatePushedTransition(_ fraction: CGFloat, transition: ContainedViewLayoutTransition)

submodules/AccountContext/Sources/IsMediaStreamable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Boo
1919
}
2020
for attribute in media.attributes {
2121
if case let .Video(_, _, flags, _, _, _) = attribute {
22-
if flags.contains(.supportsStreaming) {
22+
if flags.contains(.supportsStreaming) || !media.alternativeRepresentations.isEmpty {
2323
return true
2424
}
2525
break

0 commit comments

Comments
 (0)