diff --git a/TelegramCore.xcodeproj/project.pbxproj b/TelegramCore.xcodeproj/project.pbxproj index 4c70d42d71..b67b83c11a 100644 --- a/TelegramCore.xcodeproj/project.pbxproj +++ b/TelegramCore.xcodeproj/project.pbxproj @@ -113,6 +113,8 @@ D01AC9211DD5E7E500E8160F /* RequestEditMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC9201DD5E7E500E8160F /* RequestEditMessage.swift */; }; D01AC9231DD5E9A200E8160F /* ApplyUpdateMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC9221DD5E9A200E8160F /* ApplyUpdateMessage.swift */; }; D01B27A21E394D8B0022A4C0 /* PrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01B27A11E394D8B0022A4C0 /* PrivacySettings.swift */; }; + D01C06B71FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */; }; + D01C06B81FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */; }; D01C7ED31EF5DF83008305F1 /* LimitsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */; }; D01C7ED41EF5DF83008305F1 /* LimitsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */; }; D01C7ED61EF5E468008305F1 /* ProxySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED51EF5E468008305F1 /* ProxySettings.swift */; }; @@ -656,6 +658,7 @@ D01AC9201DD5E7E500E8160F /* RequestEditMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestEditMessage.swift; sourceTree = ""; }; D01AC9221DD5E9A200E8160F /* ApplyUpdateMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApplyUpdateMessage.swift; sourceTree = ""; }; D01B27A11E394D8B0022A4C0 /* PrivacySettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacySettings.swift; sourceTree = ""; }; + D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CanSendMessagesToPeer.swift; sourceTree = ""; }; D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LimitsConfiguration.swift; sourceTree = ""; }; D01C7ED51EF5E468008305F1 /* ProxySettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProxySettings.swift; sourceTree = ""; }; D01C7F031EFC1C49008305F1 /* DeviceContact.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceContact.swift; sourceTree = ""; }; @@ -1077,6 +1080,7 @@ D042C6821E8D9DF800C863B0 /* Unixtime.swift */, D01C7F031EFC1C49008305F1 /* DeviceContact.swift */, D053B3FD1F16534400E2D58A /* MonotonicTime.swift */, + D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */, ); name = Utils; sourceTree = ""; @@ -1883,6 +1887,7 @@ D0FA8BAD1E1FD6E2001E855B /* MemoryBufferExtensions.swift in Sources */, D03B0CBF1D62234A00955575 /* Log.swift in Sources */, C2FD33E41E687BF1008D13D4 /* PeerPhotoUpdater.swift in Sources */, + D01C06B71FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */, D0B843B51DA7FF30005F29E1 /* NBMetadataCore.m in Sources */, D03B0CD61D62245300955575 /* TelegramUser.swift in Sources */, D02395D61F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift in Sources */, @@ -2172,6 +2177,7 @@ D0B418A61D7E0592004562A4 /* CloudFileMediaResource.swift in Sources */, D073CEA51DCBF3F5007511FD /* StickerManagement.swift in Sources */, D03C536D1DAD5CA9004C17B3 /* ApiGroupOrChannel.swift in Sources */, + D01C06B81FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */, D0E35A151DE4C6A200BC6096 /* OutgoingMessageWithChatContextResult.swift in Sources */, D0B418A91D7E0597004562A4 /* Buffer.swift in Sources */, D02ABC821E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift in Sources */, diff --git a/TelegramCore/BotPaymentForm.swift b/TelegramCore/BotPaymentForm.swift index 3a6b696ecf..8b46d8448a 100644 --- a/TelegramCore/BotPaymentForm.swift +++ b/TelegramCore/BotPaymentForm.swift @@ -399,3 +399,11 @@ public func requestBotPaymentReceipt(network: Network, messageId: MessageId) -> } } } + +public func clearBotPaymentInfo(network: Network) -> Signal { + return network.request(Api.functions.payments.clearSavedInfo(flags: 1 | 2)) + |> retryRequest + |> mapToSignal { _ -> Signal in + return .complete() + } +} diff --git a/TelegramCore/CanSendMessagesToPeer.swift b/TelegramCore/CanSendMessagesToPeer.swift new file mode 100644 index 0000000000..820b459221 --- /dev/null +++ b/TelegramCore/CanSendMessagesToPeer.swift @@ -0,0 +1,23 @@ +import Foundation +#if os(macOS) + import PostboxMac +#else + import Postbox +#endif + +public func canSendMessagesToPeer(_ peer: Peer) -> Bool { + if peer is TelegramUser || peer is TelegramGroup { + return true + } else if let peer = peer as? TelegramSecretChat { + return peer.embeddedState == .active + } else if let peer = peer as? TelegramChannel { + switch peer.info { + case .broadcast: + return peer.hasAdminRights(.canPostMessages) + case .group: + return true + } + } else { + return false + } +} diff --git a/TelegramCore/StoreMessage_Telegram.swift b/TelegramCore/StoreMessage_Telegram.swift index 4ecb2d2e97..5cf9d61335 100644 --- a/TelegramCore/StoreMessage_Telegram.swift +++ b/TelegramCore/StoreMessage_Telegram.swift @@ -125,7 +125,7 @@ extension Api.Message { var peerIds: [PeerId] { switch self { - case let .message(flags, _, fromId, toId, fwdFrom, viaBotId, _, _, _, media, _, entities, _, _, _, _): + case let .message(flags, _, fromId, toId, fwdHeader, viaBotId, _, _, _, media, _, entities, _, _, _, _): let peerId: PeerId switch toId { case let .peerUser(userId): @@ -142,15 +142,18 @@ extension Api.Message { result.append(PeerId(namespace: Namespaces.Peer.CloudUser, id: fromId)) } - if let fwdFrom = fwdFrom { - switch fwdFrom { - case let .messageFwdHeader(_, fromId, _, channelId, _, _, _, _): + if let fwdHeader = fwdHeader { + switch fwdHeader { + case let .messageFwdHeader(_, fromId, _, channelId, _, _, savedFromPeer, _): if let channelId = channelId { result.append(PeerId(namespace: Namespaces.Peer.CloudChannel, id: channelId)) } if let fromId = fromId { result.append(PeerId(namespace: Namespaces.Peer.CloudUser, id: fromId)) } + if let savedFromPeer = savedFromPeer { + result.append(savedFromPeer.peerId) + } } }