Emoji in chat folders

This commit is contained in:
Isaac
2024-12-25 00:17:19 +08:00
parent 1d28e11879
commit 4bed1703a2
59 changed files with 962 additions and 389 deletions

View File

@@ -62,7 +62,7 @@ private enum InviteLinksListEntry: ItemListNodeEntry {
case peer(EnginePeer.Id)
}
case header(String)
case header(NSAttributedString)
case mainLinkHeader(String)
case mainLink(link: ExportedChatFolderLink?, isGenerating: Bool)
@@ -225,13 +225,13 @@ private enum InviteLinksListEntry: ItemListNodeEntry {
private func folderInviteLinkListControllerEntries(
presentationData: PresentationData,
state: FolderInviteLinkListControllerState,
title: String,
title: ChatFolderTitle,
allPeers: [EnginePeer]
) -> [InviteLinksListEntry] {
var entries: [InviteLinksListEntry] = []
var infoString: String?
let chatCountString: String
let chatCountString: NSAttributedString
let peersHeaderString: String
let canShareChats = !allPeers.allSatisfy({ !canShareLinkToPeer(peer: $0) })
@@ -241,16 +241,36 @@ private func folderInviteLinkListControllerEntries(
if !canShareChats {
infoString = presentationData.strings.FolderLinkScreen_TitleDescriptionUnavailable
chatCountString = presentationData.strings.FolderLinkScreen_ChatCountHeaderUnavailable
chatCountString = NSAttributedString(string: presentationData.strings.FolderLinkScreen_ChatCountHeaderUnavailable)
peersHeaderString = presentationData.strings.FolderLinkScreen_ChatsSectionHeaderUnavailable
} else if state.selectedPeerIds.isEmpty {
chatCountString = presentationData.strings.FolderLinkScreen_TitleDescriptionDeselected(title).string
let chatCountStringValue = NSMutableAttributedString(string: presentationData.strings.FolderLinkScreen_TitleDescriptionDeselectedV2)
let folderRange = (chatCountStringValue.string as NSString).range(of: "{folder}")
if folderRange.location != NSNotFound {
chatCountStringValue.replaceCharacters(in: folderRange, with: "")
chatCountStringValue.insert(title.rawAttributedString, at: folderRange.location)
}
chatCountString = chatCountStringValue
peersHeaderString = presentationData.strings.FolderLinkScreen_ChatsSectionHeader
if allPeers.count > 1 {
selectAllString = allSelected ? presentationData.strings.FolderLinkScreen_ChatsSectionHeaderActionDeselectAll : presentationData.strings.FolderLinkScreen_ChatsSectionHeaderActionSelectAll
}
} else {
chatCountString = presentationData.strings.FolderLinkScreen_TitleDescriptionSelected(title, presentationData.strings.FolderLinkScreen_TitleDescriptionSelectedCount(Int32(state.selectedPeerIds.count))).string
let chatCountStringValue = NSMutableAttributedString(string: presentationData.strings.FolderLinkScreen_TitleDescriptionSelectedV2)
let folderRange = (chatCountStringValue.string as NSString).range(of: "{folder}")
if folderRange.location != NSNotFound {
chatCountStringValue.replaceCharacters(in: folderRange, with: "")
chatCountStringValue.insert(title.rawAttributedString, at: folderRange.location)
}
let chatsRange = (chatCountStringValue.string as NSString).range(of: "{chats}")
if chatsRange.location != NSNotFound {
chatCountStringValue.replaceCharacters(in: chatsRange, with: "")
let countValue = presentationData.strings.FolderLinkScreen_TitleDescriptionSelectedCount(Int32(state.selectedPeerIds.count))
chatCountStringValue.insert(NSAttributedString(string: countValue), at: chatsRange.location)
}
chatCountString = chatCountStringValue
peersHeaderString = presentationData.strings.FolderLinkScreen_ChatsSectionHeaderSelected(Int32(state.selectedPeerIds.count))
if allPeers.count > 1 {
selectAllString = allSelected ? presentationData.strings.FolderLinkScreen_ChatsSectionHeaderActionDeselectAll : presentationData.strings.FolderLinkScreen_ChatsSectionHeaderActionSelectAll
@@ -699,11 +719,10 @@ public func folderInviteLinkListController(context: AccountContext, updatedPrese
}
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: title, leftNavigationButton: nil, rightNavigationButton: doneButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true)
//TODO:release
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: folderInviteLinkListControllerEntries(
presentationData: presentationData,
state: state,
title: filterTitle.text,
title: filterTitle,
allPeers: allPeers
), style: .blocks, emptyStateItem: nil, crossfadeState: crossfade, animateChanges: animateChanges)