Allow public links if private are not available

This commit is contained in:
Ali 2023-03-02 20:07:24 +04:00
parent abc6393487
commit 3a48235d13
5 changed files with 42 additions and 30 deletions

View File

@ -1009,7 +1009,7 @@ public func channelAdminController(context: AccountContext, updatedPresentationD
updateState { current in
return current.withUpdatedUpdating(true)
}
if case let .channel(channel) = channelPeer {
if let channelPeer, case let .channel(channel) = channelPeer {
updateRightsDisposable.set((context.engine.peers.addChannelMember(peerId: peerId, memberId: adminId)
|> deliverOnMainQueue).start(error: { error in
updateState { current in
@ -1017,7 +1017,7 @@ public func channelAdminController(context: AccountContext, updatedPresentationD
}
if let adminPeer {
let inviteScreen = SendInviteLinkScreen(context: context, link: exportedInvitation?.link, peers: [adminPeer])
let inviteScreen = SendInviteLinkScreen(context: context, peer: channelPeer, link: exportedInvitation?.link, peers: [adminPeer])
pushControllerImpl?(inviteScreen)
dismissImpl?()
@ -1206,8 +1206,8 @@ public func channelAdminController(context: AccountContext, updatedPresentationD
}
updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(engine: context.engine, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(rights: updateFlags), rank: updateRank) |> deliverOnMainQueue).start(error: { error in
if case let .addMemberError(addMemberError) = error, let admin = adminPeer {
if "".isEmpty {
let inviteScreen = SendInviteLinkScreen(context: context, link: exportedInvitation?.link, peers: [admin])
if let channelPeer {
let inviteScreen = SendInviteLinkScreen(context: context, peer: channelPeer, link: exportedInvitation?.link, peers: [admin])
pushControllerImpl?(inviteScreen)
dismissImpl?()

View File

@ -512,10 +512,11 @@ public func channelMembersController(context: AccountContext, updatedPresentatio
let arguments = ChannelMembersControllerArguments(context: context, addMember: {
actionsDisposable.add((combineLatest(
context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId)),
context.engine.data.get(TelegramEngine.EngineData.Item.Peer.ExportedInvitation(id: peerId)),
peersPromise.get() |> take(1)
)
|> deliverOnMainQueue).start(next: { exportedInvitation, members in
|> deliverOnMainQueue).start(next: { chatPeer, exportedInvitation, members in
let disabledIds = members?.compactMap({$0.peer.id}) ?? []
let contactsController = context.sharedContext.makeContactMultiselectionController(ContactMultiselectionControllerParams(context: context, updatedPresentationData: updatedPresentationData, mode: .peerSelection(searchChatList: false, searchGroups: false, searchChannels: false), options: [], filters: [.excludeSelf, .disable(disabledIds)]))
@ -547,7 +548,7 @@ public func channelMembersController(context: AccountContext, updatedPresentatio
if failedPeerIds.isEmpty {
contactsController?.dismiss()
} else {
if "".isEmpty {
if let chatPeer {
let _ = (context.engine.data.get(
EngineDataList(failedPeerIds.compactMap { item -> EnginePeer.Id? in
return item.0
@ -558,7 +559,7 @@ public func channelMembersController(context: AccountContext, updatedPresentatio
if !peers.isEmpty, let contactsController, let navigationController = contactsController.navigationController as? NavigationController {
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === contactsController }) {
let inviteScreen = SendInviteLinkScreen(context: context, link: exportedInvitation?.link, peers: peers)
let inviteScreen = SendInviteLinkScreen(context: context, peer: chatPeer, link: exportedInvitation?.link, peers: peers)
viewControllers.remove(at: index)
viewControllers.append(inviteScreen)
navigationController.setViewControllers(viewControllers, animated: true)

View File

@ -600,8 +600,14 @@ public class SendInviteLinkScreen: ViewControllerComponentContainer {
private var presenceDisposable: Disposable?
public init(context: AccountContext, link: String?, peers: [EnginePeer]) {
public init(context: AccountContext, peer: EnginePeer, link: String?, peers: [EnginePeer]) {
self.context = context
var link = link
if link == nil, let addressName = peer.addressName {
link = "https://t.me/\(addressName)"
}
self.link = link
self.peers = peers

View File

@ -781,27 +781,32 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId]
|> take(1)
|> timeout(1.0, queue: .mainQueue(), alternate: .single(nil))
|> deliverOnMainQueue).start(next: { [weak controller] exportedInvitation in
let _ = controller
let _ = exportedInvitation
if let exportedInvitation, let link = exportedInvitation.link {
let _ = (context.engine.data.get(
EngineDataList(result.failedToInvitePeerIds.map(TelegramEngine.EngineData.Item.Peer.Peer.init(id:)))
)
|> deliverOnMainQueue).start(next: { peerItems in
guard let controller else {
return
}
let _ = controller
let _ = peerItems
let peers = peerItems.compactMap { $0 }
if !peers.isEmpty {
let inviteScreen = SendInviteLinkScreen(context: context, link: link, peers: peers)
controller.push(inviteScreen)
}
})
}
let _ = (context.engine.data.get(
TelegramEngine.EngineData.Item.Peer.Peer(id: result.peerId)
)
|> deliverOnMainQueue).start(next: { peer in
let _ = controller
let _ = exportedInvitation
if let peer, let exportedInvitation, let link = exportedInvitation.link {
let _ = (context.engine.data.get(
EngineDataList(result.failedToInvitePeerIds.map(TelegramEngine.EngineData.Item.Peer.Peer.init(id:)))
)
|> deliverOnMainQueue).start(next: { peerItems in
guard let controller else {
return
}
let _ = controller
let _ = peerItems
let peers = peerItems.compactMap { $0 }
if !peers.isEmpty {
let inviteScreen = SendInviteLinkScreen(context: context, peer: peer, link: link, peers: peers)
controller.push(inviteScreen)
}
})
}
})
})
}
}

View File

@ -10782,7 +10782,7 @@ func presentAddMembersImpl(context: AccountContext, updatedPresentationData: (in
if !peers.isEmpty, let contactsController, let navigationController = contactsController.navigationController as? NavigationController {
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === contactsController }) {
let inviteScreen = SendInviteLinkScreen(context: context, link: exportedInvitation?.link, peers: peers)
let inviteScreen = SendInviteLinkScreen(context: context, peer: EnginePeer(groupPeer), link: exportedInvitation?.link, peers: peers)
viewControllers.remove(at: index)
viewControllers.append(inviteScreen)
navigationController.setViewControllers(viewControllers, animated: true)