mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Story data saved experiment
This commit is contained in:
parent
7c3432be3e
commit
9d30e0bac3
@ -1891,7 +1891,7 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
|
||||
if let mediaId = info.media.id {
|
||||
validIds.append(mediaId)
|
||||
if self.preloadStoryResourceDisposables[mediaId] == nil {
|
||||
self.preloadStoryResourceDisposables[mediaId] = preloadStoryMedia(context: self.context, peer: info.peer, storyId: info.storyId, media: info.media, reactions: info.reactions).startStrict()
|
||||
self.preloadStoryResourceDisposables[mediaId] = preloadStoryMedia(context: self.context, info: info).startStrict()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
||||
case skipReadHistory(PresentationTheme, Bool)
|
||||
case unidirectionalSwipeToReply(Bool)
|
||||
case dustEffect(Bool)
|
||||
case callUIV2(Bool)
|
||||
case alternativeStoryMedia(Bool)
|
||||
case crashOnSlowQueries(PresentationTheme, Bool)
|
||||
case crashOnMemoryPressure(PresentationTheme, Bool)
|
||||
case clearTips(PresentationTheme)
|
||||
@ -125,7 +125,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
||||
return DebugControllerSection.logging.rawValue
|
||||
case .webViewInspection, .resetWebViewCache:
|
||||
return DebugControllerSection.web.rawValue
|
||||
case .keepChatNavigationStack, .skipReadHistory, .unidirectionalSwipeToReply, .dustEffect, .callUIV2, .crashOnSlowQueries, .crashOnMemoryPressure:
|
||||
case .keepChatNavigationStack, .skipReadHistory, .unidirectionalSwipeToReply, .dustEffect, .alternativeStoryMedia, .crashOnSlowQueries, .crashOnMemoryPressure:
|
||||
return DebugControllerSection.experiments.rawValue
|
||||
case .clearTips, .resetNotifications, .crash, .resetData, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .storiesExperiment, .storiesJpegExperiment, .playlistPlayback, .enableQuickReactionSwitch, .voiceConference, .experimentalCompatibility, .enableDebugDataDisplay, .acceleratedStickers, .inlineForums, .localTranscription, .enableReactionOverrides, .restorePurchases:
|
||||
return DebugControllerSection.experiments.rawValue
|
||||
@ -180,7 +180,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
||||
return 17
|
||||
case .dustEffect:
|
||||
return 18
|
||||
case .callUIV2:
|
||||
case .alternativeStoryMedia:
|
||||
return 19
|
||||
case .crashOnSlowQueries:
|
||||
return 20
|
||||
@ -959,11 +959,11 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
||||
return settings
|
||||
}).start()
|
||||
})
|
||||
case let .callUIV2(value):
|
||||
return ItemListSwitchItem(presentationData: presentationData, title: "Call UI V2", value: value, sectionId: self.section, style: .blocks, updated: { value in
|
||||
case let .alternativeStoryMedia(value):
|
||||
return ItemListSwitchItem(presentationData: presentationData, title: "Story Data Saver", value: value, sectionId: self.section, style: .blocks, updated: { value in
|
||||
let _ = updateExperimentalUISettingsInteractively(accountManager: arguments.sharedContext.accountManager, { settings in
|
||||
var settings = settings
|
||||
settings.callUIV2 = value
|
||||
settings.alternativeStoryMedia = value
|
||||
return settings
|
||||
}).start()
|
||||
})
|
||||
@ -1427,7 +1427,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present
|
||||
#endif
|
||||
entries.append(.unidirectionalSwipeToReply(experimentalSettings.unidirectionalSwipeToReply))
|
||||
entries.append(.dustEffect(experimentalSettings.dustEffect))
|
||||
entries.append(.callUIV2(experimentalSettings.callUIV2))
|
||||
entries.append(.alternativeStoryMedia(experimentalSettings.alternativeStoryMedia))
|
||||
}
|
||||
entries.append(.crashOnSlowQueries(presentationData.theme, experimentalSettings.crashOnLongQueries))
|
||||
entries.append(.crashOnMemoryPressure(presentationData.theme, experimentalSettings.crashOnMemoryPressure))
|
||||
|
@ -4638,6 +4638,7 @@ func replayFinalState(
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -4670,6 +4671,7 @@ func replayFinalState(
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
|
@ -321,6 +321,7 @@ private final class StoryStatsPublicForwardsContextImpl {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
|
@ -528,6 +528,7 @@ public final class EngineStoryViewListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -571,6 +572,7 @@ public final class EngineStoryViewListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -609,6 +611,7 @@ public final class EngineStoryViewListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -714,6 +717,7 @@ public final class EngineStoryViewListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
|
@ -244,6 +244,7 @@ public enum Stories {
|
||||
case timestamp
|
||||
case expirationTimestamp
|
||||
case media
|
||||
case alternativeMedia
|
||||
case mediaAreas
|
||||
case text
|
||||
case entities
|
||||
@ -266,6 +267,7 @@ public enum Stories {
|
||||
public let timestamp: Int32
|
||||
public let expirationTimestamp: Int32
|
||||
public let media: Media?
|
||||
public let alternativeMedia: Media?
|
||||
public let mediaAreas: [MediaArea]
|
||||
public let text: String
|
||||
public let entities: [MessageTextEntity]
|
||||
@ -288,6 +290,7 @@ public enum Stories {
|
||||
timestamp: Int32,
|
||||
expirationTimestamp: Int32,
|
||||
media: Media?,
|
||||
alternativeMedia: Media?,
|
||||
mediaAreas: [MediaArea],
|
||||
text: String,
|
||||
entities: [MessageTextEntity],
|
||||
@ -309,6 +312,7 @@ public enum Stories {
|
||||
self.timestamp = timestamp
|
||||
self.expirationTimestamp = expirationTimestamp
|
||||
self.media = media
|
||||
self.alternativeMedia = alternativeMedia
|
||||
self.mediaAreas = mediaAreas
|
||||
self.text = text
|
||||
self.entities = entities
|
||||
@ -339,6 +343,13 @@ public enum Stories {
|
||||
} else {
|
||||
self.media = nil
|
||||
}
|
||||
|
||||
if let alternativeMediaData = try container.decodeIfPresent(Data.self, forKey: .alternativeMedia) {
|
||||
self.alternativeMedia = PostboxDecoder(buffer: MemoryBuffer(data: alternativeMediaData)).decodeRootObject() as? Media
|
||||
} else {
|
||||
self.alternativeMedia = nil
|
||||
}
|
||||
|
||||
self.mediaAreas = try container.decodeIfPresent([MediaArea].self, forKey: .mediaAreas) ?? []
|
||||
|
||||
self.text = try container.decode(String.self, forKey: .text)
|
||||
@ -371,6 +382,14 @@ public enum Stories {
|
||||
let mediaData = encoder.makeData()
|
||||
try container.encode(mediaData, forKey: .media)
|
||||
}
|
||||
|
||||
if let alternativeMedia = self.alternativeMedia {
|
||||
let encoder = PostboxEncoder()
|
||||
encoder.encodeRootObject(alternativeMedia)
|
||||
let alternativeMediaData = encoder.makeData()
|
||||
try container.encode(alternativeMediaData, forKey: .alternativeMedia)
|
||||
}
|
||||
|
||||
try container.encode(self.mediaAreas, forKey: .mediaAreas)
|
||||
|
||||
try container.encode(self.text, forKey: .text)
|
||||
@ -410,6 +429,17 @@ public enum Stories {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if let lhsAlternativeMedia = lhs.alternativeMedia, let rhsAlternativeMedia = rhs.alternativeMedia {
|
||||
if !lhsAlternativeMedia.isEqual(to: rhsAlternativeMedia) {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
if (lhs.alternativeMedia == nil) != (rhs.alternativeMedia == nil) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if lhs.mediaAreas != rhs.mediaAreas {
|
||||
return false
|
||||
}
|
||||
@ -1153,6 +1183,7 @@ func _internal_uploadStoryImpl(
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1334,6 +1365,7 @@ func _internal_editStoryPrivacy(account: Account, id: Int32, privacy: EngineStor
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1364,6 +1396,7 @@ func _internal_editStoryPrivacy(account: Account, id: Int32, privacy: EngineStor
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1557,6 +1590,7 @@ func _internal_updateStoriesArePinned(account: Account, peerId: PeerId, ids: [In
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1586,6 +1620,7 @@ func _internal_updateStoriesArePinned(account: Account, peerId: PeerId, ids: [In
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1774,11 +1809,22 @@ extension Stories.StoredItem {
|
||||
mergedForwardInfo = forwardFrom.flatMap(Stories.Item.ForwardInfo.init(apiForwardInfo:))
|
||||
}
|
||||
|
||||
var parsedAlternativeMedia: Media?
|
||||
switch media {
|
||||
case let .messageMediaDocument(_, _, altDocument, _):
|
||||
if let altDocument = altDocument {
|
||||
parsedAlternativeMedia = telegramMediaFileFromApiDocument(altDocument)
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
let item = Stories.Item(
|
||||
id: id,
|
||||
timestamp: date,
|
||||
expirationTimestamp: expireDate,
|
||||
media: parsedMedia,
|
||||
alternativeMedia: parsedAlternativeMedia,
|
||||
mediaAreas: mediaAreas?.compactMap(mediaAreaFromApiMediaArea) ?? [],
|
||||
text: caption ?? "",
|
||||
entities: entities.flatMap { entities in return messageTextEntitiesFromApiEntities(entities) } ?? [],
|
||||
@ -1842,6 +1888,7 @@ func _internal_getStoryById(accountPeerId: PeerId, postbox: Postbox, network: Ne
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -2323,6 +2370,7 @@ func _internal_setStoryReaction(account: Account, peerId: EnginePeer.Id, id: Int
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -2355,6 +2403,7 @@ func _internal_setStoryReaction(account: Account, peerId: EnginePeer.Id, id: Int
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
|
@ -60,6 +60,7 @@ public final class EngineStoryItem: Equatable {
|
||||
public let timestamp: Int32
|
||||
public let expirationTimestamp: Int32
|
||||
public let media: EngineMedia
|
||||
public let alternativeMedia: EngineMedia?
|
||||
public let mediaAreas: [MediaArea]
|
||||
public let text: String
|
||||
public let entities: [MessageTextEntity]
|
||||
@ -78,11 +79,12 @@ public final class EngineStoryItem: Equatable {
|
||||
public let myReaction: MessageReaction.Reaction?
|
||||
public let forwardInfo: ForwardInfo?
|
||||
|
||||
public init(id: Int32, timestamp: Int32, expirationTimestamp: Int32, media: EngineMedia, mediaAreas: [MediaArea], text: String, entities: [MessageTextEntity], views: Views?, privacy: EngineStoryPrivacy?, isPinned: Bool, isExpired: Bool, isPublic: Bool, isPending: Bool, isCloseFriends: Bool, isContacts: Bool, isSelectedContacts: Bool, isForwardingDisabled: Bool, isEdited: Bool, isMy: Bool, myReaction: MessageReaction.Reaction?, forwardInfo: ForwardInfo?) {
|
||||
public init(id: Int32, timestamp: Int32, expirationTimestamp: Int32, media: EngineMedia, alternativeMedia: EngineMedia?, mediaAreas: [MediaArea], text: String, entities: [MessageTextEntity], views: Views?, privacy: EngineStoryPrivacy?, isPinned: Bool, isExpired: Bool, isPublic: Bool, isPending: Bool, isCloseFriends: Bool, isContacts: Bool, isSelectedContacts: Bool, isForwardingDisabled: Bool, isEdited: Bool, isMy: Bool, myReaction: MessageReaction.Reaction?, forwardInfo: ForwardInfo?) {
|
||||
self.id = id
|
||||
self.timestamp = timestamp
|
||||
self.expirationTimestamp = expirationTimestamp
|
||||
self.media = media
|
||||
self.alternativeMedia = alternativeMedia
|
||||
self.mediaAreas = mediaAreas
|
||||
self.text = text
|
||||
self.entities = entities
|
||||
@ -115,6 +117,9 @@ public final class EngineStoryItem: Equatable {
|
||||
if lhs.media != rhs.media {
|
||||
return false
|
||||
}
|
||||
if lhs.alternativeMedia != rhs.alternativeMedia {
|
||||
return false
|
||||
}
|
||||
if lhs.mediaAreas != rhs.mediaAreas {
|
||||
return false
|
||||
}
|
||||
@ -188,6 +193,7 @@ public extension EngineStoryItem {
|
||||
timestamp: self.timestamp,
|
||||
expirationTimestamp: self.expirationTimestamp,
|
||||
media: self.media._asMedia(),
|
||||
alternativeMedia: self.alternativeMedia?._asMedia(),
|
||||
mediaAreas: self.mediaAreas,
|
||||
text: self.text,
|
||||
entities: self.entities,
|
||||
@ -566,6 +572,7 @@ public final class PeerStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -710,6 +717,7 @@ public final class PeerStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -871,6 +879,7 @@ public final class PeerStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -918,6 +927,7 @@ public final class PeerStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -967,6 +977,7 @@ public final class PeerStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1012,6 +1023,7 @@ public final class PeerStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -1181,6 +1193,7 @@ public final class PeerExpiringStoryListContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
|
@ -18,6 +18,7 @@ public final class StoryPreloadInfo {
|
||||
public let peer: PeerReference
|
||||
public let storyId: Int32
|
||||
public let media: EngineMedia
|
||||
public let alternativeMedia: EngineMedia?
|
||||
public let reactions: [MessageReaction.Reaction]
|
||||
public let priority: Priority
|
||||
|
||||
@ -25,12 +26,14 @@ public final class StoryPreloadInfo {
|
||||
peer: PeerReference,
|
||||
storyId: Int32,
|
||||
media: EngineMedia,
|
||||
alternativeMedia: EngineMedia?,
|
||||
reactions: [MessageReaction.Reaction],
|
||||
priority: Priority
|
||||
) {
|
||||
self.peer = peer
|
||||
self.storyId = storyId
|
||||
self.media = media
|
||||
self.alternativeMedia = alternativeMedia
|
||||
self.reactions = reactions
|
||||
self.priority = priority
|
||||
}
|
||||
@ -1136,6 +1139,7 @@ public extension TelegramEngine {
|
||||
peer: peerReference,
|
||||
storyId: itemAndPeer.item.id,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: itemAndPeer.item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
reactions: reactions,
|
||||
priority: .top(position: nextPriority)
|
||||
)
|
||||
@ -1168,6 +1172,7 @@ public extension TelegramEngine {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
|
@ -236,6 +236,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -282,6 +283,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: Int32.max,
|
||||
media: EngineMedia(item.media),
|
||||
alternativeMedia: nil,
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -944,6 +946,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
||||
peer: peerReference,
|
||||
storyId: item.id,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
reactions: reactions,
|
||||
priority: .top(position: nextPriority)
|
||||
)
|
||||
@ -955,7 +958,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
||||
for (id, info) in resultResources.sorted(by: { $0.value.priority < $1.value.priority }) {
|
||||
validIds.append(id)
|
||||
if self.preloadStoryResourceDisposables[id] == nil {
|
||||
self.preloadStoryResourceDisposables[id] = preloadStoryMedia(context: context, peer: info.peer, storyId: info.storyId, media: info.media, reactions: info.reactions).startStrict()
|
||||
self.preloadStoryResourceDisposables[id] = preloadStoryMedia(context: context, info: info).startStrict()
|
||||
}
|
||||
}
|
||||
|
||||
@ -1220,6 +1223,7 @@ public final class SingleStoryContentContextImpl: StoryContentContext {
|
||||
timestamp: itemValue.timestamp,
|
||||
expirationTimestamp: itemValue.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: itemValue.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: itemValue.mediaAreas,
|
||||
text: itemValue.text,
|
||||
entities: itemValue.entities,
|
||||
@ -1530,6 +1534,7 @@ public final class PeerStoryListContentContextImpl: StoryContentContext {
|
||||
peer: peerReference,
|
||||
storyId: item.id,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
reactions: reactions,
|
||||
priority: .top(position: nextPriority)
|
||||
)
|
||||
@ -1543,7 +1548,7 @@ public final class PeerStoryListContentContextImpl: StoryContentContext {
|
||||
if let mediaId = info.media.id {
|
||||
validIds.append(mediaId)
|
||||
if self.preloadStoryResourceDisposables[mediaId] == nil {
|
||||
self.preloadStoryResourceDisposables[mediaId] = preloadStoryMedia(context: context, peer: info.peer, storyId: info.storyId, media: info.media, reactions: info.reactions).startStrict()
|
||||
self.preloadStoryResourceDisposables[mediaId] = preloadStoryMedia(context: context, info: info).startStrict()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1629,13 +1634,20 @@ public final class PeerStoryListContentContextImpl: StoryContentContext {
|
||||
}
|
||||
}
|
||||
|
||||
public func preloadStoryMedia(context: AccountContext, peer: PeerReference, storyId: Int32, media: EngineMedia, reactions: [MessageReaction.Reaction]) -> Signal<Never, NoError> {
|
||||
public func preloadStoryMedia(context: AccountContext, info: StoryPreloadInfo) -> Signal<Never, NoError> {
|
||||
var signals: [Signal<Never, NoError>] = []
|
||||
|
||||
switch media {
|
||||
let selectedMedia: EngineMedia
|
||||
if context.sharedContext.immediateExperimentalUISettings.alternativeStoryMedia, let alternativeMedia = info.alternativeMedia {
|
||||
selectedMedia = alternativeMedia
|
||||
} else {
|
||||
selectedMedia = info.media
|
||||
}
|
||||
|
||||
switch selectedMedia {
|
||||
case let .image(image):
|
||||
if let representation = largestImageRepresentation(image.representations) {
|
||||
signals.append(fetchedMediaResource(mediaBox: context.account.postbox.mediaBox, userLocation: .peer(peer.id), userContentType: .story, reference: .media(media: .story(peer: peer, id: storyId, media: media._asMedia()), resource: representation.resource), range: nil)
|
||||
signals.append(fetchedMediaResource(mediaBox: context.account.postbox.mediaBox, userLocation: .peer(info.peer.id), userContentType: .story, reference: .media(media: .story(peer: info.peer, id: info.storyId, media: selectedMedia._asMedia()), resource: representation.resource), range: nil)
|
||||
|> ignoreValues
|
||||
|> `catch` { _ -> Signal<Never, NoError> in
|
||||
return .complete()
|
||||
@ -1652,7 +1664,7 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
||||
}
|
||||
}
|
||||
|
||||
signals.append(fetchedMediaResource(mediaBox: context.account.postbox.mediaBox, userLocation: .peer(peer.id), userContentType: .story, reference: .media(media: .story(peer: peer, id: storyId, media: media._asMedia()), resource: file.resource), range: fetchRange)
|
||||
signals.append(fetchedMediaResource(mediaBox: context.account.postbox.mediaBox, userLocation: .peer(info.peer.id), userContentType: .story, reference: .media(media: .story(peer: info.peer, id: info.storyId, media: selectedMedia._asMedia()), resource: file.resource), range: fetchRange)
|
||||
|> ignoreValues
|
||||
|> `catch` { _ -> Signal<Never, NoError> in
|
||||
return .complete()
|
||||
@ -1665,7 +1677,7 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
||||
|
||||
var builtinReactions: [String] = []
|
||||
var customReactions: [Int64] = []
|
||||
for reaction in reactions {
|
||||
for reaction in info.reactions {
|
||||
switch reaction {
|
||||
case let .builtin(value):
|
||||
if !builtinReactions.contains(value) {
|
||||
@ -1716,8 +1728,6 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
||||
return Void()
|
||||
}
|
||||
|
||||
//let fileFetchPriorityDisposable = context.engine.resources.pushPriorityDownload(resourceId: file.resource.id.stringRepresentation, priority: 1)
|
||||
|
||||
let statusDisposable = statusSignal.start(completed: {
|
||||
subscriber.putCompletion()
|
||||
})
|
||||
@ -1726,7 +1736,6 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
||||
return ActionDisposable {
|
||||
statusDisposable.dispose()
|
||||
loadDisposable.dispose()
|
||||
//fileFetchPriorityDisposable.dispose()
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -1771,12 +1780,9 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
||||
})
|
||||
let loadDisposable = loadSignal.start()
|
||||
|
||||
//let fileFetchPriorityDisposable = context.engine.resources.pushPriorityDownload(resourceId: file.resource.id.stringRepresentation, priority: 1)
|
||||
|
||||
return ActionDisposable {
|
||||
statusDisposable.dispose()
|
||||
loadDisposable.dispose()
|
||||
//fileFetchPriorityDisposable.dispose()
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -2038,6 +2044,7 @@ private func getCachedStory(storyId: StoryId, transaction: Transaction) -> Engin
|
||||
timestamp: item.timestamp,
|
||||
expirationTimestamp: item.expirationTimestamp,
|
||||
media: EngineMedia(media),
|
||||
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||
mediaAreas: item.mediaAreas,
|
||||
text: item.text,
|
||||
entities: item.entities,
|
||||
@ -2686,6 +2693,7 @@ public final class RepostStoriesContentContextImpl: StoryContentContext {
|
||||
peer: peerReference,
|
||||
storyId: item.id,
|
||||
media: item.media,
|
||||
alternativeMedia: item.alternativeMedia,
|
||||
reactions: reactions,
|
||||
priority: .top(position: nextPriority)
|
||||
)
|
||||
@ -2697,7 +2705,7 @@ public final class RepostStoriesContentContextImpl: StoryContentContext {
|
||||
for (id, info) in resultResources.sorted(by: { $0.value.priority < $1.value.priority }) {
|
||||
validIds.append(id)
|
||||
if self.preloadStoryResourceDisposables[id] == nil {
|
||||
self.preloadStoryResourceDisposables[id] = preloadStoryMedia(context: context, peer: info.peer, storyId: info.storyId, media: info.media, reactions: info.reactions).startStrict()
|
||||
self.preloadStoryResourceDisposables[id] = preloadStoryMedia(context: context, info: info).startStrict()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -574,7 +574,24 @@ final class StoryItemContentComponent: Component {
|
||||
|
||||
let peerReference = PeerReference(component.peer._asPeer())
|
||||
|
||||
let selectedMedia: EngineMedia
|
||||
var messageMedia: EngineMedia?
|
||||
if component.context.sharedContext.immediateExperimentalUISettings.alternativeStoryMedia, let alternativeMedia = component.item.alternativeMedia {
|
||||
selectedMedia = alternativeMedia
|
||||
|
||||
switch alternativeMedia {
|
||||
case let .image(image):
|
||||
messageMedia = .image(image)
|
||||
case let .file(file):
|
||||
messageMedia = .file(file)
|
||||
case .unsupported:
|
||||
self.contentLoaded = true
|
||||
default:
|
||||
break
|
||||
}
|
||||
} else {
|
||||
selectedMedia = component.item.media
|
||||
|
||||
switch component.item.media {
|
||||
case let .image(image):
|
||||
messageMedia = .image(image)
|
||||
@ -585,6 +602,7 @@ final class StoryItemContentComponent: Component {
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
var reloadMedia = false
|
||||
if self.currentMessageMedia?.id != messageMedia?.id {
|
||||
@ -678,7 +696,7 @@ final class StoryItemContentComponent: Component {
|
||||
strings: component.strings,
|
||||
peer: component.peer,
|
||||
storyId: component.item.id,
|
||||
media: component.item.media,
|
||||
media: messageMedia,
|
||||
size: availableSize,
|
||||
isCaptureProtected: component.item.isForwardingDisabled,
|
||||
attemptSynchronous: synchronousLoad,
|
||||
@ -720,7 +738,7 @@ final class StoryItemContentComponent: Component {
|
||||
}
|
||||
}
|
||||
|
||||
switch component.item.media {
|
||||
switch selectedMedia {
|
||||
case .image, .file:
|
||||
if let unsupportedText = self.unsupportedText {
|
||||
self.unsupportedText = nil
|
||||
|
@ -55,7 +55,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
||||
public var crashOnMemoryPressure: Bool
|
||||
public var unidirectionalSwipeToReply: Bool
|
||||
public var dustEffect: Bool
|
||||
public var callUIV2: Bool
|
||||
public var alternativeStoryMedia: Bool
|
||||
public var allowWebViewInspection: Bool
|
||||
|
||||
public static var defaultSettings: ExperimentalUISettings {
|
||||
@ -90,7 +90,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
||||
crashOnMemoryPressure: false,
|
||||
unidirectionalSwipeToReply: false,
|
||||
dustEffect: false,
|
||||
callUIV2: false,
|
||||
alternativeStoryMedia: false,
|
||||
allowWebViewInspection: false
|
||||
)
|
||||
}
|
||||
@ -126,7 +126,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
||||
crashOnMemoryPressure: Bool,
|
||||
unidirectionalSwipeToReply: Bool,
|
||||
dustEffect: Bool,
|
||||
callUIV2: Bool,
|
||||
alternativeStoryMedia: Bool,
|
||||
allowWebViewInspection: Bool
|
||||
) {
|
||||
self.keepChatNavigationStack = keepChatNavigationStack
|
||||
@ -159,7 +159,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
||||
self.crashOnMemoryPressure = crashOnMemoryPressure
|
||||
self.unidirectionalSwipeToReply = unidirectionalSwipeToReply
|
||||
self.dustEffect = dustEffect
|
||||
self.callUIV2 = callUIV2
|
||||
self.alternativeStoryMedia = alternativeStoryMedia
|
||||
self.allowWebViewInspection = allowWebViewInspection
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
||||
self.crashOnMemoryPressure = try container.decodeIfPresent(Bool.self, forKey: "crashOnMemoryPressure") ?? false
|
||||
self.unidirectionalSwipeToReply = try container.decodeIfPresent(Bool.self, forKey: "unidirectionalSwipeToReply") ?? false
|
||||
self.dustEffect = try container.decodeIfPresent(Bool.self, forKey: "dustEffect_2") ?? false
|
||||
self.callUIV2 = try container.decodeIfPresent(Bool.self, forKey: "callUIV2") ?? false
|
||||
self.alternativeStoryMedia = try container.decodeIfPresent(Bool.self, forKey: "alternativeStoryMedia") ?? false
|
||||
self.allowWebViewInspection = try container.decodeIfPresent(Bool.self, forKey: "allowWebViewInspection") ?? false
|
||||
}
|
||||
|
||||
@ -233,7 +233,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
||||
try container.encode(self.crashOnMemoryPressure, forKey: "crashOnMemoryPressure")
|
||||
try container.encode(self.unidirectionalSwipeToReply, forKey: "unidirectionalSwipeToReply")
|
||||
try container.encode(self.dustEffect, forKey: "dustEffect_2")
|
||||
try container.encode(self.callUIV2, forKey: "callUIV2")
|
||||
try container.encode(self.alternativeStoryMedia, forKey: "alternativeStoryMedia")
|
||||
try container.encode(self.allowWebViewInspection, forKey: "allowWebViewInspection")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user