Merge commit 'fd7d20e5db134f20d31d51891bf431d4df3f793a'

This commit is contained in:
Isaac 2024-01-11 23:17:01 +04:00
commit 5b7d4984ac
6 changed files with 67 additions and 2 deletions

View File

@ -49,6 +49,9 @@ extension TelegramUser {
}
var userFlags: UserInfoFlags = []
if (flags & (1 << 12)) != 0 {
userFlags.insert(.mutualContact)
}
if (flags & (1 << 17)) != 0 {
userFlags.insert(.isVerified)
}
@ -67,7 +70,9 @@ extension TelegramUser {
if (flags2 & (1 << 2)) != 0 {
userFlags.insert(.isCloseFriend)
}
if (flags2 & (1 << 6)) != 0 {
userFlags.insert(.requirePremium)
}
var storiesHidden: Bool?
if !isMin {
storiesHidden = (flags2 & (1 << 3)) != 0
@ -142,6 +147,9 @@ extension TelegramUser {
if let lhs = lhs {
var userFlags: UserInfoFlags = []
if (flags & (1 << 12)) != 0 {
userFlags.insert(.mutualContact)
}
if (flags & (1 << 17)) != 0 {
userFlags.insert(.isVerified)
}
@ -161,7 +169,9 @@ extension TelegramUser {
if lhs.flags.contains(.isCloseFriend) {
userFlags.insert(.isCloseFriend)
}
if lhs.flags.contains(.requirePremium) {
userFlags.insert(.requirePremium)
}
var botInfo: BotUserInfo?
if (flags & (1 << 14)) != 0 {
var botFlags = BotUserInfoFlags()

View File

@ -0,0 +1,42 @@
import SwiftSignalKit
import Postbox
import TelegramApi
internal func _internal_updateIsPremiumRequiredToContact(account: Account, peerIds: [EnginePeer.Id]) -> Signal<[EnginePeer.Id], NoError> {
return account.postbox.transaction { transaction -> [Api.InputUser] in
var inputUsers: [Api.InputUser] = []
for id in peerIds {
if let peer = transaction.getPeer(id), let inputUser = apiInputUser(peer) {
inputUsers.append(inputUser)
}
}
return inputUsers
} |> mapToSignal { inputUsers -> Signal<[EnginePeer.Id], NoError> in
return account.network.request(Api.functions.users.getIsPremiumRequiredToContact(id: inputUsers))
|> retryRequest
|> mapToSignal { result in
return account.postbox.transaction { transaction in
var requiredPeerIds: [EnginePeer.Id] = []
for (i, req) in result.enumerated() {
let peerId = peerIds[i]
let required = req == .boolTrue
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, cachedData in
let data = cachedData as? CachedUserData ?? CachedUserData()
var flags = data.flags
if required {
flags.insert(.premiumRequired)
} else {
flags.remove(.premiumRequired)
}
return data.withUpdatedFlags(flags)
})
if required {
requiredPeerIds.append(peerId)
}
}
return requiredPeerIds
}
}
}
}

View File

@ -204,6 +204,7 @@ public struct CachedUserFlags: OptionSet {
public static let translationHidden = CachedUserFlags(rawValue: 1 << 0)
public static let isBlockedFromStories = CachedUserFlags(rawValue: 1 << 1)
public static let readDatesPrivate = CachedUserFlags(rawValue: 1 << 2)
public static let premiumRequired = CachedUserFlags(rawValue: 1 << 3)
}
public final class EditableBotInfo: PostboxCoding, Equatable {

View File

@ -17,6 +17,8 @@ public struct UserInfoFlags: OptionSet {
public static let isFake = UserInfoFlags(rawValue: (1 << 3))
public static let isPremium = UserInfoFlags(rawValue: (1 << 4))
public static let isCloseFriend = UserInfoFlags(rawValue: (1 << 5))
public static let requirePremium = UserInfoFlags(rawValue: (1 << 6))
public static let mutualContact = UserInfoFlags(rawValue: (1 << 7))
}
public struct BotUserInfoFlags: OptionSet {

View File

@ -1273,6 +1273,10 @@ public extension TelegramEngine {
public func requestRecommendedChannels(peerId: EnginePeer.Id, forceUpdate: Bool = false) -> Signal<Never, NoError> {
return _internal_requestRecommendedChannels(account: self.account, peerId: peerId, forceUpdate: forceUpdate)
}
public func isPremiumRequiredToContact(_ peerIds: [EnginePeer.Id]) -> Signal<[EnginePeer.Id], NoError> {
return _internal_updateIsPremiumRequiredToContact(account: self.account, peerIds: peerIds)
}
}
}

View File

@ -236,9 +236,15 @@ func _internal_fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPee
let videoCallsAvailable = (userFullFlags & (1 << 13)) != 0
let voiceMessagesAvailable = (userFullFlags & (1 << 20)) == 0
let readDatesPrivate = (userFullFlags & (1 << 30)) != 0
let premiumRequired = (userFullFlags & (1 << 29)) != 0
let translationsDisabled = (userFullFlags & (1 << 23)) != 0
var flags: CachedUserFlags = previous.flags
if premiumRequired {
flags.insert(.premiumRequired)
} else {
flags.remove(.premiumRequired)
}
if readDatesPrivate {
flags.insert(.readDatesPrivate)
} else {