mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-16 19:30:29 +00:00
no message
This commit is contained in:
parent
26a8b5e72f
commit
91a7d1271a
@ -320,11 +320,13 @@ public func channelMembersController(account: Account, peerId: PeerId) -> ViewCo
|
|||||||
|
|
||||||
let arguments = ChannelMembersControllerArguments(account: account, addMember: {
|
let arguments = ChannelMembersControllerArguments(account: account, addMember: {
|
||||||
|
|
||||||
|
let presentationData = account.telegramApplicationContext.currentPresentationData.with {$0}
|
||||||
|
|
||||||
actionsDisposable.add((peersPromise.get() |> take(1) |> deliverOnMainQueue).start(next: { members in
|
actionsDisposable.add((peersPromise.get() |> take(1) |> deliverOnMainQueue).start(next: { members in
|
||||||
let disabledIds = members?.compactMap({$0.peer.id}) ?? []
|
let disabledIds = members?.compactMap({$0.peer.id}) ?? []
|
||||||
let contactsController = ContactMultiselectionController(account: account, mode: .peerSelection, options: [], filters: [.excludeSelf, .disable(disabledIds)])
|
let contactsController = ContactMultiselectionController(account: account, mode: .peerSelection, options: [], filters: [.excludeSelf, .disable(disabledIds)])
|
||||||
|
|
||||||
let addMembers: ([ContactListPeerId]) -> Signal<Void, NoError> = { members -> Signal<Void, NoError> in
|
let addMembers: ([ContactListPeerId]) -> Signal<Void, AddChannelMemberError> = { members -> Signal<Void, AddChannelMemberError> in
|
||||||
let peerIds = members.compactMap { contact -> PeerId? in
|
let peerIds = members.compactMap { contact -> PeerId? in
|
||||||
switch contact {
|
switch contact {
|
||||||
case let .peer(peerId):
|
case let .peer(peerId):
|
||||||
@ -340,7 +342,9 @@ public func channelMembersController(account: Account, peerId: PeerId) -> ViewCo
|
|||||||
|> deliverOnMainQueue |> mapToSignal { [weak contactsController] contacts in
|
|> deliverOnMainQueue |> mapToSignal { [weak contactsController] contacts in
|
||||||
contactsController?.displayProgress = true
|
contactsController?.displayProgress = true
|
||||||
|
|
||||||
return addMembers(contacts) |> mapToSignal { _ in
|
return addMembers(contacts) |> `catch` { error -> Signal<Void, NoError> in
|
||||||
|
return .single(Void())
|
||||||
|
} |> mapToSignal { _ in
|
||||||
return channelMembers(postbox: account.postbox, network: account.network, peerId: peerId)
|
return channelMembers(postbox: account.postbox, network: account.network, peerId: peerId)
|
||||||
} |> deliverOnMainQueue |> afterNext { _ in
|
} |> deliverOnMainQueue |> afterNext { _ in
|
||||||
contactsController?.dismiss()
|
contactsController?.dismiss()
|
||||||
|
|||||||
@ -1456,7 +1456,7 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let addMembers: ([ContactListPeerId]) -> Signal<Void, NoError> = { members -> Signal<Void, NoError> in
|
let addMembers: ([ContactListPeerId]) -> Signal<Void, AddChannelMemberError> = { members -> Signal<Void, AddChannelMemberError> in
|
||||||
let memberIds = members.compactMap { contact -> PeerId? in
|
let memberIds = members.compactMap { contact -> PeerId? in
|
||||||
switch contact {
|
switch contact {
|
||||||
case let .peer(peerId):
|
case let .peer(peerId):
|
||||||
@ -1468,29 +1468,31 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl
|
|||||||
return account.postbox.multiplePeersView(memberIds)
|
return account.postbox.multiplePeersView(memberIds)
|
||||||
|> take(1)
|
|> take(1)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> mapToSignal { view -> Signal<Void, NoError> in
|
|> mapError { _ in return .generic}
|
||||||
updateState { state in
|
|> mapToSignal { view -> Signal<Void, AddChannelMemberError> in
|
||||||
var state = state
|
return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.addMembers(account: account, peerId: peerId, memberIds: memberIds) |> map { _ in
|
||||||
for (memberId, peer) in view.peers {
|
updateState { state in
|
||||||
var found = false
|
var state = state
|
||||||
for participant in state.temporaryParticipants {
|
for (memberId, peer) in view.peers {
|
||||||
if participant.peer.id == memberId {
|
var found = false
|
||||||
found = true
|
for participant in state.temporaryParticipants {
|
||||||
break
|
if participant.peer.id == memberId {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
let timestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970)
|
||||||
|
var temporaryParticipants = state.temporaryParticipants
|
||||||
|
temporaryParticipants.append(TemporaryParticipant(peer: peer, presence: view.presences[memberId], timestamp: timestamp))
|
||||||
|
state = state.withUpdatedTemporaryParticipants(temporaryParticipants)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !found {
|
|
||||||
let timestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970)
|
return state
|
||||||
var temporaryParticipants = state.temporaryParticipants
|
|
||||||
temporaryParticipants.append(TemporaryParticipant(peer: peer, presence: view.presences[memberId], timestamp: timestamp))
|
|
||||||
state = state.withUpdatedTemporaryParticipants(temporaryParticipants)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return state
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.addMembers(account: account, peerId: peerId, memberIds: memberIds)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1525,7 +1527,21 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl
|
|||||||
|
|
||||||
contactsController?.displayProgress = true
|
contactsController?.displayProgress = true
|
||||||
addMemberDisposable.set((addMembers(peers)
|
addMemberDisposable.set((addMembers(peers)
|
||||||
|> deliverOnMainQueue).start(completed: {
|
|> deliverOnMainQueue).start(error: { error in
|
||||||
|
if peers.count == 1, error == .restricted {
|
||||||
|
switch peers[0] {
|
||||||
|
case let .peer(peerId):
|
||||||
|
_ = (account.postbox.loadedPeerWithId(peerId) |> deliverOnMainQueue).start(next: { peer in
|
||||||
|
let alert = standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: presentationData.strings.Privacy_GroupsAndChannels_InviteToGroupError(peer.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {})])
|
||||||
|
presentControllerImpl?(alert, nil)
|
||||||
|
})
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contactsController?.dismiss()
|
||||||
|
},completed: {
|
||||||
contactsController?.dismiss()
|
contactsController?.dismiss()
|
||||||
}))
|
}))
|
||||||
}))
|
}))
|
||||||
|
|||||||
@ -175,7 +175,7 @@ final class PeerChannelMemberCategoriesContextsManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func addMembers(account: Account, peerId: PeerId, memberIds: [PeerId]) -> Signal<Void, NoError> {
|
func addMembers(account: Account, peerId: PeerId, memberIds: [PeerId]) -> Signal<Void, AddChannelMemberError> {
|
||||||
return addChannelMembers(account: account, peerId: peerId, memberIds: memberIds) |> deliverOnMainQueue
|
return addChannelMembers(account: account, peerId: peerId, memberIds: memberIds) |> deliverOnMainQueue
|
||||||
|> beforeNext { [weak self] result in
|
|> beforeNext { [weak self] result in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
@ -188,7 +188,7 @@ final class PeerChannelMemberCategoriesContextsManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|> mapToSignal { _ -> Signal<Void, NoError> in
|
|> mapToSignal { _ -> Signal<Void, AddChannelMemberError> in
|
||||||
return .single(Void())
|
return .single(Void())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user