Compare commits

...

2 Commits

5 changed files with 67 additions and 29 deletions

View File

@ -20,18 +20,30 @@ extension AccountMO {
} }
var displayNameWithoutCustomEmoji: String { var displayNameWithoutCustomEmoji: String {
if displayName.isEmpty { let stripped = stripCustomEmoji(from: displayName)
if stripped.isEmpty {
return username return username
} else { } 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 { extension Account {
let range = NSRange(location: 0, length: string.utf16.count) var displayNameWithoutCustomEmoji: String {
return AccountMO.customEmojiRegex.stringByReplacingMatches(in: string, options: [], range: range, withTemplate: "") 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 { guard let account else {
return nil return nil
} }
let s = NSMutableAttributedString(string: "\(account.displayName), ") let s = NSMutableAttributedString(string: "\(account.displayNameWithoutCustomEmoji), ")
s.append(noteTextView.attributedText) s.append(noteTextView.attributedText)
return s return s
} }

View File

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

View File

@ -372,9 +372,9 @@ class TimelineStatusCollectionViewCell: UICollectionViewListCell, StatusCollecti
var str: AttributedString = "" var str: AttributedString = ""
if let rebloggerID, if let rebloggerID,
let reblogger = mastodonController.persistentContainer.account(for: 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 += ", " str += ", "
if statusState.collapsed ?? false { if statusState.collapsed ?? false {
if !status.spoilerText.isEmpty { if !status.spoilerText.isEmpty {
@ -386,15 +386,28 @@ class TimelineStatusCollectionViewCell: UICollectionViewListCell, StatusCollecti
str += AttributedString(contentTextView.attributedText) str += AttributedString(contentTextView.attributedText)
if status.attachments.count > 0 { if status.attachments.count > 0 {
if status.attachments.count == 1 { let includeDescriptions: Bool
let attachment = status.attachments[0] switch Preferences.shared.attachmentBlurMode {
let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description" case .useStatusSetting:
str += AttributedString(", attachment: \(desc)") includeDescriptions = !Preferences.shared.blurMediaBehindContentWarning || status.spoilerText.isEmpty
} else { case .always:
for (index, attachment) in status.attachments.enumerated() { includeDescriptions = true
case .never:
includeDescriptions = false
}
if includeDescriptions {
if status.attachments.count == 1 {
let attachment = status.attachments[0]
let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description" let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description"
str += AttributedString(", attachment \(index + 1): \(desc)") str += AttributedString(", attachment: \(desc)")
} else {
for (index, attachment) in status.attachments.enumerated() {
let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description"
str += AttributedString(", attachment \(index + 1): \(desc)")
}
} }
} else {
str += AttributedString(", \(status.attachments.count) attachment\(status.attachments.count == 1 ? "" : "s")")
} }
} }
if status.poll != nil { if status.poll != nil {

View File

@ -257,9 +257,9 @@ class TimelineStatusTableViewCell: BaseStatusTableViewCell {
var str: AttributedString = "" var str: AttributedString = ""
if let rebloggerID, if let rebloggerID,
let reblogger = mastodonController.persistentContainer.account(for: 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 += ", " str += ", "
if statusState.collapsed ?? false { if statusState.collapsed ?? false {
if !status.spoilerText.isEmpty { if !status.spoilerText.isEmpty {
@ -271,15 +271,28 @@ class TimelineStatusTableViewCell: BaseStatusTableViewCell {
str += AttributedString(contentTextView.attributedText) str += AttributedString(contentTextView.attributedText)
if status.attachments.count > 0 { if status.attachments.count > 0 {
if status.attachments.count == 1 { let includeDescriptions: Bool
let attachment = status.attachments[0] switch Preferences.shared.attachmentBlurMode {
let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description" case .useStatusSetting:
str += AttributedString(", attachment: \(desc)") includeDescriptions = !Preferences.shared.blurMediaBehindContentWarning || status.spoilerText.isEmpty
} else { case .always:
for (index, attachment) in status.attachments.enumerated() { includeDescriptions = true
case .never:
includeDescriptions = false
}
if includeDescriptions {
if status.attachments.count == 1 {
let attachment = status.attachments[0]
let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description" let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description"
str += AttributedString(", attachment \(index + 1): \(desc)") str += AttributedString(", attachment: \(desc)")
} else {
for (index, attachment) in status.attachments.enumerated() {
let desc = attachment.description?.isEmpty == false ? attachment.description! : "no description"
str += AttributedString(", attachment \(index + 1): \(desc)")
}
} }
} else {
str += AttributedString(", \(status.attachments.count) attachment\(status.attachments.count == 1 ? "" : "s")")
} }
} }
if status.poll != nil { if status.poll != nil {