[WIP] Multiple story upload

This commit is contained in:
Ilya Laktyushin
2025-04-18 13:47:15 +04:00
parent 746239cf69
commit d8dd96e39e
21 changed files with 1351 additions and 348 deletions

View File

@@ -1651,6 +1651,7 @@ public class CameraScreenImpl: ViewController, CameraScreen {
case videoCollage(VideoCollage)
case asset(PHAsset)
case draft(MediaEditorDraft)
case assets([PHAsset])
func withPIPPosition(_ position: CameraScreenImpl.PIPPosition) -> Result {
switch self {
@@ -3637,11 +3638,10 @@ public class CameraScreenImpl: ViewController, CameraScreen {
selectionLimit = 10
}
}
//TODO:unmock
controller = self.context.sharedContext.makeStoryMediaPickerScreen(
context: self.context,
isDark: true,
forCollage: self.cameraState.isCollageEnabled || "".isEmpty,
forCollage: self.cameraState.isCollageEnabled,
selectionLimit: selectionLimit,
getSourceRect: { [weak self] in
if let self {
@@ -3707,44 +3707,52 @@ public class CameraScreenImpl: ViewController, CameraScreen {
}
}
}
}, multipleCompletion: { [weak self] results in
}, multipleCompletion: { [weak self] results, collage in
guard let self else {
return
}
if !self.cameraState.isCollageEnabled {
var selectedGrid: Camera.CollageGrid = collageGrids.first!
for grid in collageGrids {
if grid.count == results.count {
selectedGrid = grid
break
if collage {
if !self.cameraState.isCollageEnabled {
var selectedGrid: Camera.CollageGrid = collageGrids.first!
for grid in collageGrids {
if grid.count == results.count {
selectedGrid = grid
break
}
}
self.updateCameraState({
$0.updatedIsCollageEnabled(true).updatedCollageProgress(0.0).updatedIsDualCameraEnabled(false).updatedCollageGrid(selectedGrid)
}, transition: .spring(duration: 0.3))
}
self.updateCameraState({
$0.updatedIsCollageEnabled(true).updatedCollageProgress(0.0).updatedIsDualCameraEnabled(false).updatedCollageGrid(selectedGrid)
}, transition: .spring(duration: 0.3))
}
if let assets = results as? [PHAsset] {
var results: [Signal<CameraScreenImpl.Result, NoError>] = []
for asset in assets {
if asset.mediaType == .video && asset.duration > 1.0 {
results.append(.single(.asset(asset)))
} else {
results.append(
assetImage(asset: asset, targetSize: CGSize(width: 1080, height: 1080), exact: false, deliveryMode: .highQualityFormat)
|> runOn(Queue.concurrentDefaultQueue())
|> mapToSignal { image -> Signal<CameraScreenImpl.Result, NoError> in
if let image {
return .single(.image(Result.Image(image: image, additionalImage: nil, additionalImagePosition: .topLeft)))
} else {
return .complete()
if let assets = results as? [PHAsset] {
var results: [Signal<CameraScreenImpl.Result, NoError>] = []
for asset in assets {
if asset.mediaType == .video && asset.duration > 1.0 {
results.append(.single(.asset(asset)))
} else {
results.append(
assetImage(asset: asset, targetSize: CGSize(width: 1080, height: 1080), exact: false, deliveryMode: .highQualityFormat)
|> runOn(Queue.concurrentDefaultQueue())
|> mapToSignal { image -> Signal<CameraScreenImpl.Result, NoError> in
if let image {
return .single(.image(Result.Image(image: image, additionalImage: nil, additionalImagePosition: .topLeft)))
} else {
return .complete()
}
}
}
)
)
}
}
self.node.collage?.addResults(signals: results)
}
} else {
if let assets = results as? [PHAsset] {
self.completion(.single(.assets(assets)), nil, {
})
}
self.node.collage?.addResults(signals: results)
}
self.galleryController = nil