diff --git a/submodules/TelegramCore/Sources/ApiUtils/ApiGroupOrChannel.swift b/submodules/TelegramCore/Sources/ApiUtils/ApiGroupOrChannel.swift index 122d2f95a5..dc9280893c 100644 --- a/submodules/TelegramCore/Sources/ApiUtils/ApiGroupOrChannel.swift +++ b/submodules/TelegramCore/Sources/ApiUtils/ApiGroupOrChannel.swift @@ -131,6 +131,9 @@ func parseTelegramGroupOrChannel(chat: Api.Chat) -> Peer? { if (flags & Int32(1 << 30)) != 0 { channelFlags.insert(.isForum) } + if (flags2 & Int32(1 << 15)) != 0 { + channelFlags.insert(.autoTranslateEnabled) + } var storiesHidden: Bool? if flags2 & (1 << 2) == 0 { // stories_hidden_min diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_TelegramChannel.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_TelegramChannel.swift index 77c9b3d4ca..6fb4634d4f 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_TelegramChannel.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_TelegramChannel.swift @@ -181,6 +181,7 @@ public struct TelegramChannelFlags: OptionSet { public static let joinToSend = TelegramChannelFlags(rawValue: 1 << 9) public static let requestToJoin = TelegramChannelFlags(rawValue: 1 << 10) public static let isForum = TelegramChannelFlags(rawValue: 1 << 11) + public static let autoTranslateEnabled = TelegramChannelFlags(rawValue: 1 << 12) } public final class TelegramChannel: Peer, Equatable { diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Data/PeersData.swift b/submodules/TelegramCore/Sources/TelegramEngine/Data/PeersData.swift index f5738a162c..36f3679bed 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Data/PeersData.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Data/PeersData.swift @@ -2467,5 +2467,32 @@ public extension TelegramEngine.EngineData.Item { } } } + + public struct AutoTranslateEnabled: TelegramEngineDataItem, TelegramEngineMapKeyDataItem, PostboxViewDataItem { + public typealias Result = Bool + + fileprivate var id: EnginePeer.Id + public var mapKey: EnginePeer.Id { + return self.id + } + + public init(id: EnginePeer.Id) { + self.id = id + } + + var key: PostboxViewKey { + return .peer(peerId: self.id, components: []) + } + + func extract(view: PostboxView) -> Result { + guard let view = view as? PeerView else { + preconditionFailure() + } + if let channel = peerViewMainPeer(view) as? TelegramChannel { + return channel.flags.contains(.autoTranslateEnabled) + } + return false + } + } } } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/AutoTranslate.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/AutoTranslate.swift new file mode 100644 index 0000000000..cd513ab5f1 --- /dev/null +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/AutoTranslate.swift @@ -0,0 +1,19 @@ +import Foundation +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit + +func _internal_toggleAutoTranslation(account: Account, peerId: PeerId, enabled: Bool) -> Signal { + return account.postbox.transaction { transaction -> Signal in + if let peer = transaction.getPeer(peerId), let inputChannel = apiInputChannel(peer) { + return account.network.request(Api.functions.channels.toggleAutotranslation(channel: inputChannel, enabled: enabled ? .boolTrue : .boolFalse)) |> `catch` { _ in .complete() } |> map { updates -> Void in + account.stateManager.addUpdates(updates) + } + } else { + return .complete() + } + } + |> switchToLatest + |> ignoreValues +} diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/TelegramEnginePeers.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/TelegramEnginePeers.swift index a8b746b691..06ac1460c1 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Peers/TelegramEnginePeers.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/TelegramEnginePeers.swift @@ -1693,6 +1693,10 @@ public extension TelegramEngine { let _ = _internal_removeChatManagingBot(account: self.account, chatId: chatId).startStandalone() } + public func toggleAutoTranslation(peerId: EnginePeer.Id, enabled: Bool) -> Signal { + return _internal_toggleAutoTranslation(account: self.account, peerId: peerId, enabled: enabled) + } + public func resolveMessageLink(slug: String) -> Signal { return self.account.network.request(Api.functions.account.resolveBusinessChatLink(slug: slug)) |> map(Optional.init)