mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-08 19:10:53 +00:00
Various fixes
This commit is contained in:
parent
2d11baef8e
commit
fdc5492e0a
@ -2062,7 +2062,7 @@
|
||||
|
||||
"StickerPack.Share" = "Share";
|
||||
"StickerPack.Send" = "Send Sticker";
|
||||
"StickerPack.Select" = "Select Sticker";
|
||||
"StickerPack.AddSticker" = "Add Sticker";
|
||||
|
||||
"StickerPack.RemoveStickerCount_1" = "Remove 1 Sticker";
|
||||
"StickerPack.RemoveStickerCount_2" = "Remove 2 Stickers";
|
||||
|
@ -57,6 +57,37 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
.iPodTouch5,
|
||||
.iPodTouch6,
|
||||
.iPodTouch7,
|
||||
.iPhone,
|
||||
.iPhone3G,
|
||||
.iPhone3GS,
|
||||
.iPhone4,
|
||||
.iPhone4S,
|
||||
.iPhone5,
|
||||
.iPhone5C,
|
||||
.iPhone5S,
|
||||
.iPhone6,
|
||||
.iPhone6Plus,
|
||||
.iPhone6S,
|
||||
.iPhone6SPlus,
|
||||
.iPhoneSE,
|
||||
.iPhone7,
|
||||
.iPhone7Plus,
|
||||
.iPhone8,
|
||||
.iPhone8Plus,
|
||||
.iPhoneX,
|
||||
.iPhoneXS,
|
||||
.iPhoneXR,
|
||||
.iPhone11,
|
||||
.iPhone11Pro,
|
||||
.iPhone11ProMax,
|
||||
.iPhone12,
|
||||
.iPhone12Mini,
|
||||
.iPhone12Pro,
|
||||
.iPhone12ProMax,
|
||||
.iPhone13,
|
||||
.iPhone13Mini,
|
||||
.iPhone13Pro,
|
||||
.iPhone13ProMax,
|
||||
.iPhone14,
|
||||
.iPhone14Plus,
|
||||
.iPhone14Pro,
|
||||
@ -72,9 +103,40 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
case iPodTouch6
|
||||
case iPodTouch7
|
||||
|
||||
case iPhone
|
||||
case iPhone3G
|
||||
case iPhone3GS
|
||||
|
||||
case iPhone4
|
||||
case iPhone4S
|
||||
|
||||
case iPhone5
|
||||
case iPhone5C
|
||||
case iPhone5S
|
||||
|
||||
case iPhone6
|
||||
case iPhone6Plus
|
||||
case iPhone6S
|
||||
case iPhone6SPlus
|
||||
|
||||
case iPhoneSE
|
||||
|
||||
case iPhone7
|
||||
case iPhone7Plus
|
||||
case iPhone8
|
||||
case iPhone8Plus
|
||||
|
||||
case iPhoneX
|
||||
case iPhoneXS
|
||||
case iPhoneXSMax
|
||||
case iPhoneXR
|
||||
|
||||
case iPhone11
|
||||
case iPhone11Pro
|
||||
case iPhone11ProMax
|
||||
|
||||
case iPhoneSE2ndGen
|
||||
|
||||
case iPhone12
|
||||
case iPhone12Mini
|
||||
case iPhone12Pro
|
||||
@ -85,6 +147,8 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
case iPhone13Pro
|
||||
case iPhone13ProMax
|
||||
|
||||
case iPhoneSE3rdGen
|
||||
|
||||
case iPhone14
|
||||
case iPhone14Plus
|
||||
case iPhone14Pro
|
||||
@ -108,10 +172,56 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
return ["iPod7,1"]
|
||||
case .iPodTouch7:
|
||||
return ["iPod9,1"]
|
||||
case .iPhone:
|
||||
return ["iPhone1,1"]
|
||||
case .iPhone3G:
|
||||
return ["iPhone1,2"]
|
||||
case .iPhone3GS:
|
||||
return ["iPhone2,1"]
|
||||
case .iPhone4:
|
||||
return ["iPhone3,1", "iPhone3,2", "iPhone3,3"]
|
||||
case .iPhone4S:
|
||||
return ["iPhone4,1", "iPhone4,2", "iPhone4,3"]
|
||||
case .iPhone5:
|
||||
return ["iPhone5,1", "iPhone5,2"]
|
||||
case .iPhone5C:
|
||||
return ["iPhone5,3", "iPhone5,4"]
|
||||
case .iPhone5S:
|
||||
return ["iPhone6,1", "iPhone6,2"]
|
||||
case .iPhone6:
|
||||
return ["iPhone7,2"]
|
||||
case .iPhone6Plus:
|
||||
return ["iPhone7,1"]
|
||||
case .iPhone6S:
|
||||
return ["iPhone8,1"]
|
||||
case .iPhone6SPlus:
|
||||
return ["iPhone8,2"]
|
||||
case .iPhoneSE:
|
||||
return ["iPhone8,4"]
|
||||
case .iPhone7:
|
||||
return ["iPhone9,1", "iPhone9,3"]
|
||||
case .iPhone7Plus:
|
||||
return ["iPhone9,2", "iPhone9,4"]
|
||||
case .iPhone8:
|
||||
return ["iPhone10,1", "iPhone10,4"]
|
||||
case .iPhone8Plus:
|
||||
return ["iPhone10,2", "iPhone10,5"]
|
||||
case .iPhoneX:
|
||||
return ["iPhone11,2"]
|
||||
return ["iPhone10,3", "iPhone10,6"]
|
||||
case .iPhoneXS:
|
||||
return ["iPhone11,2"]
|
||||
case .iPhoneXSMax:
|
||||
return ["iPhone11,4", "iPhone11,6"]
|
||||
case .iPhoneXR:
|
||||
return ["iPhone11,8"]
|
||||
case .iPhone11:
|
||||
return ["iPhone12,1"]
|
||||
case .iPhone11Pro:
|
||||
return ["iPhone12,3"]
|
||||
case .iPhone11ProMax:
|
||||
return ["iPhone12,5"]
|
||||
case .iPhoneSE2ndGen:
|
||||
return ["iPhone12,8"]
|
||||
case .iPhone12:
|
||||
return ["iPhone13,2"]
|
||||
case .iPhone12Mini:
|
||||
@ -128,6 +238,8 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
return ["iPhone14,2"]
|
||||
case .iPhone13ProMax:
|
||||
return ["iPhone14,3"]
|
||||
case .iPhoneSE3rdGen:
|
||||
return ["iPhone14,6"]
|
||||
case .iPhone14:
|
||||
return ["iPhone14,7"]
|
||||
case .iPhone14Plus:
|
||||
@ -157,10 +269,56 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
return "iPod touch 6G"
|
||||
case .iPodTouch7:
|
||||
return "iPod touch 7G"
|
||||
case .iPhone:
|
||||
return "iPhone"
|
||||
case .iPhone3G:
|
||||
return "iPhone 3G"
|
||||
case .iPhone3GS:
|
||||
return "iPhone 3GS"
|
||||
case .iPhone4:
|
||||
return "iPhone 4"
|
||||
case .iPhone4S:
|
||||
return "iPhone 4S"
|
||||
case .iPhone5:
|
||||
return "iPhone 5"
|
||||
case .iPhone5C:
|
||||
return "iPhone 5C"
|
||||
case .iPhone5S:
|
||||
return "iPhone 5S"
|
||||
case .iPhone6:
|
||||
return "iPhone 6"
|
||||
case .iPhone6Plus:
|
||||
return "iPhone 6 Plus"
|
||||
case .iPhone6S:
|
||||
return "iPhone 6S"
|
||||
case .iPhone6SPlus:
|
||||
return "iPhone 6S Plus"
|
||||
case .iPhoneSE:
|
||||
return "iPhone SE"
|
||||
case .iPhone7:
|
||||
return "iPhone 7"
|
||||
case .iPhone7Plus:
|
||||
return "iPhone 7 Plus"
|
||||
case .iPhone8:
|
||||
return "iPhone 8"
|
||||
case .iPhone8Plus:
|
||||
return "iPhone 8 Plus"
|
||||
case .iPhoneX:
|
||||
return "iPhone X"
|
||||
case .iPhoneXS:
|
||||
return "iPhone XS"
|
||||
case .iPhoneXSMax:
|
||||
return "iPhone XS Max"
|
||||
case .iPhoneXR:
|
||||
return "iPhone XR"
|
||||
case .iPhone11:
|
||||
return "iPhone 11"
|
||||
case .iPhone11Pro:
|
||||
return "iPhone 11 Pro"
|
||||
case .iPhone11ProMax:
|
||||
return "iPhone 11 Pro Max"
|
||||
case .iPhoneSE2ndGen:
|
||||
return "iPhone SE (2nd gen)"
|
||||
case .iPhone12:
|
||||
return "iPhone 12"
|
||||
case .iPhone12Mini:
|
||||
@ -177,6 +335,8 @@ enum DeviceModel: CaseIterable, Equatable {
|
||||
return "iPhone 13 Pro"
|
||||
case .iPhone13ProMax:
|
||||
return "iPhone 13 Pro Max"
|
||||
case .iPhoneSE3rdGen:
|
||||
return "iPhone SE (3rd gen)"
|
||||
case .iPhone14:
|
||||
return "iPhone 14"
|
||||
case .iPhone14Plus:
|
||||
|
@ -289,7 +289,7 @@ private final class StickerSelectionComponent: Component {
|
||||
interaction: interaction,
|
||||
inputNodeInteraction: inputNodeInteraction,
|
||||
mode: mappedMode,
|
||||
stickerActionTitle: presentationData.strings.StickerPack_Select,
|
||||
stickerActionTitle: presentationData.strings.StickerPack_AddSticker,
|
||||
trendingGifsPromise: trendingGifsPromise,
|
||||
cancel: {
|
||||
},
|
||||
|
@ -261,6 +261,7 @@ func assetImage(asset: PHAsset, targetSize: CGSize, exact: Bool, deliveryMode: P
|
||||
|
||||
if let info = info {
|
||||
if let cancelled = info[PHImageCancelledKey] as? Bool, cancelled {
|
||||
subscriber.putCompletion()
|
||||
return
|
||||
}
|
||||
if let degradedValue = info[PHImageResultIsDegradedKey] as? Bool, degradedValue {
|
||||
|
@ -125,23 +125,27 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
override init() {
|
||||
self.backgroundNode = ASImageNode()
|
||||
self.backgroundNode.contentMode = .scaleToFill
|
||||
self.backgroundNode.isLayerBacked = true
|
||||
|
||||
self.imageNode = ImageNode()
|
||||
self.imageNode.clipsToBounds = true
|
||||
self.imageNode.contentMode = .scaleAspectFill
|
||||
self.imageNode.isLayerBacked = false
|
||||
self.imageNode.isLayerBacked = true
|
||||
self.imageNode.animateFirstTransition = false
|
||||
|
||||
self.gradientNode = ASImageNode()
|
||||
self.gradientNode.displaysAsynchronously = false
|
||||
self.gradientNode.displayWithoutProcessing = true
|
||||
self.gradientNode.image = maskImage
|
||||
self.gradientNode.isLayerBacked = true
|
||||
|
||||
self.typeIconNode = ASImageNode()
|
||||
self.typeIconNode.displaysAsynchronously = false
|
||||
self.typeIconNode.displayWithoutProcessing = true
|
||||
self.typeIconNode.isLayerBacked = true
|
||||
|
||||
self.durationNode = ImmediateTextNode()
|
||||
self.durationNode.isLayerBacked = true
|
||||
self.draftNode = ImmediateTextNode()
|
||||
|
||||
self.activateAreaNode = AccessibilityAreaNode()
|
||||
@ -472,7 +476,7 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
}
|
||||
}
|
||||
|
||||
let originalSignal = assetImageSignal //assetImage(fetchResult: fetchResult, index: index, targetSize: targetSize, exact: false, synchronous: true)
|
||||
let originalSignal = assetImageSignal
|
||||
let imageSignal: Signal<UIImage?, NoError> = editedSignal
|
||||
|> mapToSignal { result in
|
||||
if let result = result {
|
||||
@ -519,18 +523,22 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
self.addSubnode(self.typeIconNode)
|
||||
self.setNeedsLayout()
|
||||
}
|
||||
} else if asset.mediaType == .video {
|
||||
if asset.mediaSubtypes.contains(.videoHighFrameRate) {
|
||||
self.typeIconNode.image = UIImage(bundleImageName: "Media Editor/MediaSlomo")
|
||||
} else if asset.mediaSubtypes.contains(.videoTimelapse) {
|
||||
self.typeIconNode.image = UIImage(bundleImageName: "Media Editor/MediaTimelapse")
|
||||
} else {
|
||||
self.typeIconNode.image = UIImage(bundleImageName: "Media Editor/MediaVideo")
|
||||
}
|
||||
|
||||
if asset.mediaType == .video {
|
||||
if !asset.isFavorite {
|
||||
if asset.mediaSubtypes.contains(.videoHighFrameRate) {
|
||||
self.typeIconNode.image = UIImage(bundleImageName: "Media Editor/MediaSlomo")
|
||||
} else if asset.mediaSubtypes.contains(.videoTimelapse) {
|
||||
self.typeIconNode.image = UIImage(bundleImageName: "Media Editor/MediaTimelapse")
|
||||
} else {
|
||||
self.typeIconNode.image = UIImage(bundleImageName: "Media Editor/MediaVideo")
|
||||
}
|
||||
}
|
||||
|
||||
self.durationNode.attributedText = NSAttributedString(string: stringForDuration(Int32(asset.duration)), font: Font.semibold(12.0), textColor: .white)
|
||||
|
||||
if self.typeIconNode.supernode == nil {
|
||||
if self.durationNode.supernode == nil {
|
||||
self.addSubnode(self.gradientNode)
|
||||
self.addSubnode(self.typeIconNode)
|
||||
self.addSubnode(self.durationNode)
|
||||
@ -588,7 +596,7 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
|
||||
let backgroundSize = CGSize(width: self.bounds.width, height: floorToScreenPixels(self.bounds.height / 9.0 * 16.0))
|
||||
self.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: floorToScreenPixels((self.bounds.height - backgroundSize.height) / 2.0)), size: backgroundSize)
|
||||
self.imageNode.frame = self.bounds.insetBy(dx: -1.0 + UIScreenPixel, dy: -1.0 + UIScreenPixel)
|
||||
self.imageNode.frame = self.bounds
|
||||
self.gradientNode.frame = CGRect(x: 0.0, y: self.bounds.height - 36.0, width: self.bounds.width, height: 36.0)
|
||||
self.typeIconNode.frame = CGRect(x: 0.0, y: self.bounds.height - 20.0, width: 19.0, height: 19.0)
|
||||
self.activateAreaNode.frame = self.bounds
|
||||
@ -619,11 +627,11 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
|
||||
func transitionView(snapshot: Bool) -> UIView {
|
||||
if snapshot {
|
||||
let view = self.imageNode.view.snapshotContentTree(unhide: true, keepTransform: true)!
|
||||
let view = self.imageNode.layer.snapshotContentTreeAsView(unhide: true)!
|
||||
view.frame = self.convert(self.bounds, to: nil)
|
||||
return view
|
||||
} else {
|
||||
return self.imageNode.view
|
||||
return self.view
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -478,7 +478,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
||||
|
||||
let throttledContentOffsetSignal = self.fastScrollContentOffset.get()
|
||||
|> mapToThrottled { next -> Signal<CGPoint, NoError> in
|
||||
return .single(next) |> then(.complete() |> delay(0.02, queue: Queue.concurrentDefaultQueue()))
|
||||
return .single(next) |> then(.complete() |> delay(0.05, queue: Queue.concurrentDefaultQueue()))
|
||||
}
|
||||
self.fastScrollDisposable = (throttledContentOffsetSignal
|
||||
|> deliverOnMainQueue).start(next: { [weak self] contentOffset in
|
||||
@ -1266,7 +1266,8 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
||||
itemHeight = floor(itemWidth * 1.227)
|
||||
}
|
||||
|
||||
self.gridNode.transaction(GridNodeTransaction(deleteItems: [], insertItems: [], updateItems: [], scrollToItem: nil, updateLayout: GridNodeUpdateLayout(layout: GridNodeLayout(size: bounds.size, insets: gridInsets, scrollIndicatorInsets: nil, preloadSize: itemHeight * 3.0, type: .fixed(itemSize: CGSize(width: itemWidth, height: itemHeight), fillWidth: true, lineSpacing: itemSpacing, itemSpacing: itemSpacing), cutout: cameraRect), transition: transition), itemTransition: .immediate, stationaryItems: .none, updateFirstIndexInSectionOffset: nil, updateOpaqueState: nil, synchronousLoads: false), completion: { [weak self] _ in
|
||||
let preloadSize: CGFloat = itemHeight// * 3.0
|
||||
self.gridNode.transaction(GridNodeTransaction(deleteItems: [], insertItems: [], updateItems: [], scrollToItem: nil, updateLayout: GridNodeUpdateLayout(layout: GridNodeLayout(size: bounds.size, insets: gridInsets, scrollIndicatorInsets: nil, preloadSize: preloadSize, type: .fixed(itemSize: CGSize(width: itemWidth, height: itemHeight), fillWidth: true, lineSpacing: itemSpacing, itemSpacing: itemSpacing), cutout: cameraRect), transition: transition), itemTransition: .immediate, stationaryItems: .none, updateFirstIndexInSectionOffset: nil, updateOpaqueState: nil, synchronousLoads: false), completion: { [weak self] _ in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
|
@ -464,13 +464,16 @@ private final class StickerPackContainer: ASDisplayNode {
|
||||
var menuItems: [ContextMenuItem] = []
|
||||
if let (info, _, _) = strongSelf.currentStickerPack, info.id.namespace == Namespaces.ItemCollection.CloudStickerPacks {
|
||||
if strongSelf.sendSticker != nil {
|
||||
var iconName: String
|
||||
let actionTitle: String
|
||||
if let title = strongSelf.controller?.actionTitle {
|
||||
actionTitle = title
|
||||
iconName = "Chat/Context Menu/Add"
|
||||
} else {
|
||||
actionTitle = strongSelf.presentationData.strings.StickerPack_Send
|
||||
iconName = "Chat/Context Menu/Resend"
|
||||
}
|
||||
menuItems.append(.action(ContextMenuActionItem(text: actionTitle, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Resend"), color: theme.contextMenu.primaryColor) }, action: { _, f in
|
||||
menuItems.append(.action(ContextMenuActionItem(text: actionTitle, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: iconName), color: theme.contextMenu.primaryColor) }, action: { _, f in
|
||||
if let strongSelf = self, let peekController = strongSelf.peekController {
|
||||
if let animationNode = (peekController.contentNode as? StickerPreviewPeekContentNode)?.animationNode {
|
||||
let _ = strongSelf.sendSticker?(.standalone(media: item.file), animationNode.view, animationNode.bounds)
|
||||
|
@ -221,7 +221,10 @@ final class StickerPaneSearchContentNode: ASDisplayNode, PaneSearchContentNode {
|
||||
if let strongSelf = self {
|
||||
strongSelf.view.window?.endEditing(true)
|
||||
let packReference: StickerPackReference = .id(id: info.id.id, accessHash: info.accessHash)
|
||||
let controller = StickerPackScreen(context: strongSelf.context, mainStickerPack: packReference, stickerPacks: [packReference], parentNavigationController: strongSelf.interaction.getNavigationController(), sendSticker: { [weak self] fileReference, sourceNode, sourceRect in
|
||||
|
||||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }.withUpdated(theme: theme)
|
||||
|
||||
let controller = StickerPackScreen(context: strongSelf.context, updatedPresentationData: (presentationData, .single(presentationData)), mainStickerPack: packReference, stickerPacks: [packReference], actionTitle: stickerActionTitle, parentNavigationController: strongSelf.interaction.getNavigationController(), sendSticker: { [weak self] fileReference, sourceNode, sourceRect in
|
||||
if let strongSelf = self {
|
||||
return strongSelf.interaction.sendSticker(fileReference, false, false, nil, false, sourceNode, sourceRect, nil, [])
|
||||
} else {
|
||||
|
@ -3862,7 +3862,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
if let self {
|
||||
makeEditorImageComposition(context: self.node.ciContext, account: self.context.account, inputImage: image ?? UIImage(), dimensions: storyDimensions, values: mediaEditor.values, time: .zero, completion: { [weak self] coverImage in
|
||||
if let self {
|
||||
Logger.shared.log("Media Editor", "completed with video \(videoResult)")
|
||||
Logger.shared.log("MediaEditor", "Completed with video \(videoResult)")
|
||||
self.completion(randomId, .video(video: videoResult, coverImage: coverImage, values: mediaEditor.values, duration: duration, dimensions: mediaEditor.values.resultDimensions), caption, self.state.privacy, stickers, { [weak self] finished in
|
||||
self?.node.animateOut(finished: true, saveDraft: false, completion: { [weak self] in
|
||||
self?.dismiss()
|
||||
@ -3885,7 +3885,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
|
||||
makeEditorImageComposition(context: self.node.ciContext, account: self.context.account, inputImage: image, dimensions: storyDimensions, values: mediaEditor.values, time: .zero, completion: { [weak self] resultImage in
|
||||
if let self, let resultImage {
|
||||
Logger.shared.log("Media Editor", "completed with image \(resultImage)")
|
||||
Logger.shared.log("MediaEditor", "Completed with image \(resultImage)")
|
||||
self.completion(randomId, .image(image: resultImage, dimensions: PixelDimensions(resultImage.size)), caption, self.state.privacy, stickers, { [weak self] finished in
|
||||
self?.node.animateOut(finished: true, saveDraft: false, completion: { [weak self] in
|
||||
self?.dismiss()
|
||||
|
Loading…
x
Reference in New Issue
Block a user