no message

This commit is contained in:
overtake 2018-09-21 18:25:03 +01:00
parent 26a8b5e72f
commit 91a7d1271a
3 changed files with 45 additions and 25 deletions

View File

@ -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()

View File

@ -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()
})) }))
})) }))

View File

@ -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())
} }
} }