Skip to content

Commit 4a9258c

Browse files
committed
Various fixes
1 parent c508197 commit 4a9258c

File tree

5 files changed

+87
-10
lines changed

5 files changed

+87
-10
lines changed

submodules/TelegramCore/Sources/TelegramEngine/Messages/PendingStoryManager.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public extension Stories {
9797
case period
9898
case randomId
9999
case forwardInfo
100+
case uploadInfo
100101
}
101102

102103
public let target: PendingTarget
@@ -113,6 +114,7 @@ public extension Stories {
113114
public let period: Int32
114115
public let randomId: Int64
115116
public let forwardInfo: PendingForwardInfo?
117+
public let uploadInfo: StoryUploadInfo?
116118

117119
public init(
118120
target: PendingTarget,
@@ -128,7 +130,8 @@ public extension Stories {
128130
isForwardingDisabled: Bool,
129131
period: Int32,
130132
randomId: Int64,
131-
forwardInfo: PendingForwardInfo?
133+
forwardInfo: PendingForwardInfo?,
134+
uploadInfo: StoryUploadInfo?
132135
) {
133136
self.target = target
134137
self.stableId = stableId
@@ -144,6 +147,7 @@ public extension Stories {
144147
self.period = period
145148
self.randomId = randomId
146149
self.forwardInfo = forwardInfo
150+
self.uploadInfo = uploadInfo
147151
}
148152

149153
public init(from decoder: Decoder) throws {
@@ -171,6 +175,8 @@ public extension Stories {
171175
self.randomId = try container.decode(Int64.self, forKey: .randomId)
172176

173177
self.forwardInfo = try container.decodeIfPresent(PendingForwardInfo.self, forKey: .forwardInfo)
178+
179+
self.uploadInfo = try container.decodeIfPresent(StoryUploadInfo.self, forKey: .uploadInfo)
174180
}
175181

176182
public func encode(to encoder: Encoder) throws {
@@ -199,6 +205,7 @@ public extension Stories {
199205
try container.encode(self.period, forKey: .period)
200206
try container.encode(self.randomId, forKey: .randomId)
201207
try container.encodeIfPresent(self.forwardInfo, forKey: .forwardInfo)
208+
try container.encodeIfPresent(self.uploadInfo, forKey: .uploadInfo)
202209
}
203210

204211
public static func ==(lhs: PendingItem, rhs: PendingItem) -> Bool {
@@ -238,6 +245,9 @@ public extension Stories {
238245
if lhs.forwardInfo != rhs.forwardInfo {
239246
return false
240247
}
248+
if lhs.uploadInfo != rhs.uploadInfo {
249+
return false
250+
}
241251
return true
242252
}
243253
}
@@ -467,7 +477,12 @@ final class PendingStoryManager {
467477
switch event {
468478
case let .progress(progress):
469479
if let currentPendingItemContext = self.currentPendingItemContext, currentPendingItemContext.item.stableId == stableId {
470-
currentPendingItemContext.progress = progress
480+
if let uploadInfo = currentPendingItemContext.item.uploadInfo {
481+
let partTotalProgress = 1.0 / Float(uploadInfo.total)
482+
currentPendingItemContext.progress = Float(uploadInfo.index) * partTotalProgress + progress * partTotalProgress
483+
} else {
484+
currentPendingItemContext.progress = progress
485+
}
471486
currentPendingItemContext.updated()
472487
}
473488
case let .completed(id):

submodules/TelegramCore/Sources/TelegramEngine/Messages/Stories.swift

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,19 @@ private func apiInputPrivacyRules(privacy: EngineStoryPrivacy, transaction: Tran
976976
return privacyRules
977977
}
978978

979-
func _internal_uploadStory(account: Account, target: Stories.PendingTarget, media: EngineStoryInputMedia, mediaAreas: [MediaArea], text: String, entities: [MessageTextEntity], pin: Bool, privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, period: Int, randomId: Int64, forwardInfo: Stories.PendingForwardInfo?) -> Signal<Int32, NoError> {
979+
public struct StoryUploadInfo: Codable, Equatable {
980+
public var groupingId: Int32
981+
public var index: Int32
982+
public var total: Int32
983+
984+
public init(groupingId: Int32, index: Int32, total: Int32) {
985+
self.groupingId = groupingId
986+
self.index = index
987+
self.total = total
988+
}
989+
}
990+
991+
func _internal_uploadStory(account: Account, target: Stories.PendingTarget, media: EngineStoryInputMedia, mediaAreas: [MediaArea], text: String, entities: [MessageTextEntity], pin: Bool, privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, period: Int, randomId: Int64, forwardInfo: Stories.PendingForwardInfo?, uploadInfo: StoryUploadInfo? = nil) -> Signal<Int32, NoError> {
980992
let inputMedia = prepareUploadStoryContent(account: account, media: media)
981993

982994
return (account.postbox.transaction { transaction in
@@ -1004,7 +1016,8 @@ func _internal_uploadStory(account: Account, target: Stories.PendingTarget, medi
10041016
isForwardingDisabled: isForwardingDisabled,
10051017
period: Int32(period),
10061018
randomId: randomId,
1007-
forwardInfo: forwardInfo
1019+
forwardInfo: forwardInfo,
1020+
uploadInfo: uploadInfo
10081021
))
10091022
transaction.setLocalStoryState(state: CodableEntry(currentState))
10101023
return stableId
@@ -1020,7 +1033,50 @@ func _internal_cancelStoryUpload(account: Account, stableId: Int32) {
10201033
currentState = Stories.LocalState(items: [])
10211034
}
10221035
if let index = currentState.items.firstIndex(where: { $0.stableId == stableId }) {
1023-
currentState.items.remove(at: index)
1036+
let cancelledItem = currentState.items[index]
1037+
if let uploadInfo = cancelledItem.uploadInfo {
1038+
let groupingId = uploadInfo.groupingId
1039+
let total = uploadInfo.total - 1
1040+
1041+
currentState.items.remove(at: index)
1042+
1043+
for i in 0..<currentState.items.count {
1044+
if let itemUploadInfo = currentState.items[i].uploadInfo, itemUploadInfo.groupingId == groupingId {
1045+
let newIndex: Int32
1046+
if itemUploadInfo.index > uploadInfo.index {
1047+
newIndex = itemUploadInfo.index - 1
1048+
} else {
1049+
newIndex = itemUploadInfo.index
1050+
}
1051+
1052+
let updatedItem = Stories.PendingItem(
1053+
target: currentState.items[i].target,
1054+
stableId: currentState.items[i].stableId,
1055+
timestamp: currentState.items[i].timestamp,
1056+
media: currentState.items[i].media,
1057+
mediaAreas: currentState.items[i].mediaAreas,
1058+
text: currentState.items[i].text,
1059+
entities: currentState.items[i].entities,
1060+
embeddedStickers: currentState.items[i].embeddedStickers,
1061+
pin: currentState.items[i].pin,
1062+
privacy: currentState.items[i].privacy,
1063+
isForwardingDisabled: currentState.items[i].isForwardingDisabled,
1064+
period: currentState.items[i].period,
1065+
randomId: currentState.items[i].randomId,
1066+
forwardInfo: currentState.items[i].forwardInfo,
1067+
uploadInfo: StoryUploadInfo(
1068+
groupingId: groupingId,
1069+
index: newIndex,
1070+
total: total
1071+
)
1072+
)
1073+
1074+
currentState.items[i] = updatedItem
1075+
}
1076+
}
1077+
} else {
1078+
currentState.items.remove(at: index)
1079+
}
10241080
transaction.setLocalStoryState(state: CodableEntry(currentState))
10251081
}
10261082
}).start()

submodules/TelegramCore/Sources/TelegramEngine/Messages/TelegramEngineMessages.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,8 +1349,8 @@ public extension TelegramEngine {
13491349
}
13501350
}
13511351

1352-
public func uploadStory(target: Stories.PendingTarget, media: EngineStoryInputMedia, mediaAreas: [MediaArea], text: String, entities: [MessageTextEntity], pin: Bool, privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, period: Int, randomId: Int64, forwardInfo: Stories.PendingForwardInfo?) -> Signal<Int32, NoError> {
1353-
return _internal_uploadStory(account: self.account, target: target, media: media, mediaAreas: mediaAreas, text: text, entities: entities, pin: pin, privacy: privacy, isForwardingDisabled: isForwardingDisabled, period: period, randomId: randomId, forwardInfo: forwardInfo)
1352+
public func uploadStory(target: Stories.PendingTarget, media: EngineStoryInputMedia, mediaAreas: [MediaArea], text: String, entities: [MessageTextEntity], pin: Bool, privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, period: Int, randomId: Int64, forwardInfo: Stories.PendingForwardInfo?, uploadInfo: StoryUploadInfo? = nil) -> Signal<Int32, NoError> {
1353+
return _internal_uploadStory(account: self.account, target: target, media: media, mediaAreas: mediaAreas, text: text, entities: entities, pin: pin, privacy: privacy, isForwardingDisabled: isForwardingDisabled, period: period, randomId: randomId, forwardInfo: forwardInfo, uploadInfo: uploadInfo)
13541354
}
13551355

13561356
public func allStoriesUploadEvents() -> Signal<(Int32, Int32), NoError> {

submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorStoryCompletion.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@ extension MediaEditorScreenImpl {
4444

4545
let storyCount = min(storyMaxCombinedVideoCount, Int(ceil(duration / storyMaxVideoDuration)))
4646
var start = values.videoTrimRange?.lowerBound ?? 0
47+
let end = values.videoTrimRange?.upperBound ?? (min(originalDuration, start + storyMaxCombinedVideoDuration))
48+
4749
for i in 0 ..< storyCount {
48-
let trimmedValues = values.withUpdatedVideoTrimRange(start ..< min(start + storyMaxVideoDuration, originalDuration))
50+
let trimmedValues = values.withUpdatedVideoTrimRange(start ..< min(end, start + storyMaxVideoDuration))
4951

5052
var editingItem = EditingItem(asset: asset)
5153
if i == 0 {
@@ -526,7 +528,7 @@ extension MediaEditorScreenImpl {
526528
}
527529

528530
var items = items
529-
if let mediaEditor = self.node.mediaEditor, case let .asset(asset) = self.node.subject, let currentItemIndex = items.firstIndex(where: { $0.asset.localIdentifier == asset.localIdentifier }) {
531+
if !isLongVideo, let mediaEditor = self.node.mediaEditor, case let .asset(asset) = self.node.subject, let currentItemIndex = items.firstIndex(where: { $0.asset.localIdentifier == asset.localIdentifier }) {
530532
var updatedCurrentItem = items[currentItemIndex]
531533
updatedCurrentItem.caption = self.node.getCaption()
532534
updatedCurrentItem.values = mediaEditor.values

submodules/TelegramUI/Sources/TelegramRootController.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,8 @@ public final class TelegramRootController: NavigationController, TelegramRootCon
659659
}
660660

661661
if let _ = self.chatListController as? ChatListControllerImpl {
662+
var index: Int32 = 0
663+
let groupingId = Int32.random(in: 2000000 ..< Int32.max)
662664
for result in results {
663665
var media: EngineStoryInputMedia?
664666

@@ -732,12 +734,14 @@ public final class TelegramRootController: NavigationController, TelegramRootCon
732734
isForwardingDisabled: result.options.isForwardingDisabled,
733735
period: result.options.timeout,
734736
randomId: result.randomId,
735-
forwardInfo: forwardInfo
737+
forwardInfo: forwardInfo,
738+
uploadInfo: results.count > 1 ? StoryUploadInfo(groupingId: groupingId, index: index, total: Int32(results.count)) : nil
736739
)
737740
|> deliverOnMainQueue).startStandalone(next: { stableId in
738741
moveStorySource(engine: context.engine, peerId: context.account.peerId, from: result.randomId, to: Int64(stableId))
739742
})
740743
}
744+
index += 1
741745
}
742746
completionImpl()
743747
}

0 commit comments

Comments
 (0)