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 {
|
if let mediaId = info.media.id {
|
||||||
validIds.append(mediaId)
|
validIds.append(mediaId)
|
||||||
if self.preloadStoryResourceDisposables[mediaId] == nil {
|
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 skipReadHistory(PresentationTheme, Bool)
|
||||||
case unidirectionalSwipeToReply(Bool)
|
case unidirectionalSwipeToReply(Bool)
|
||||||
case dustEffect(Bool)
|
case dustEffect(Bool)
|
||||||
case callUIV2(Bool)
|
case alternativeStoryMedia(Bool)
|
||||||
case crashOnSlowQueries(PresentationTheme, Bool)
|
case crashOnSlowQueries(PresentationTheme, Bool)
|
||||||
case crashOnMemoryPressure(PresentationTheme, Bool)
|
case crashOnMemoryPressure(PresentationTheme, Bool)
|
||||||
case clearTips(PresentationTheme)
|
case clearTips(PresentationTheme)
|
||||||
@ -125,7 +125,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
return DebugControllerSection.logging.rawValue
|
return DebugControllerSection.logging.rawValue
|
||||||
case .webViewInspection, .resetWebViewCache:
|
case .webViewInspection, .resetWebViewCache:
|
||||||
return DebugControllerSection.web.rawValue
|
return DebugControllerSection.web.rawValue
|
||||||
case .keepChatNavigationStack, .skipReadHistory, .unidirectionalSwipeToReply, .dustEffect, .callUIV2, .crashOnSlowQueries, .crashOnMemoryPressure:
|
case .keepChatNavigationStack, .skipReadHistory, .unidirectionalSwipeToReply, .dustEffect, .alternativeStoryMedia, .crashOnSlowQueries, .crashOnMemoryPressure:
|
||||||
return DebugControllerSection.experiments.rawValue
|
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:
|
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
|
return DebugControllerSection.experiments.rawValue
|
||||||
@ -180,7 +180,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
return 17
|
return 17
|
||||||
case .dustEffect:
|
case .dustEffect:
|
||||||
return 18
|
return 18
|
||||||
case .callUIV2:
|
case .alternativeStoryMedia:
|
||||||
return 19
|
return 19
|
||||||
case .crashOnSlowQueries:
|
case .crashOnSlowQueries:
|
||||||
return 20
|
return 20
|
||||||
@ -959,11 +959,11 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
return settings
|
return settings
|
||||||
}).start()
|
}).start()
|
||||||
})
|
})
|
||||||
case let .callUIV2(value):
|
case let .alternativeStoryMedia(value):
|
||||||
return ItemListSwitchItem(presentationData: presentationData, title: "Call UI V2", value: value, sectionId: self.section, style: .blocks, updated: { value in
|
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
|
let _ = updateExperimentalUISettingsInteractively(accountManager: arguments.sharedContext.accountManager, { settings in
|
||||||
var settings = settings
|
var settings = settings
|
||||||
settings.callUIV2 = value
|
settings.alternativeStoryMedia = value
|
||||||
return settings
|
return settings
|
||||||
}).start()
|
}).start()
|
||||||
})
|
})
|
||||||
@ -1427,7 +1427,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present
|
|||||||
#endif
|
#endif
|
||||||
entries.append(.unidirectionalSwipeToReply(experimentalSettings.unidirectionalSwipeToReply))
|
entries.append(.unidirectionalSwipeToReply(experimentalSettings.unidirectionalSwipeToReply))
|
||||||
entries.append(.dustEffect(experimentalSettings.dustEffect))
|
entries.append(.dustEffect(experimentalSettings.dustEffect))
|
||||||
entries.append(.callUIV2(experimentalSettings.callUIV2))
|
entries.append(.alternativeStoryMedia(experimentalSettings.alternativeStoryMedia))
|
||||||
}
|
}
|
||||||
entries.append(.crashOnSlowQueries(presentationData.theme, experimentalSettings.crashOnLongQueries))
|
entries.append(.crashOnSlowQueries(presentationData.theme, experimentalSettings.crashOnLongQueries))
|
||||||
entries.append(.crashOnMemoryPressure(presentationData.theme, experimentalSettings.crashOnMemoryPressure))
|
entries.append(.crashOnMemoryPressure(presentationData.theme, experimentalSettings.crashOnMemoryPressure))
|
||||||
|
@ -4638,6 +4638,7 @@ func replayFinalState(
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -4670,6 +4671,7 @@ func replayFinalState(
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
|
@ -321,6 +321,7 @@ private final class StoryStatsPublicForwardsContextImpl {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
|
@ -528,6 +528,7 @@ public final class EngineStoryViewListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -571,6 +572,7 @@ public final class EngineStoryViewListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -609,6 +611,7 @@ public final class EngineStoryViewListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -714,6 +717,7 @@ public final class EngineStoryViewListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
|
@ -244,6 +244,7 @@ public enum Stories {
|
|||||||
case timestamp
|
case timestamp
|
||||||
case expirationTimestamp
|
case expirationTimestamp
|
||||||
case media
|
case media
|
||||||
|
case alternativeMedia
|
||||||
case mediaAreas
|
case mediaAreas
|
||||||
case text
|
case text
|
||||||
case entities
|
case entities
|
||||||
@ -266,6 +267,7 @@ public enum Stories {
|
|||||||
public let timestamp: Int32
|
public let timestamp: Int32
|
||||||
public let expirationTimestamp: Int32
|
public let expirationTimestamp: Int32
|
||||||
public let media: Media?
|
public let media: Media?
|
||||||
|
public let alternativeMedia: Media?
|
||||||
public let mediaAreas: [MediaArea]
|
public let mediaAreas: [MediaArea]
|
||||||
public let text: String
|
public let text: String
|
||||||
public let entities: [MessageTextEntity]
|
public let entities: [MessageTextEntity]
|
||||||
@ -288,6 +290,7 @@ public enum Stories {
|
|||||||
timestamp: Int32,
|
timestamp: Int32,
|
||||||
expirationTimestamp: Int32,
|
expirationTimestamp: Int32,
|
||||||
media: Media?,
|
media: Media?,
|
||||||
|
alternativeMedia: Media?,
|
||||||
mediaAreas: [MediaArea],
|
mediaAreas: [MediaArea],
|
||||||
text: String,
|
text: String,
|
||||||
entities: [MessageTextEntity],
|
entities: [MessageTextEntity],
|
||||||
@ -309,6 +312,7 @@ public enum Stories {
|
|||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
self.expirationTimestamp = expirationTimestamp
|
self.expirationTimestamp = expirationTimestamp
|
||||||
self.media = media
|
self.media = media
|
||||||
|
self.alternativeMedia = alternativeMedia
|
||||||
self.mediaAreas = mediaAreas
|
self.mediaAreas = mediaAreas
|
||||||
self.text = text
|
self.text = text
|
||||||
self.entities = entities
|
self.entities = entities
|
||||||
@ -339,6 +343,13 @@ public enum Stories {
|
|||||||
} else {
|
} else {
|
||||||
self.media = nil
|
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.mediaAreas = try container.decodeIfPresent([MediaArea].self, forKey: .mediaAreas) ?? []
|
||||||
|
|
||||||
self.text = try container.decode(String.self, forKey: .text)
|
self.text = try container.decode(String.self, forKey: .text)
|
||||||
@ -371,6 +382,14 @@ public enum Stories {
|
|||||||
let mediaData = encoder.makeData()
|
let mediaData = encoder.makeData()
|
||||||
try container.encode(mediaData, forKey: .media)
|
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.mediaAreas, forKey: .mediaAreas)
|
||||||
|
|
||||||
try container.encode(self.text, forKey: .text)
|
try container.encode(self.text, forKey: .text)
|
||||||
@ -410,6 +429,17 @@ public enum Stories {
|
|||||||
return false
|
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 {
|
if lhs.mediaAreas != rhs.mediaAreas {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -1153,6 +1183,7 @@ func _internal_uploadStoryImpl(
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1334,6 +1365,7 @@ func _internal_editStoryPrivacy(account: Account, id: Int32, privacy: EngineStor
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1364,6 +1396,7 @@ func _internal_editStoryPrivacy(account: Account, id: Int32, privacy: EngineStor
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1557,6 +1590,7 @@ func _internal_updateStoriesArePinned(account: Account, peerId: PeerId, ids: [In
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1586,6 +1620,7 @@ func _internal_updateStoriesArePinned(account: Account, peerId: PeerId, ids: [In
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1774,11 +1809,22 @@ extension Stories.StoredItem {
|
|||||||
mergedForwardInfo = forwardFrom.flatMap(Stories.Item.ForwardInfo.init(apiForwardInfo:))
|
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(
|
let item = Stories.Item(
|
||||||
id: id,
|
id: id,
|
||||||
timestamp: date,
|
timestamp: date,
|
||||||
expirationTimestamp: expireDate,
|
expirationTimestamp: expireDate,
|
||||||
media: parsedMedia,
|
media: parsedMedia,
|
||||||
|
alternativeMedia: parsedAlternativeMedia,
|
||||||
mediaAreas: mediaAreas?.compactMap(mediaAreaFromApiMediaArea) ?? [],
|
mediaAreas: mediaAreas?.compactMap(mediaAreaFromApiMediaArea) ?? [],
|
||||||
text: caption ?? "",
|
text: caption ?? "",
|
||||||
entities: entities.flatMap { entities in return messageTextEntitiesFromApiEntities(entities) } ?? [],
|
entities: entities.flatMap { entities in return messageTextEntitiesFromApiEntities(entities) } ?? [],
|
||||||
@ -1842,6 +1888,7 @@ func _internal_getStoryById(accountPeerId: PeerId, postbox: Postbox, network: Ne
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -2323,6 +2370,7 @@ func _internal_setStoryReaction(account: Account, peerId: EnginePeer.Id, id: Int
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -2355,6 +2403,7 @@ func _internal_setStoryReaction(account: Account, peerId: EnginePeer.Id, id: Int
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
|
@ -60,6 +60,7 @@ public final class EngineStoryItem: Equatable {
|
|||||||
public let timestamp: Int32
|
public let timestamp: Int32
|
||||||
public let expirationTimestamp: Int32
|
public let expirationTimestamp: Int32
|
||||||
public let media: EngineMedia
|
public let media: EngineMedia
|
||||||
|
public let alternativeMedia: EngineMedia?
|
||||||
public let mediaAreas: [MediaArea]
|
public let mediaAreas: [MediaArea]
|
||||||
public let text: String
|
public let text: String
|
||||||
public let entities: [MessageTextEntity]
|
public let entities: [MessageTextEntity]
|
||||||
@ -78,11 +79,12 @@ public final class EngineStoryItem: Equatable {
|
|||||||
public let myReaction: MessageReaction.Reaction?
|
public let myReaction: MessageReaction.Reaction?
|
||||||
public let forwardInfo: ForwardInfo?
|
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.id = id
|
||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
self.expirationTimestamp = expirationTimestamp
|
self.expirationTimestamp = expirationTimestamp
|
||||||
self.media = media
|
self.media = media
|
||||||
|
self.alternativeMedia = alternativeMedia
|
||||||
self.mediaAreas = mediaAreas
|
self.mediaAreas = mediaAreas
|
||||||
self.text = text
|
self.text = text
|
||||||
self.entities = entities
|
self.entities = entities
|
||||||
@ -115,6 +117,9 @@ public final class EngineStoryItem: Equatable {
|
|||||||
if lhs.media != rhs.media {
|
if lhs.media != rhs.media {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if lhs.alternativeMedia != rhs.alternativeMedia {
|
||||||
|
return false
|
||||||
|
}
|
||||||
if lhs.mediaAreas != rhs.mediaAreas {
|
if lhs.mediaAreas != rhs.mediaAreas {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -188,6 +193,7 @@ public extension EngineStoryItem {
|
|||||||
timestamp: self.timestamp,
|
timestamp: self.timestamp,
|
||||||
expirationTimestamp: self.expirationTimestamp,
|
expirationTimestamp: self.expirationTimestamp,
|
||||||
media: self.media._asMedia(),
|
media: self.media._asMedia(),
|
||||||
|
alternativeMedia: self.alternativeMedia?._asMedia(),
|
||||||
mediaAreas: self.mediaAreas,
|
mediaAreas: self.mediaAreas,
|
||||||
text: self.text,
|
text: self.text,
|
||||||
entities: self.entities,
|
entities: self.entities,
|
||||||
@ -566,6 +572,7 @@ public final class PeerStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -710,6 +717,7 @@ public final class PeerStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -871,6 +879,7 @@ public final class PeerStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -918,6 +927,7 @@ public final class PeerStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -967,6 +977,7 @@ public final class PeerStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1012,6 +1023,7 @@ public final class PeerStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -1181,6 +1193,7 @@ public final class PeerExpiringStoryListContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
|
@ -18,6 +18,7 @@ public final class StoryPreloadInfo {
|
|||||||
public let peer: PeerReference
|
public let peer: PeerReference
|
||||||
public let storyId: Int32
|
public let storyId: Int32
|
||||||
public let media: EngineMedia
|
public let media: EngineMedia
|
||||||
|
public let alternativeMedia: EngineMedia?
|
||||||
public let reactions: [MessageReaction.Reaction]
|
public let reactions: [MessageReaction.Reaction]
|
||||||
public let priority: Priority
|
public let priority: Priority
|
||||||
|
|
||||||
@ -25,12 +26,14 @@ public final class StoryPreloadInfo {
|
|||||||
peer: PeerReference,
|
peer: PeerReference,
|
||||||
storyId: Int32,
|
storyId: Int32,
|
||||||
media: EngineMedia,
|
media: EngineMedia,
|
||||||
|
alternativeMedia: EngineMedia?,
|
||||||
reactions: [MessageReaction.Reaction],
|
reactions: [MessageReaction.Reaction],
|
||||||
priority: Priority
|
priority: Priority
|
||||||
) {
|
) {
|
||||||
self.peer = peer
|
self.peer = peer
|
||||||
self.storyId = storyId
|
self.storyId = storyId
|
||||||
self.media = media
|
self.media = media
|
||||||
|
self.alternativeMedia = alternativeMedia
|
||||||
self.reactions = reactions
|
self.reactions = reactions
|
||||||
self.priority = priority
|
self.priority = priority
|
||||||
}
|
}
|
||||||
@ -1136,6 +1139,7 @@ public extension TelegramEngine {
|
|||||||
peer: peerReference,
|
peer: peerReference,
|
||||||
storyId: itemAndPeer.item.id,
|
storyId: itemAndPeer.item.id,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: itemAndPeer.item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
reactions: reactions,
|
reactions: reactions,
|
||||||
priority: .top(position: nextPriority)
|
priority: .top(position: nextPriority)
|
||||||
)
|
)
|
||||||
@ -1168,6 +1172,7 @@ public extension TelegramEngine {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
|
@ -236,6 +236,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -282,6 +283,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: Int32.max,
|
expirationTimestamp: Int32.max,
|
||||||
media: EngineMedia(item.media),
|
media: EngineMedia(item.media),
|
||||||
|
alternativeMedia: nil,
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -944,6 +946,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
|||||||
peer: peerReference,
|
peer: peerReference,
|
||||||
storyId: item.id,
|
storyId: item.id,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
reactions: reactions,
|
reactions: reactions,
|
||||||
priority: .top(position: nextPriority)
|
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 }) {
|
for (id, info) in resultResources.sorted(by: { $0.value.priority < $1.value.priority }) {
|
||||||
validIds.append(id)
|
validIds.append(id)
|
||||||
if self.preloadStoryResourceDisposables[id] == nil {
|
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,
|
timestamp: itemValue.timestamp,
|
||||||
expirationTimestamp: itemValue.expirationTimestamp,
|
expirationTimestamp: itemValue.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: itemValue.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: itemValue.mediaAreas,
|
mediaAreas: itemValue.mediaAreas,
|
||||||
text: itemValue.text,
|
text: itemValue.text,
|
||||||
entities: itemValue.entities,
|
entities: itemValue.entities,
|
||||||
@ -1530,6 +1534,7 @@ public final class PeerStoryListContentContextImpl: StoryContentContext {
|
|||||||
peer: peerReference,
|
peer: peerReference,
|
||||||
storyId: item.id,
|
storyId: item.id,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
reactions: reactions,
|
reactions: reactions,
|
||||||
priority: .top(position: nextPriority)
|
priority: .top(position: nextPriority)
|
||||||
)
|
)
|
||||||
@ -1543,7 +1548,7 @@ public final class PeerStoryListContentContextImpl: StoryContentContext {
|
|||||||
if let mediaId = info.media.id {
|
if let mediaId = info.media.id {
|
||||||
validIds.append(mediaId)
|
validIds.append(mediaId)
|
||||||
if self.preloadStoryResourceDisposables[mediaId] == nil {
|
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>] = []
|
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):
|
case let .image(image):
|
||||||
if let representation = largestImageRepresentation(image.representations) {
|
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
|
|> ignoreValues
|
||||||
|> `catch` { _ -> Signal<Never, NoError> in
|
|> `catch` { _ -> Signal<Never, NoError> in
|
||||||
return .complete()
|
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
|
|> ignoreValues
|
||||||
|> `catch` { _ -> Signal<Never, NoError> in
|
|> `catch` { _ -> Signal<Never, NoError> in
|
||||||
return .complete()
|
return .complete()
|
||||||
@ -1665,7 +1677,7 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
|||||||
|
|
||||||
var builtinReactions: [String] = []
|
var builtinReactions: [String] = []
|
||||||
var customReactions: [Int64] = []
|
var customReactions: [Int64] = []
|
||||||
for reaction in reactions {
|
for reaction in info.reactions {
|
||||||
switch reaction {
|
switch reaction {
|
||||||
case let .builtin(value):
|
case let .builtin(value):
|
||||||
if !builtinReactions.contains(value) {
|
if !builtinReactions.contains(value) {
|
||||||
@ -1716,8 +1728,6 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
|||||||
return Void()
|
return Void()
|
||||||
}
|
}
|
||||||
|
|
||||||
//let fileFetchPriorityDisposable = context.engine.resources.pushPriorityDownload(resourceId: file.resource.id.stringRepresentation, priority: 1)
|
|
||||||
|
|
||||||
let statusDisposable = statusSignal.start(completed: {
|
let statusDisposable = statusSignal.start(completed: {
|
||||||
subscriber.putCompletion()
|
subscriber.putCompletion()
|
||||||
})
|
})
|
||||||
@ -1726,7 +1736,6 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
|||||||
return ActionDisposable {
|
return ActionDisposable {
|
||||||
statusDisposable.dispose()
|
statusDisposable.dispose()
|
||||||
loadDisposable.dispose()
|
loadDisposable.dispose()
|
||||||
//fileFetchPriorityDisposable.dispose()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -1771,12 +1780,9 @@ public func preloadStoryMedia(context: AccountContext, peer: PeerReference, stor
|
|||||||
})
|
})
|
||||||
let loadDisposable = loadSignal.start()
|
let loadDisposable = loadSignal.start()
|
||||||
|
|
||||||
//let fileFetchPriorityDisposable = context.engine.resources.pushPriorityDownload(resourceId: file.resource.id.stringRepresentation, priority: 1)
|
|
||||||
|
|
||||||
return ActionDisposable {
|
return ActionDisposable {
|
||||||
statusDisposable.dispose()
|
statusDisposable.dispose()
|
||||||
loadDisposable.dispose()
|
loadDisposable.dispose()
|
||||||
//fileFetchPriorityDisposable.dispose()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -2038,6 +2044,7 @@ private func getCachedStory(storyId: StoryId, transaction: Transaction) -> Engin
|
|||||||
timestamp: item.timestamp,
|
timestamp: item.timestamp,
|
||||||
expirationTimestamp: item.expirationTimestamp,
|
expirationTimestamp: item.expirationTimestamp,
|
||||||
media: EngineMedia(media),
|
media: EngineMedia(media),
|
||||||
|
alternativeMedia: item.alternativeMedia.flatMap(EngineMedia.init),
|
||||||
mediaAreas: item.mediaAreas,
|
mediaAreas: item.mediaAreas,
|
||||||
text: item.text,
|
text: item.text,
|
||||||
entities: item.entities,
|
entities: item.entities,
|
||||||
@ -2686,6 +2693,7 @@ public final class RepostStoriesContentContextImpl: StoryContentContext {
|
|||||||
peer: peerReference,
|
peer: peerReference,
|
||||||
storyId: item.id,
|
storyId: item.id,
|
||||||
media: item.media,
|
media: item.media,
|
||||||
|
alternativeMedia: item.alternativeMedia,
|
||||||
reactions: reactions,
|
reactions: reactions,
|
||||||
priority: .top(position: nextPriority)
|
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 }) {
|
for (id, info) in resultResources.sorted(by: { $0.value.priority < $1.value.priority }) {
|
||||||
validIds.append(id)
|
validIds.append(id)
|
||||||
if self.preloadStoryResourceDisposables[id] == nil {
|
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,16 +574,34 @@ final class StoryItemContentComponent: Component {
|
|||||||
|
|
||||||
let peerReference = PeerReference(component.peer._asPeer())
|
let peerReference = PeerReference(component.peer._asPeer())
|
||||||
|
|
||||||
|
let selectedMedia: EngineMedia
|
||||||
var messageMedia: EngineMedia?
|
var messageMedia: EngineMedia?
|
||||||
switch component.item.media {
|
if component.context.sharedContext.immediateExperimentalUISettings.alternativeStoryMedia, let alternativeMedia = component.item.alternativeMedia {
|
||||||
case let .image(image):
|
selectedMedia = alternativeMedia
|
||||||
messageMedia = .image(image)
|
|
||||||
case let .file(file):
|
switch alternativeMedia {
|
||||||
messageMedia = .file(file)
|
case let .image(image):
|
||||||
case .unsupported:
|
messageMedia = .image(image)
|
||||||
self.contentLoaded = true
|
case let .file(file):
|
||||||
default:
|
messageMedia = .file(file)
|
||||||
break
|
case .unsupported:
|
||||||
|
self.contentLoaded = true
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
selectedMedia = component.item.media
|
||||||
|
|
||||||
|
switch component.item.media {
|
||||||
|
case let .image(image):
|
||||||
|
messageMedia = .image(image)
|
||||||
|
case let .file(file):
|
||||||
|
messageMedia = .file(file)
|
||||||
|
case .unsupported:
|
||||||
|
self.contentLoaded = true
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var reloadMedia = false
|
var reloadMedia = false
|
||||||
@ -678,7 +696,7 @@ final class StoryItemContentComponent: Component {
|
|||||||
strings: component.strings,
|
strings: component.strings,
|
||||||
peer: component.peer,
|
peer: component.peer,
|
||||||
storyId: component.item.id,
|
storyId: component.item.id,
|
||||||
media: component.item.media,
|
media: messageMedia,
|
||||||
size: availableSize,
|
size: availableSize,
|
||||||
isCaptureProtected: component.item.isForwardingDisabled,
|
isCaptureProtected: component.item.isForwardingDisabled,
|
||||||
attemptSynchronous: synchronousLoad,
|
attemptSynchronous: synchronousLoad,
|
||||||
@ -720,7 +738,7 @@ final class StoryItemContentComponent: Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch component.item.media {
|
switch selectedMedia {
|
||||||
case .image, .file:
|
case .image, .file:
|
||||||
if let unsupportedText = self.unsupportedText {
|
if let unsupportedText = self.unsupportedText {
|
||||||
self.unsupportedText = nil
|
self.unsupportedText = nil
|
||||||
|
@ -55,7 +55,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
|||||||
public var crashOnMemoryPressure: Bool
|
public var crashOnMemoryPressure: Bool
|
||||||
public var unidirectionalSwipeToReply: Bool
|
public var unidirectionalSwipeToReply: Bool
|
||||||
public var dustEffect: Bool
|
public var dustEffect: Bool
|
||||||
public var callUIV2: Bool
|
public var alternativeStoryMedia: Bool
|
||||||
public var allowWebViewInspection: Bool
|
public var allowWebViewInspection: Bool
|
||||||
|
|
||||||
public static var defaultSettings: ExperimentalUISettings {
|
public static var defaultSettings: ExperimentalUISettings {
|
||||||
@ -90,7 +90,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
|||||||
crashOnMemoryPressure: false,
|
crashOnMemoryPressure: false,
|
||||||
unidirectionalSwipeToReply: false,
|
unidirectionalSwipeToReply: false,
|
||||||
dustEffect: false,
|
dustEffect: false,
|
||||||
callUIV2: false,
|
alternativeStoryMedia: false,
|
||||||
allowWebViewInspection: false
|
allowWebViewInspection: false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
|||||||
crashOnMemoryPressure: Bool,
|
crashOnMemoryPressure: Bool,
|
||||||
unidirectionalSwipeToReply: Bool,
|
unidirectionalSwipeToReply: Bool,
|
||||||
dustEffect: Bool,
|
dustEffect: Bool,
|
||||||
callUIV2: Bool,
|
alternativeStoryMedia: Bool,
|
||||||
allowWebViewInspection: Bool
|
allowWebViewInspection: Bool
|
||||||
) {
|
) {
|
||||||
self.keepChatNavigationStack = keepChatNavigationStack
|
self.keepChatNavigationStack = keepChatNavigationStack
|
||||||
@ -159,7 +159,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
|||||||
self.crashOnMemoryPressure = crashOnMemoryPressure
|
self.crashOnMemoryPressure = crashOnMemoryPressure
|
||||||
self.unidirectionalSwipeToReply = unidirectionalSwipeToReply
|
self.unidirectionalSwipeToReply = unidirectionalSwipeToReply
|
||||||
self.dustEffect = dustEffect
|
self.dustEffect = dustEffect
|
||||||
self.callUIV2 = callUIV2
|
self.alternativeStoryMedia = alternativeStoryMedia
|
||||||
self.allowWebViewInspection = allowWebViewInspection
|
self.allowWebViewInspection = allowWebViewInspection
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +196,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
|
|||||||
self.crashOnMemoryPressure = try container.decodeIfPresent(Bool.self, forKey: "crashOnMemoryPressure") ?? false
|
self.crashOnMemoryPressure = try container.decodeIfPresent(Bool.self, forKey: "crashOnMemoryPressure") ?? false
|
||||||
self.unidirectionalSwipeToReply = try container.decodeIfPresent(Bool.self, forKey: "unidirectionalSwipeToReply") ?? false
|
self.unidirectionalSwipeToReply = try container.decodeIfPresent(Bool.self, forKey: "unidirectionalSwipeToReply") ?? false
|
||||||
self.dustEffect = try container.decodeIfPresent(Bool.self, forKey: "dustEffect_2") ?? 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
|
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.crashOnMemoryPressure, forKey: "crashOnMemoryPressure")
|
||||||
try container.encode(self.unidirectionalSwipeToReply, forKey: "unidirectionalSwipeToReply")
|
try container.encode(self.unidirectionalSwipeToReply, forKey: "unidirectionalSwipeToReply")
|
||||||
try container.encode(self.dustEffect, forKey: "dustEffect_2")
|
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")
|
try container.encode(self.allowWebViewInspection, forKey: "allowWebViewInspection")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user