Update Ghostgram features

This commit is contained in:
ichmagmaus 812
2026-03-07 18:15:32 +01:00
parent 32b0dddcd9
commit 13a43b9068
902 changed files with 148302 additions and 62355 deletions
@@ -2008,7 +2008,7 @@ extension ChatControllerImpl {
}
}
}))
}, forwardSelectedMessages: { [weak self] in
}, forwardSelectedMessages: { [weak self] _ in
if let strongSelf = self {
strongSelf.commitPurposefulAction()
if let forwardMessageIdsSet = strongSelf.presentationInterfaceState.interfaceState.selectionState?.selectedIds {
@@ -2023,7 +2023,7 @@ extension ChatControllerImpl {
strongSelf.forwardMessages(messageIds: forwardMessageIds, options: strongSelf.presentationInterfaceState.interfaceState.forwardOptionsState, resetCurrent: true)
}
}
}, forwardMessages: { [weak self] messages in
}, forwardMessages: { [weak self] messages, action in
if let strongSelf = self, !messages.isEmpty {
guard !strongSelf.presentAccountFrozenInfoIfNeeded(delay: true) else {
return
@@ -2031,7 +2031,16 @@ extension ChatControllerImpl {
strongSelf.commitPurposefulAction()
let forwardMessageIds = messages.map { $0.id }.sorted()
strongSelf.forwardMessages(messageIds: forwardMessageIds)
switch action {
case "forwardMessagesToCloud":
strongSelf.forwardMessagesToCloud(messageIds: forwardMessageIds, removeNames: false, openCloud: false)
case "forwardMessagesWithNoNames":
strongSelf.forwardMessages(messageIds: forwardMessageIds, options: ChatInterfaceForwardOptionsState(hideNames: true, hideCaptions: false, unhideNamesOnCaptionChange: false))
case "forwardMessagesToCloudWithNoNamesAndOpen":
strongSelf.forwardMessagesToCloud(messageIds: forwardMessageIds, removeNames: true, openCloud: true)
default:
strongSelf.forwardMessages(messageIds: forwardMessageIds)
}
}
}, updateForwardOptionsState: { [weak self] f in
if let strongSelf = self {
@@ -1,3 +1,7 @@
// MARK: Swiftgram
import SGSimpleSettings
import TextFormat
import TranslateUI
import Foundation
import UIKit
import AsyncDisplayKit
@@ -84,6 +88,47 @@ func chatMessageDisplaySendMessageOptions(selfController: ChatControllerImpl, no
return
}
// MARK: Swiftgram
let outgoingMessageTranslateToLang = SGSimpleSettings.shared.outgoingLanguageTranslation[SGSimpleSettings.makeOutgoingLanguageTranslationKey(accountId: selfController.context.account.peerId.id._internalGetInt64Value(), peerId: peer.id.id._internalGetInt64Value())] ?? selfController.contentData?.state.predictedChatLanguage
let sgTranslationContext: (outgoingMessageTranslateToLang: String?, translate: (() -> Void)?, changeTranslationLanguage: (() -> ())?) = (outgoingMessageTranslateToLang: outgoingMessageTranslateToLang, translate: { [weak selfController] in
guard let selfController else { return }
let textToTranslate = selfController.presentationInterfaceState.interfaceState.effectiveInputState.inputText.string
let textEntities = selfController.presentationInterfaceState.interfaceState.synchronizeableInputState?.entities ?? []
if let outgoingMessageTranslateToLang = outgoingMessageTranslateToLang {
let _ = (selfController.context.engine.messages.translate(text: textToTranslate, toLang: outgoingMessageTranslateToLang, entities: textEntities) |> deliverOnMainQueue).start(next: { [weak selfController] translatedTextAndEntities in
guard let selfController, let translatedTextAndEntities else { return }
let newInputText = chatInputStateStringWithAppliedEntities(translatedTextAndEntities.0, entities: translatedTextAndEntities.1)
let newTextInputState = ChatTextInputState(inputText: newInputText, selectionRange: 0 ..< newInputText.length)
selfController.updateChatPresentationInterfaceState(interactive: true, { state in
return state.updatedInterfaceState { interfaceState in
return interfaceState.withUpdatedEffectiveInputState(newTextInputState)
}
})
})
}
}, changeTranslationLanguage: { [weak selfController] in
guard let selfController else { return }
let controller = languageSelectionController(context: selfController.context, forceTheme: selfController.presentationData.theme, fromLanguage: "", toLanguage: selfController.presentationInterfaceState.translationState?.fromLang ?? "", completion: { _, toLang in
guard let peerId = selfController.chatLocation.peerId else {
return
}
var langCode = toLang
if langCode == "nb" {
langCode = "no"
} else if langCode == "pt-br" {
langCode = "pt"
}
if !toLang.isEmpty {
SGSimpleSettings.shared.outgoingLanguageTranslation[SGSimpleSettings.makeOutgoingLanguageTranslationKey(accountId: selfController.context.account.peerId.id._internalGetInt64Value(), peerId: peerId.id._internalGetInt64Value())] = langCode
}
chatMessageDisplaySendMessageOptions(selfController: selfController, node: node, gesture: gesture)
})
controller.navigationPresentation = .modal
selfController.push(controller)
})
if let editMessage = selfController.presentationInterfaceState.interfaceState.editMessage {
if editMessages.isEmpty {
return
@@ -122,6 +167,7 @@ func chatMessageDisplaySendMessageOptions(selfController: ChatControllerImpl, no
}
let controller = makeChatSendMessageActionSheetController(
sgTranslationContext: sgTranslationContext,
initialData: initialData,
context: selfController.context,
updatedPresentationData: selfController.updatedPresentationData,
@@ -213,6 +259,7 @@ func chatMessageDisplaySendMessageOptions(selfController: ChatControllerImpl, no
}
let controller = makeChatSendMessageActionSheetController(
sgTranslationContext: sgTranslationContext,
initialData: initialData,
context: selfController.context,
updatedPresentationData: selfController.updatedPresentationData,