From 364045f8cdf65d4c9ace95dbc87030fc5e06ab32 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 28 Mar 2024 18:05:06 +0400 Subject: [PATCH] Various fixes --- .../Telegram-iOS/en.lproj/Localizable.strings | 2 ++ .../Sources/StickerCutoutOutlineView.swift | 10 +++--- .../Sources/PeerInfoScreen.swift | 32 +++++++++++++++---- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 111e8fed80..43b456f23f 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -11650,6 +11650,8 @@ Sorry for the inconvenience."; "Birthday.Save" = "Save"; "Birthday.Added" = "Date of birth added."; +"Birthday.FloodError" = "Sorry, you can’t change your birthday so often."; + "Chat.BirthdayTooltip" = "πŸŽ‚ %1$@ is having a birthday today. You can give %2$@ **Telegram Premium** as a birthday gift."; "ChatList.AddBirthdayTitle" = "Add your birthday! πŸŽ‚"; diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/StickerCutoutOutlineView.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/StickerCutoutOutlineView.swift index 719f8afb76..9275217a69 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/StickerCutoutOutlineView.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/StickerCutoutOutlineView.swift @@ -146,10 +146,7 @@ private func getPathFromMaskImage(_ image: CIImage, size: CGSize, values: MediaE } let minSide = min(size.width, size.height) let scaledImageSize = image.extent.size.aspectFilled(CGSize(width: minSide, height: minSide)) - let positionOffset = CGPoint( - x: (size.width - scaledImageSize.width) / 2.0, - y: (size.height - scaledImageSize.height) / 2.0 - ) + var contour = findContours(pixelBuffer: pixelBuffer) contour = simplify(contour, tolerance: 1.4) @@ -163,6 +160,11 @@ private func getPathFromMaskImage(_ image: CIImage, size: CGSize, values: MediaE let rotation = values.cropRotation let scale = values.cropScale + let positionOffset = CGPoint( + x: (size.width - scaledImageSize.width * scale) / 2.0, + y: (size.height - scaledImageSize.height * scale) / 2.0 + ) + transform = transform.translatedBy(x: positionOffset.x + position.x * secondScale, y: positionOffset.y + position.y * secondScale) transform = transform.rotated(by: rotation) transform = transform.scaledBy(x: scale * firstScale, y: scale * firstScale) diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift index 39e944de69..26fac47ecf 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift @@ -3703,24 +3703,34 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro let peerBio = cachedData.about ?? "" if (peer.firstName ?? "") != firstName || (peer.lastName ?? "") != lastName || (bio ?? "") != peerBio || (cachedData.birthday != birthday) { - var updateNameSignal: Signal = .complete() + var updateNameSignal: Signal = .complete() var hasProgress = false if (peer.firstName ?? "") != firstName || (peer.lastName ?? "") != lastName { updateNameSignal = context.engine.accountData.updateAccountPeerName(firstName: firstName, lastName: lastName) + |> castError(UpdateInfoError.self) hasProgress = true } - var updateBioSignal: Signal = .complete() + + enum UpdateInfoError { + case generic + case birthdayFlood + } + + var updateBioSignal: Signal = .complete() if let bio, bio != cachedData.about { updateBioSignal = context.engine.accountData.updateAbout(about: bio) - |> `catch` { _ -> Signal in + |> `catch` { _ -> Signal in return .complete() } hasProgress = true } - var updatedBirthdaySignal: Signal = .complete() + var updatedBirthdaySignal: Signal = .complete() if let birthday, birthday != cachedData.birthday { updatedBirthdaySignal = context.engine.accountData.updateBirthday(birthday: birthday) - |> `catch` { _ -> Signal in + |> `catch` { error -> Signal in + if case .flood = error { + return .fail(.birthdayFlood) + } return .complete() } hasProgress = true @@ -3738,7 +3748,17 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro strongSelf.controller?.present(statusController, in: .window(.root)) } strongSelf.activeActionDisposable.set((combineLatest(updateNameSignal, updateBioSignal, updatedBirthdaySignal) |> deliverOnMainQueue - |> deliverOnMainQueue).startStrict(completed: { + |> deliverOnMainQueue).startStrict(error: { [weak self] error in + dismissStatus?() + + guard let self else { + return + } + if case .birthdayFlood = error { + self.controller?.present(textAlertController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, title: nil, text: self.presentationData.strings.Birthday_FloodError, actions: [TextAlertAction(type: .defaultAction, title: self.presentationData.strings.Common_OK, action: {})]), in: .window(.root)) + } + strongSelf.headerNode.navigationButtonContainer.performAction?(.cancel, nil, nil) + }, completed: { dismissStatus?() guard let strongSelf = self else {