Folder improvements

This commit is contained in:
Ali 2023-03-30 18:15:46 +04:00
parent 705651e028
commit 0e3fbeb08b
4 changed files with 113 additions and 64 deletions

View File

@ -2751,53 +2751,69 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
} }
if case let .filter(_, title, _, data) = filter, data.isShared { if case let .filter(_, title, _, data) = filter, data.isShared {
let _ = (self.context.engine.data.get( let _ = (combineLatest(
EngineDataList(data.includePeers.peers.map(TelegramEngine.EngineData.Item.Peer.Peer.init(id:))) self.context.engine.data.get(
EngineDataList(data.includePeers.peers.map(TelegramEngine.EngineData.Item.Peer.Peer.init(id:)))
),
self.context.engine.peers.getExportedChatFolderLinks(id: id)
) )
|> deliverOnMainQueue).start(next: { [weak self] peers in |> deliverOnMainQueue).start(next: { [weak self] peers, links in
guard let self else { guard let self else {
return return
} }
let presentationData = self.presentationData let presentationData = self.presentationData
//TODO:localize var hasLinks = false
self.present(standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: "Delete Folder", text: "Are you sure you want to delete this folder? This will also deactivate all the invite links used to share this folder.", actions: [ if let links, !links.isEmpty {
TextAlertAction(type: .destructiveAction, title: presentationData.strings.Common_Delete, action: { [weak self] in hasLinks = true
guard let self else { }
return
} let confirmDeleteFolder: () -> Void = { [weak self] in
guard let self else {
let previewScreen = ChatFolderLinkPreviewScreen( return
context: self.context, }
subject: .remove(folderId: id),
contents: ChatFolderLinkContents( let previewScreen = ChatFolderLinkPreviewScreen(
localFilterId: id, context: self.context,
title: title, subject: .remove(folderId: id),
peers: peers.compactMap { $0 }.filter { peer in contents: ChatFolderLinkContents(
if case .channel = peer { localFilterId: id,
return true title: title,
} else { peers: peers.compactMap { $0 }.filter { peer in
return false if case .channel = peer {
} return true
}, } else {
alreadyMemberPeerIds: Set() return false
),
completion: { [weak self] in
guard let self else {
return
}
if self.chatListDisplayNode.mainContainerNode.currentItemNode.chatListFilter?.id == id {
self.chatListDisplayNode.mainContainerNode.switchToFilter(id: .all, completion: {
})
} }
},
alreadyMemberPeerIds: Set()
),
completion: { [weak self] in
guard let self else {
return
} }
) if self.chatListDisplayNode.mainContainerNode.currentItemNode.chatListFilter?.id == id {
self.push(previewScreen) self.chatListDisplayNode.mainContainerNode.switchToFilter(id: .all, completion: {
}), })
TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: { }
}) }
]), in: .window(.root)) )
self.push(previewScreen)
}
if hasLinks {
//TODO:localize
self.present(standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: "Delete Folder", text: "Are you sure you want to delete this folder? This will also deactivate all the invite links used to share this folder.", actions: [
TextAlertAction(type: .destructiveAction, title: presentationData.strings.Common_Delete, action: {
confirmDeleteFolder()
}),
TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {
})
]), in: .window(.root))
} else {
confirmDeleteFolder()
}
}) })
} else { } else {
let actionSheet = ActionSheetController(presentationData: self.presentationData) let actionSheet = ActionSheetController(presentationData: self.presentationData)

View File

@ -391,36 +391,52 @@ public func chatListFilterPresetListController(context: AccountContext, mode: Ch
let presentationData = context.sharedContext.currentPresentationData.with { $0 } let presentationData = context.sharedContext.currentPresentationData.with { $0 }
if case let .filter(_, title, _, data) = filter, data.isShared { if case let .filter(_, title, _, data) = filter, data.isShared {
let _ = (context.engine.data.get( let _ = (combineLatest(
EngineDataList(data.includePeers.peers.map(TelegramEngine.EngineData.Item.Peer.Peer.init(id:))) context.engine.data.get(
EngineDataList(data.includePeers.peers.map(TelegramEngine.EngineData.Item.Peer.Peer.init(id:)))
),
context.engine.peers.getExportedChatFolderLinks(id: id)
) )
|> deliverOnMainQueue).start(next: { peers in |> deliverOnMainQueue).start(next: { peers, links in
let presentationData = context.sharedContext.currentPresentationData.with { $0 } let presentationData = context.sharedContext.currentPresentationData.with { $0 }
//TODO:localize var hasLinks = false
presentControllerImpl?(standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: "Delete Folder", text: "Are you sure you want to delete this folder? This will also deactivate all the invite links used to share this folder.", actions: [ if let links, !links.isEmpty {
TextAlertAction(type: .destructiveAction, title: presentationData.strings.Common_Delete, action: { hasLinks = true
let previewScreen = ChatFolderLinkPreviewScreen( }
context: context,
subject: .remove(folderId: id), let confirmDeleteFolder: () -> Void = {
contents: ChatFolderLinkContents( let previewScreen = ChatFolderLinkPreviewScreen(
localFilterId: id, context: context,
title: title, subject: .remove(folderId: id),
peers: peers.compactMap { $0 }.filter { peer in contents: ChatFolderLinkContents(
if case .channel = peer { localFilterId: id,
return true title: title,
} else { peers: peers.compactMap { $0 }.filter { peer in
return false if case .channel = peer {
} return true
}, } else {
alreadyMemberPeerIds: Set() return false
) }
},
alreadyMemberPeerIds: Set()
) )
pushControllerImpl?(previewScreen) )
}), pushControllerImpl?(previewScreen)
TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: { }
})
])) if hasLinks {
//TODO:localize
presentControllerImpl?(standardTextAlertController(theme: AlertControllerTheme(presentationData: presentationData), title: "Delete Folder", text: "Are you sure you want to delete this folder? This will also deactivate all the invite links used to share this folder.", actions: [
TextAlertAction(type: .destructiveAction, title: presentationData.strings.Common_Delete, action: {
confirmDeleteFolder()
}),
TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {
})
]))
} else {
confirmDeleteFolder()
}
}) })
} else { } else {
let actionSheet = ActionSheetController(presentationData: presentationData) let actionSheet = ActionSheetController(presentationData: presentationData)

View File

@ -840,6 +840,9 @@ public final class SolidRoundedButtonNode: ASDisplayNode {
self.subtitleNode.alpha = 0.0 self.subtitleNode.alpha = 0.0
self.subtitleNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2) self.subtitleNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2)
self.badgeNode?.alpha = 0.0
self.badgeNode?.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2)
self.shimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) self.shimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false)
self.borderShimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) self.borderShimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false)
} }
@ -873,6 +876,9 @@ public final class SolidRoundedButtonNode: ASDisplayNode {
self.subtitleNode.alpha = 1.0 self.subtitleNode.alpha = 1.0
self.subtitleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.subtitleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.badgeNode?.alpha = 1.0
self.badgeNode?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.shimmerView?.layer.removeAllAnimations() self.shimmerView?.layer.removeAllAnimations()
self.shimmerView?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.shimmerView?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.borderShimmerView?.layer.removeAllAnimations() self.borderShimmerView?.layer.removeAllAnimations()
@ -1282,6 +1288,9 @@ public final class SolidRoundedButtonView: UIView {
self.subtitleNode.alpha = 0.0 self.subtitleNode.alpha = 0.0
self.subtitleNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2) self.subtitleNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2)
self.badgeNode?.alpha = 0.0
self.badgeNode?.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2)
self.shimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) self.shimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false)
self.borderShimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) self.borderShimmerView?.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false)
} }
@ -1315,6 +1324,9 @@ public final class SolidRoundedButtonView: UIView {
self.subtitleNode.alpha = 1.0 self.subtitleNode.alpha = 1.0
self.subtitleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.subtitleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.badgeNode?.alpha = 1.0
self.badgeNode?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.shimmerView?.layer.removeAllAnimations() self.shimmerView?.layer.removeAllAnimations()
self.shimmerView?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.shimmerView?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.borderShimmerView?.layer.removeAllAnimations() self.borderShimmerView?.layer.removeAllAnimations()
@ -1475,6 +1487,7 @@ public final class SolidRoundedButtonView: UIView {
badgeNode = current badgeNode = current
} else { } else {
badgeNode = BadgeNode(fillColor: self.theme.foregroundColor, strokeColor: .clear, textColor: self.theme.backgroundColor) badgeNode = BadgeNode(fillColor: self.theme.foregroundColor, strokeColor: .clear, textColor: self.theme.backgroundColor)
badgeNode.alpha = self.titleNode.alpha
self.badgeNode = badgeNode self.badgeNode = badgeNode
self.addSubnode(badgeNode) self.addSubnode(badgeNode)
} }

View File

@ -12,6 +12,10 @@ public func canShareLinkToPeer(peer: EnginePeer) -> Bool {
} else if channel.username != nil { } else if channel.username != nil {
isEnabled = true isEnabled = true
} }
case let .legacyGroup(group):
if !group.hasBannedPermission(.banAddMembers) {
isEnabled = true
}
default: default:
break break
} }