Fix custom emoji not being stripped from usernames in VoiceOver labels

This commit is contained in:
Shadowfacts 2022-12-06 22:26:08 -05:00
parent a79b3cfd70
commit cde061c77a
5 changed files with 27 additions and 15 deletions

View File

@ -20,18 +20,30 @@ extension AccountMO {
}
var displayNameWithoutCustomEmoji: String {
if displayName.isEmpty {
let stripped = stripCustomEmoji(from: displayName)
if stripped.isEmpty {
return username
} else {
return stripCustomEmoji(from: displayName)
return stripped
}
}
private static let customEmojiRegex = try! NSRegularExpression(pattern: ":[a-zA-Z0-9_]+:", options: [])
private func stripCustomEmoji(from string: String) -> String {
let range = NSRange(location: 0, length: string.utf16.count)
return AccountMO.customEmojiRegex.stringByReplacingMatches(in: string, options: [], range: range, withTemplate: "")
}
}
extension Account {
var displayNameWithoutCustomEmoji: String {
let stripped = stripCustomEmoji(from: displayName)
if stripped.isEmpty {
return username
} else {
return stripped
}
}
}
private let customEmojiRegex = try! NSRegularExpression(pattern: ":[a-zA-Z0-9_]+:", options: [])
private func stripCustomEmoji(from string: String) -> String {
let range = NSRange(location: 0, length: string.utf16.count)
return customEmojiRegex.stringByReplacingMatches(in: string, options: [], range: range, withTemplate: "")
}

View File

@ -135,7 +135,7 @@ class FeaturedProfileCollectionViewCell: UICollectionViewCell {
guard let account else {
return nil
}
let s = NSMutableAttributedString(string: "\(account.displayName), ")
let s = NSMutableAttributedString(string: "\(account.displayNameWithoutCustomEmoji), ")
s.append(noteTextView.attributedText)
return s
}

View File

@ -94,7 +94,7 @@ class AccountCollectionViewCell: UICollectionViewListCell {
let account = mastodonController.persistentContainer.account(for: accountID) else {
return nil
}
var str = AttributedString(account.displayOrUserName)
var str = AttributedString(account.displayNameWithoutCustomEmoji)
str += ", @"
str += AttributedString(account.acct)
return NSAttributedString(str)

View File

@ -372,9 +372,9 @@ class TimelineStatusCollectionViewCell: UICollectionViewListCell, StatusCollecti
var str: AttributedString = ""
if let rebloggerID,
let reblogger = mastodonController.persistentContainer.account(for: rebloggerID) {
str += AttributedString("Reblogged by \(reblogger.displayOrUserName): ")
str += AttributedString("Reblogged by \(reblogger.displayNameWithoutCustomEmoji): ")
}
str += AttributedString(status.account.displayOrUserName)
str += AttributedString(status.account.displayNameWithoutCustomEmoji)
str += ", "
if statusState.collapsed ?? false {
if !status.spoilerText.isEmpty {

View File

@ -257,9 +257,9 @@ class TimelineStatusTableViewCell: BaseStatusTableViewCell {
var str: AttributedString = ""
if let rebloggerID,
let reblogger = mastodonController.persistentContainer.account(for: rebloggerID) {
str += AttributedString("Reblogged by \(reblogger.displayOrUserName): ")
str += AttributedString("Reblogged by \(reblogger.displayNameWithoutCustomEmoji): ")
}
str += AttributedString(status.account.displayOrUserName)
str += AttributedString(status.account.displayNameWithoutCustomEmoji)
str += ", "
if statusState.collapsed ?? false {
if !status.spoilerText.isEmpty {