mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-17 11:00:07 +00:00
no message
This commit is contained in:
parent
e9093ccf99
commit
acaf6f359d
@ -69,7 +69,10 @@ public struct AdminLogEventsFlags : OptionSet {
|
||||
public static let editMessages = AdminLogEventsFlags(rawValue: 1 << 12)
|
||||
public static let deleteMessages = AdminLogEventsFlags(rawValue: 1 << 13)
|
||||
|
||||
public static var all:AdminLogEventsFlags {
|
||||
public static var all:[AdminLogEventsFlags] {
|
||||
return [.join, .leave, .invite, .ban, .unban, .kick, .unkick, .promote, .demote, .info, .settings, .pinnedMessages, .editMessages, .deleteMessages]
|
||||
}
|
||||
public static var flags:AdminLogEventsFlags {
|
||||
return [.join, .leave, .invite, .ban, .unban, .kick, .unkick, .promote, .demote, .info, .settings, .pinnedMessages, .editMessages, .deleteMessages]
|
||||
}
|
||||
}
|
||||
@ -83,7 +86,7 @@ private func boolFromApiValue(_ value: Api.Bool) -> Bool {
|
||||
}
|
||||
}
|
||||
|
||||
public func channelAdminLogEvents(_ account:Account, peerId:PeerId, maxId:AdminLogEventId, minId:AdminLogEventId, limit:Int32 = 100, query:String = "", filter:AdminLogEventsFlags? = nil, admins:[PeerId]? = nil) -> Signal<AdminLogEventsResult, ChannelAdminLogEventError> {
|
||||
public func channelAdminLogEvents(_ account:Account, peerId:PeerId, maxId:AdminLogEventId, minId:AdminLogEventId, limit:Int32 = 100, query:String? = nil, filter:AdminLogEventsFlags? = nil, admins:[PeerId]? = nil) -> Signal<AdminLogEventsResult, ChannelAdminLogEventError> {
|
||||
|
||||
return account.postbox.modify { modifier -> (Peer?, [Peer]?) in
|
||||
return (modifier.getPeer(peerId), admins?.flatMap {modifier.getPeer($0)})
|
||||
@ -101,7 +104,7 @@ public func channelAdminLogEvents(_ account:Account, peerId:PeerId, maxId:AdminL
|
||||
if let _ = inputAdmins {
|
||||
flags += Int32(1 << 1)
|
||||
}
|
||||
return account.network.request(Api.functions.channels.getAdminLog(flags: flags, channel: inputChannel, q: query, eventsFilter: eventsFilter, admins: inputAdmins, maxId: maxId, minId: minId, limit: limit)) |> map { result in
|
||||
return account.network.request(Api.functions.channels.getAdminLog(flags: flags, channel: inputChannel, q: query ?? "", eventsFilter: eventsFilter, admins: inputAdmins, maxId: maxId, minId: minId, limit: limit)) |> map { result in
|
||||
|
||||
switch result {
|
||||
case let .adminLogResults(apiEvents, apiChats, apiUsers):
|
||||
|
@ -31,7 +31,7 @@ public func channelAdmins(account: Account, peerId: PeerId) -> Signal<[RenderedC
|
||||
|
||||
for participant in CachedChannelParticipants(apiParticipants: participants).participants {
|
||||
if let peer = peers[participant.peerId] {
|
||||
items.append(RenderedChannelParticipant(participant: participant, peer: peer, status: status[peer.id]))
|
||||
items.append(RenderedChannelParticipant(participant: participant, peer: peer, presence: status[peer.id]))
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ private func fetchChannelBlacklist(account: Account, peerId: PeerId, filter: Cha
|
||||
|
||||
for participant in CachedChannelParticipants(apiParticipants: participants).participants {
|
||||
if let peer = peers[participant.peerId] {
|
||||
items.append(RenderedChannelParticipant(participant: participant, peer: peer, status: status[peer.id]))
|
||||
items.append(RenderedChannelParticipant(participant: participant, peer: peer, presence: status[peer.id]))
|
||||
}
|
||||
|
||||
}
|
||||
@ -55,24 +55,74 @@ private func fetchChannelBlacklist(account: Account, peerId: PeerId, filter: Cha
|
||||
} |> switchToLatest
|
||||
}
|
||||
|
||||
public func channelBlacklistParticipants(account: Account, peerId: PeerId) -> Signal<[RenderedChannelParticipant], NoError> {
|
||||
public struct ChannelBlacklist {
|
||||
public let banned:[RenderedChannelParticipant]
|
||||
public let restricted:[RenderedChannelParticipant]
|
||||
public init(banned:[RenderedChannelParticipant], restricted: [RenderedChannelParticipant]) {
|
||||
self.banned = banned
|
||||
self.restricted = restricted
|
||||
}
|
||||
public var isEmpty: Bool {
|
||||
return banned.isEmpty && restricted.isEmpty
|
||||
}
|
||||
public func withRemovedPeerId(_ memberId:PeerId) -> ChannelBlacklist {
|
||||
var updatedRestricted = restricted
|
||||
var updatedBanned = banned
|
||||
|
||||
for i in 0 ..< updatedBanned.count {
|
||||
if updatedBanned[i].peer.id == memberId {
|
||||
updatedBanned.remove(at: i)
|
||||
break
|
||||
}
|
||||
}
|
||||
for i in 0 ..< updatedRestricted.count {
|
||||
if updatedRestricted[i].peer.id == memberId {
|
||||
updatedRestricted.remove(at: i)
|
||||
break
|
||||
}
|
||||
}
|
||||
return ChannelBlacklist(banned: updatedBanned, restricted: updatedRestricted)
|
||||
}
|
||||
|
||||
public func withRemovedParticipant(_ participant:RenderedChannelParticipant) -> ChannelBlacklist {
|
||||
let updated = self.withRemovedPeerId(participant.participant.peerId)
|
||||
var updatedRestricted = updated.restricted
|
||||
var updatedBanned = updated.banned
|
||||
|
||||
if case .member(_, _, _, let maybeBanInfo) = participant.participant, let banInfo = maybeBanInfo {
|
||||
if banInfo.flags.contains(.banReadMessages) {
|
||||
updatedBanned.insert(participant, at: 0)
|
||||
} else {
|
||||
if !banInfo.flags.isEmpty {
|
||||
updatedRestricted.insert(participant, at: 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return ChannelBlacklist(banned: updatedBanned, restricted: updatedRestricted)
|
||||
}
|
||||
}
|
||||
|
||||
public func channelBlacklistParticipants(account: Account, peerId: PeerId) -> Signal<ChannelBlacklist, NoError> {
|
||||
return combineLatest(fetchChannelBlacklist(account: account, peerId: peerId, filter: .restricted), fetchChannelBlacklist(account: account, peerId: peerId, filter: .banned))
|
||||
|> map { restricted, banned -> [RenderedChannelParticipant] in
|
||||
var result: [RenderedChannelParticipant] = []
|
||||
|> map { restricted, banned in
|
||||
var r: [RenderedChannelParticipant] = []
|
||||
var b: [RenderedChannelParticipant] = []
|
||||
var peerIds = Set<PeerId>()
|
||||
for participant in restricted {
|
||||
if !peerIds.contains(participant.peer.id) {
|
||||
peerIds.insert(participant.peer.id)
|
||||
result.append(participant)
|
||||
r.append(participant)
|
||||
}
|
||||
}
|
||||
for participant in banned {
|
||||
if !peerIds.contains(participant.peer.id) {
|
||||
peerIds.insert(participant.peer.id)
|
||||
result.append(participant)
|
||||
b.append(participant)
|
||||
}
|
||||
}
|
||||
return result
|
||||
return ChannelBlacklist(banned: b, restricted: r)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ public func channelMembers(account: Account, peerId: PeerId, filter: ChannelMemb
|
||||
|
||||
for participant in CachedChannelParticipants(apiParticipants: participants).participants {
|
||||
if let peer = peers[participant.peerId] {
|
||||
items.append(RenderedChannelParticipant(participant: participant, peer: peer, status: status[peer.id]))
|
||||
items.append(RenderedChannelParticipant(participant: participant, peer: peer, presence: status[peer.id]))
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,23 +12,24 @@ import Foundation
|
||||
public struct RenderedChannelParticipant: Equatable {
|
||||
public let participant: ChannelParticipant
|
||||
public let peer: Peer
|
||||
public let status: PeerPresence?
|
||||
public init(participant: ChannelParticipant, peer: Peer, status: PeerPresence? = nil) {
|
||||
public let presence: PeerPresence?
|
||||
public init(participant: ChannelParticipant, peer: Peer, presence: PeerPresence? = nil) {
|
||||
self.participant = participant
|
||||
self.peer = peer
|
||||
self.status = status
|
||||
self.presence = presence
|
||||
}
|
||||
|
||||
public static func ==(lhs: RenderedChannelParticipant, rhs: RenderedChannelParticipant) -> Bool {
|
||||
if let lhsStatus = lhs.status, let rhsStatus = rhs.status {
|
||||
if let lhsStatus = lhs.presence, let rhsStatus = rhs.presence {
|
||||
if !lhsStatus.isEqual(to: rhsStatus) {
|
||||
return false
|
||||
}
|
||||
} else if (lhs.status != nil) != (rhs.status != nil) {
|
||||
} else if (lhs.presence != nil) != (rhs.presence != nil) {
|
||||
return false
|
||||
}
|
||||
return lhs.participant == rhs.participant && lhs.peer.isEqual(rhs.peer)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func updateChannelParticipantsSummary(account: Account, peerId: PeerId) -> Signal<Void, NoError> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user