Various fixes

This commit is contained in:
Ilya Laktyushin 2025-05-26 00:34:24 +02:00
parent 4e804bf9d9
commit e27ff72830
3 changed files with 51 additions and 28 deletions

View File

@ -121,10 +121,29 @@ private func preparedShareItem(postbox: Postbox, network: Network, to peerId: Pe
} }
} }
func getThumbnail(_ avAsset: AVURLAsset) -> Signal<UIImage?, NoError> {
return Signal { subscriber in
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
imageGenerator.maximumSize = CGSize(width: 640, height: 640)
imageGenerator.generateCGImagesAsynchronously(forTimes: [NSValue(time: CMTime(seconds: 0, preferredTimescale: CMTimeScale(30.0)))]) { _, image, _, _, _ in
subscriber.putNext(image.flatMap { UIImage(cgImage: $0) })
subscriber.putCompletion()
}
return ActionDisposable {
imageGenerator.cancelAllCGImageGeneration()
}
}
}
return .single(.preparing(true)) return .single(.preparing(true))
|> then( |> then(
loadValues(asset) loadValues(asset)
|> mapToSignal { asset -> Signal<PreparedShareItem, PreparedShareItemError> in |> mapToSignal { asset -> Signal<PreparedShareItem, PreparedShareItemError> in
return getThumbnail(asset)
|> castError(PreparedShareItemError.self)
|> mapToSignal { thumbnail -> Signal<PreparedShareItem, PreparedShareItemError> in
let preset = adjustments?.preset ?? TGMediaVideoConversionPresetCompressedMedium let preset = adjustments?.preset ?? TGMediaVideoConversionPresetCompressedMedium
let finalDimensions = TGMediaVideoConverter.dimensions(for: asset.originalSize, adjustments: adjustments, preset: preset) let finalDimensions = TGMediaVideoConverter.dimensions(for: asset.originalSize, adjustments: adjustments, preset: preset)
@ -143,8 +162,10 @@ private func preparedShareItem(postbox: Postbox, network: Network, to peerId: Pe
let estimatedSize = TGMediaVideoConverter.estimatedSize(for: preset, duration: finalDuration, hasAudio: true) let estimatedSize = TGMediaVideoConverter.estimatedSize(for: preset, duration: finalDuration, hasAudio: true)
let thumbnailData = thumbnail?.jpegData(compressionQuality: 0.6)
let resource = LocalFileVideoMediaResource(randomId: Int64.random(in: Int64.min ... Int64.max), path: asset.url.path, adjustments: resourceAdjustments) let resource = LocalFileVideoMediaResource(randomId: Int64.random(in: Int64.min ... Int64.max), path: asset.url.path, adjustments: resourceAdjustments)
return standaloneUploadedFile(postbox: postbox, network: network, peerId: peerId, text: "", source: .resource(.standalone(resource: resource)), mimeType: "video/mp4", attributes: [.Video(duration: finalDuration, size: PixelDimensions(width: Int32(finalDimensions.width), height: Int32(finalDimensions.height)), flags: flags, preloadSize: nil, coverTime: nil, videoCodec: nil)], hintFileIsLarge: estimatedSize > 10 * 1024 * 1024) return standaloneUploadedFile(postbox: postbox, network: network, peerId: peerId, text: "", source: .resource(.standalone(resource: resource)), thumbnailData: thumbnailData, mimeType: "video/mp4", attributes: [.Video(duration: finalDuration, size: PixelDimensions(width: Int32(finalDimensions.width), height: Int32(finalDimensions.height)), flags: flags, preloadSize: nil, coverTime: 0.0, videoCodec: nil)], hintFileIsLarge: estimatedSize > 10 * 1024 * 1024)
|> mapError { _ -> PreparedShareItemError in |> mapError { _ -> PreparedShareItemError in
return .generic return .generic
} }
@ -157,6 +178,7 @@ private func preparedShareItem(postbox: Postbox, network: Network, to peerId: Pe
} }
} }
} }
}
) )
} else if let data = value["data"] as? Data { } else if let data = value["data"] as? Data {
let fileName = value["fileName"] as? String let fileName = value["fileName"] as? String

View File

@ -580,7 +580,8 @@ public final class ChatTextInputMediaRecordingButton: TGModernConversationInputM
self.previousSize = size self.previousSize = size
if let view = self.animationView.view { if let view = self.animationView.view {
let iconSize = view.bounds.size let iconSize = view.bounds.size
view.frame = CGRect(origin: CGPoint(x: floor((size.width - iconSize.width) / 2.0), y: floor((size.height - iconSize.height) / 2.0)), size: iconSize) view.bounds = CGRect(origin: .zero, size: iconSize)
view.center = CGPoint(x: size.width / 2.0, y: size.height / 2.0)
} }
} }
} }

View File

@ -2225,7 +2225,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate, Ch
hideInfo = true hideInfo = true
} }
case .waitingForPreview: case .waitingForPreview:
Queue.mainQueue().after(0.3, { Queue.mainQueue().after(0.5, {
self.actionButtons.micButton.audioRecorder = nil self.actionButtons.micButton.audioRecorder = nil
}) })
} }