Story data saved experiment

This commit is contained in:
Isaac 2023-12-20 14:06:21 +04:00
parent 7c3432be3e
commit 9d30e0bac3
11 changed files with 140 additions and 40 deletions

View File

@ -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()
}
}
}

View File

@ -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))

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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()
}
}

View File

@ -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

View File

@ -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")
}
}