mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-07 14:53:35 +00:00
Various fixes
This commit is contained in:
parent
a9c8ae8595
commit
7526d39b83
@ -982,8 +982,9 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
|
|||||||
self.inlineStickerLayers = [stickerLayer]
|
self.inlineStickerLayers = [stickerLayer]
|
||||||
}
|
}
|
||||||
stickerLayer.isVisibleForAnimations = self.visibility != .none
|
stickerLayer.isVisibleForAnimations = self.visibility != .none
|
||||||
|
stickerLayer.dynamicColor = file.isCustomTemplateEmoji ? mainColor : nil
|
||||||
stickerLayer.frame = inlineMediaFrame
|
stickerLayer.frame = inlineMediaFrame
|
||||||
} else if contentAnimatedFilesValue.count == 4 {
|
} else if contentAnimatedFilesValue.count == 4, let file = contentAnimatedFilesValue.first {
|
||||||
var stickerLayers: [InlineStickerItemLayer] = []
|
var stickerLayers: [InlineStickerItemLayer] = []
|
||||||
if self.inlineStickerLayers.count == contentAnimatedFilesValue.count {
|
if self.inlineStickerLayers.count == contentAnimatedFilesValue.count {
|
||||||
stickerLayers = self.inlineStickerLayers
|
stickerLayers = self.inlineStickerLayers
|
||||||
@ -995,14 +996,16 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
self.inlineStickerLayers = stickerLayers
|
self.inlineStickerLayers = stickerLayers
|
||||||
}
|
}
|
||||||
|
|
||||||
var frames: [CGRect] = []
|
var frames: [CGRect] = []
|
||||||
let smallSize = CGSize(width: inlineMediaFrame.width / 2.0, height: inlineMediaFrame.width / 2.0)
|
let smallSize = CGSize(width: inlineMediaFrame.width / 2.0, height: inlineMediaFrame.width / 2.0)
|
||||||
frames.append(CGRect(origin: inlineMediaFrame.origin, size: smallSize))
|
frames.append(CGRect(origin: inlineMediaFrame.origin, size: smallSize).insetBy(dx: 2.0, dy: 2.0))
|
||||||
frames.append(CGRect(origin: inlineMediaFrame.origin.offsetBy(dx: smallSize.width, dy: 0.0), size: smallSize))
|
frames.append(CGRect(origin: inlineMediaFrame.origin.offsetBy(dx: smallSize.width, dy: 0.0), size: smallSize).insetBy(dx: 2.0, dy: 2.0))
|
||||||
frames.append(CGRect(origin: inlineMediaFrame.origin.offsetBy(dx: 0.0, dy: smallSize.height), size: smallSize))
|
frames.append(CGRect(origin: inlineMediaFrame.origin.offsetBy(dx: 0.0, dy: smallSize.height), size: smallSize).insetBy(dx: 2.0, dy: 2.0))
|
||||||
frames.append(CGRect(origin: inlineMediaFrame.origin.offsetBy(dx: smallSize.width, dy: smallSize.height), size: smallSize))
|
frames.append(CGRect(origin: inlineMediaFrame.origin.offsetBy(dx: smallSize.width, dy: smallSize.height), size: smallSize).insetBy(dx: 2.0, dy: 2.0))
|
||||||
for i in 0 ..< stickerLayers.count {
|
for i in 0 ..< stickerLayers.count {
|
||||||
stickerLayers[i].frame = frames[i]
|
stickerLayers[i].frame = frames[i]
|
||||||
|
stickerLayers[i].dynamicColor = file.isCustomTemplateEmoji ? mainColor : nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6744,54 +6744,9 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
dismissImpl?()
|
dismissImpl?()
|
||||||
completion()
|
completion()
|
||||||
|
|
||||||
self.updateEditProgress(0.0, cancel: { [weak self] in
|
if let title {
|
||||||
self?.stickerUploadDisposable.set(nil)
|
self.uploadSticker(file, action: .createStickerPack(title: title))
|
||||||
})
|
}
|
||||||
self.stickerUploadDisposable.set((self.context.engine.stickers.createStickerSet(
|
|
||||||
title: title ?? "",
|
|
||||||
shortName: "",
|
|
||||||
stickers: [
|
|
||||||
ImportSticker(
|
|
||||||
resource: .standalone(resource: file.resource),
|
|
||||||
thumbnailResource: file.previewRepresentations.first.flatMap { .standalone(resource: $0.resource) },
|
|
||||||
emojis: self.effectiveStickerEmoji(),
|
|
||||||
dimensions: file.dimensions ?? PixelDimensions(width: 512, height: 512),
|
|
||||||
duration: file.duration,
|
|
||||||
mimeType: file.mimeType,
|
|
||||||
keywords: ""
|
|
||||||
)
|
|
||||||
],
|
|
||||||
thumbnail: nil,
|
|
||||||
type: .stickers(content: .image),
|
|
||||||
software: nil
|
|
||||||
) |> deliverOnMainQueue).startStandalone(next: { [weak self] status in
|
|
||||||
guard let self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch status {
|
|
||||||
case let .progress(progress, _, _):
|
|
||||||
self.updateEditProgress(progress, cancel: { [weak self] in
|
|
||||||
self?.stickerUploadDisposable.set(nil)
|
|
||||||
})
|
|
||||||
case let .complete(info, items):
|
|
||||||
self.completion(MediaEditorScreen.Result(), { [weak self] finished in
|
|
||||||
self?.node.animateOut(finished: true, saveDraft: false, completion: { [weak self] in
|
|
||||||
guard let self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let navigationController = self.navigationController as? NavigationController
|
|
||||||
self.dismiss()
|
|
||||||
if let navigationController {
|
|
||||||
Queue.mainQueue().after(0.2) {
|
|
||||||
let packReference: StickerPackReference = .id(id: info.id.id, accessHash: info.accessHash)
|
|
||||||
let controller = self.context.sharedContext.makeStickerPackScreen(context: self.context, updatedPresentationData: nil, mainStickerPack: packReference, stickerPacks: [packReference], loadedStickerPacks: [.result(info: info, items: items, installed: true)], isEditing: false, expandIfNeeded: true, parentNavigationController: navigationController, sendSticker: self.sendSticker)
|
|
||||||
(navigationController.viewControllers.last as? ViewController)?.present(controller, in: .window(.root))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
}, cancel: {})
|
}, cancel: {})
|
||||||
dismissImpl = { [weak controller] in
|
dismissImpl = { [weak controller] in
|
||||||
controller?.dismiss()
|
controller?.dismiss()
|
||||||
@ -6855,38 +6810,38 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
|
|
||||||
let signal = context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: context.account.peerId))
|
let signal = context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: context.account.peerId))
|
||||||
|> castError(UploadStickerError.self)
|
|> castError(UploadStickerError.self)
|
||||||
|> mapToSignal { peer -> Signal<UploadStickerStatus, UploadStickerError> in
|
|> mapToSignal { peer -> Signal<(UploadStickerStatus, (StickerPackReference, String)?), UploadStickerError> in
|
||||||
guard let peer else {
|
guard let peer else {
|
||||||
return .complete()
|
return .complete()
|
||||||
}
|
}
|
||||||
return resourceSignal
|
return resourceSignal
|
||||||
|> mapToSignal { result -> Signal<UploadStickerStatus, UploadStickerError> in
|
|> mapToSignal { result -> Signal<(UploadStickerStatus, (StickerPackReference, String)?), UploadStickerError> in
|
||||||
switch result {
|
switch result {
|
||||||
case .failed:
|
case .failed:
|
||||||
return .fail(.generic)
|
return .fail(.generic)
|
||||||
case let .progress(progress):
|
case let .progress(progress):
|
||||||
return .single(.progress(progress * 0.5))
|
return .single((.progress(progress * 0.5), nil))
|
||||||
case let .complete(resource):
|
case let .complete(resource):
|
||||||
if let resource = resource as? CloudDocumentMediaResource {
|
if let resource = resource as? CloudDocumentMediaResource {
|
||||||
return .single(.progress(1.0)) |> then(.single(.complete(resource, mimeType)))
|
return .single((.progress(1.0), nil)) |> then(.single((.complete(resource, mimeType), nil)))
|
||||||
} else {
|
} else {
|
||||||
return context.engine.stickers.uploadSticker(peer: peer._asPeer(), resource: resource, thumbnail: file.previewRepresentations.first?.resource, alt: "", dimensions: dimensions, duration: duration, mimeType: mimeType)
|
return context.engine.stickers.uploadSticker(peer: peer._asPeer(), resource: resource, thumbnail: file.previewRepresentations.first?.resource, alt: "", dimensions: dimensions, duration: duration, mimeType: mimeType)
|
||||||
|> mapToSignal { status -> Signal<UploadStickerStatus, UploadStickerError> in
|
|> mapToSignal { status -> Signal<(UploadStickerStatus, (StickerPackReference, String)?), UploadStickerError> in
|
||||||
switch status {
|
switch status {
|
||||||
case let .progress(progress):
|
case let .progress(progress):
|
||||||
return .single(.progress(isVideo ? 0.5 + progress * 0.5 : progress))
|
return .single((.progress(isVideo ? 0.5 + progress * 0.5 : progress), nil))
|
||||||
case let .complete(resource, _):
|
case let .complete(resource, _):
|
||||||
let file = stickerFile(resource: resource, thumbnailResource: file.previewRepresentations.first?.resource, size: file.size ?? 0, dimensions: dimensions, duration: file.duration, isVideo: isVideo)
|
let file = stickerFile(resource: resource, thumbnailResource: file.previewRepresentations.first?.resource, size: file.size ?? 0, dimensions: dimensions, duration: file.duration, isVideo: isVideo)
|
||||||
switch action {
|
switch action {
|
||||||
case .send:
|
case .send:
|
||||||
return .single(status)
|
return .single((status, nil))
|
||||||
case .addToFavorites:
|
case .addToFavorites:
|
||||||
return context.engine.stickers.toggleStickerSaved(file: file, saved: true)
|
return context.engine.stickers.toggleStickerSaved(file: file, saved: true)
|
||||||
|> `catch` { _ -> Signal<SavedStickerResult, UploadStickerError> in
|
|> `catch` { _ -> Signal<SavedStickerResult, UploadStickerError> in
|
||||||
return .fail(.generic)
|
return .fail(.generic)
|
||||||
}
|
}
|
||||||
|> map { _ in
|
|> map { _ in
|
||||||
return status
|
return (status, nil)
|
||||||
}
|
}
|
||||||
case let .createStickerPack(title):
|
case let .createStickerPack(title):
|
||||||
let sticker = ImportSticker(
|
let sticker = ImportSticker(
|
||||||
@ -6902,13 +6857,13 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
return .fail(.generic)
|
return .fail(.generic)
|
||||||
}
|
}
|
||||||
|> mapToSignal { innerStatus in
|
|> mapToSignal { innerStatus in
|
||||||
if case .complete = innerStatus {
|
if case let .complete(info, _) = innerStatus {
|
||||||
return .single(status)
|
return .single((status, (.id(id: info.id.id, accessHash: info.accessHash), title)))
|
||||||
} else {
|
} else {
|
||||||
return .complete()
|
return .complete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case let .addToStickerPack(pack, _):
|
case let .addToStickerPack(pack, title):
|
||||||
let sticker = ImportSticker(
|
let sticker = ImportSticker(
|
||||||
resource: .standalone(resource: resource),
|
resource: .standalone(resource: resource),
|
||||||
emojis: emojis,
|
emojis: emojis,
|
||||||
@ -6922,10 +6877,10 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
return .fail(.generic)
|
return .fail(.generic)
|
||||||
}
|
}
|
||||||
|> map { _ in
|
|> map { _ in
|
||||||
return status
|
return (status, (pack, title))
|
||||||
}
|
}
|
||||||
case .upload, .update:
|
case .upload, .update:
|
||||||
return .single(status)
|
return .single((status, nil))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6934,7 +6889,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.stickerUploadDisposable.set((signal
|
self.stickerUploadDisposable.set((signal
|
||||||
|> deliverOnMainQueue).startStandalone(next: { [weak self] status in
|
|> deliverOnMainQueue).startStandalone(next: { [weak self] (status, packReferenceAndTitle) in
|
||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -6976,15 +6931,14 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
if let parentController = navigationController?.viewControllers.last as? ViewController {
|
if let parentController = navigationController?.viewControllers.last as? ViewController {
|
||||||
parentController.present(UndoOverlayController(presentationData: presentationData, content: .sticker(context: self.context, file: file, loop: true, title: nil, text: presentationData.strings.Conversation_StickerAddedToFavorites, undoText: nil, customAction: nil), elevatedLayout: false, action: { _ in return false }), in: .current)
|
parentController.present(UndoOverlayController(presentationData: presentationData, content: .sticker(context: self.context, file: file, loop: true, title: nil, text: presentationData.strings.Conversation_StickerAddedToFavorites, undoText: nil, customAction: nil), elevatedLayout: false, action: { _ in return false }), in: .current)
|
||||||
}
|
}
|
||||||
case let .addToStickerPack(packReference, title):
|
case .addToStickerPack, .createStickerPack:
|
||||||
let navigationController = self.navigationController as? NavigationController
|
if let (packReference, packTitle) = packReferenceAndTitle, let navigationController = self.navigationController as? NavigationController {
|
||||||
if let navigationController {
|
|
||||||
Queue.mainQueue().after(0.2) {
|
Queue.mainQueue().after(0.2) {
|
||||||
let controller = self.context.sharedContext.makeStickerPackScreen(context: self.context, updatedPresentationData: nil, mainStickerPack: packReference, stickerPacks: [packReference], loadedStickerPacks: [], isEditing: false, expandIfNeeded: true, parentNavigationController: navigationController, sendSticker: self.sendSticker)
|
let controller = self.context.sharedContext.makeStickerPackScreen(context: self.context, updatedPresentationData: nil, mainStickerPack: packReference, stickerPacks: [packReference], loadedStickerPacks: [], isEditing: false, expandIfNeeded: true, parentNavigationController: navigationController, sendSticker: self.sendSticker)
|
||||||
(navigationController.viewControllers.last as? ViewController)?.present(controller, in: .window(.root))
|
(navigationController.viewControllers.last as? ViewController)?.present(controller, in: .window(.root))
|
||||||
|
|
||||||
Queue.mainQueue().after(0.1) {
|
Queue.mainQueue().after(0.1) {
|
||||||
controller.present(UndoOverlayController(presentationData: presentationData, content: .sticker(context: self.context, file: file, loop: true, title: nil, text: presentationData.strings.StickerPack_StickerAdded(title).string, undoText: nil, customAction: nil), elevatedLayout: false, action: { _ in return false }), in: .current)
|
controller.present(UndoOverlayController(presentationData: presentationData, content: .sticker(context: self.context, file: file, loop: true, title: nil, text: presentationData.strings.StickerPack_StickerAdded(packTitle).string, undoText: nil, customAction: nil), elevatedLayout: false, action: { _ in return false }), in: .current)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user