1
0
mirror of git://jb55.com/damus synced 2024-09-16 02:03:45 +00:00

Fix nostr: mention prefix bugs

The zero-width space was causing parsing issues. Not sure why we need
this so I just removed it.

Changelog-Fixed: Fix nostr:nostr:... bugs
This commit is contained in:
William Casarin 2023-07-14 17:26:19 -07:00
parent 72a060c7b3
commit 139be9eef2
3 changed files with 25 additions and 22 deletions

View File

@ -570,16 +570,12 @@ func build_post(post: NSMutableAttributedString, action: PostAction, uploadedMed
// Add zero-width space in case text preceding the mention is not a whitespace.
// In the case where the character preceding the mention is a whitespace, the added zero-width space will be stripped out.
post.replaceCharacters(in: range, with: "\u{200B}\(normalized_link)\u{200B}")
post.replaceCharacters(in: range, with: "\(normalized_link)")
}
}
var content = post.string
// If two zero-width spaces are next to each other, normalize it to just one zero-width space.
.replacingOccurrences(of: "\u{200B}\u{200B}", with: "\u{200B}")
// If zero-width space is next to an actual whitespace, remove the zero-width space.
.replacingOccurrences(of: " \u{200B}", with: " ")
.replacingOccurrences(of: "\u{200B} ", with: " ")
.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
let imagesString = uploadedMedias.map { $0.uploadedURL.absoluteString }.joined(separator: " ")

View File

@ -34,8 +34,11 @@ struct UserSearch: View {
guard let pk = bech32_pubkey(user.pubkey) else {
return
}
let tagAttributedString = user_tag_attr_string(profile: user.profile, pubkey: pk)
appendUserTag(withTag: tagAttributedString)
let user_tag = user_tag_attr_string(profile: user.profile, pubkey: pk)
user_tag.append(.init(string: " "))
appendUserTag(withTag: user_tag)
}
private func appendUserTag(withTag tagAttributedString: NSMutableAttributedString) {
@ -97,14 +100,12 @@ struct UserSearch_Previews: PreviewProvider {
func user_tag_attr_string(profile: Profile?, pubkey: String) -> NSMutableAttributedString {
let display_name = Profile.displayName(profile: profile, pubkey: pubkey)
let name = display_name.username.truncate(maxLength: 50)
let tagString = "@\(name)\u{200B} "
let tagString = "@\(name)"
let tagAttributedString = NSMutableAttributedString(string: tagString,
attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18.0),
NSAttributedString.Key.link: "nostr:\(pubkey)"])
tagAttributedString.removeAttribute(.link, range: NSRange(location: tagAttributedString.length - 2, length: 2))
tagAttributedString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.label], range: NSRange(location: tagAttributedString.length - 2, length: 2))
return tagAttributedString
return NSMutableAttributedString(string: tagString, attributes: [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18.0),
NSAttributedString.Key.foregroundColor: UIColor.label,
NSAttributedString.Key.link: "damus:nostr:\(pubkey)"
])
}

View File

@ -136,15 +136,21 @@ class ReplyTests: XCTestCase {
guard let hex_pk = bech32_pubkey_decode(pk) else {
return
}
let content = """
@\(pk)
@\(pk)
"""
let blocks = parse_mentions(content: content, tags: []).blocks
let profile = Profile(name: "jb55", display_name: "Will", about: nil, picture: nil, banner: nil, website: nil, lud06: nil, lud16: nil, nip05: nil, damus_donation: nil)
let post = user_tag_attr_string(profile: profile, pubkey: pk)
post.append(.init(string: "\n"))
post.append(user_tag_attr_string(profile: profile, pubkey: pk))
post.append(.init(string: "\n"))
let post_note = build_post(post: post, action: .posting(.none), uploadedMedias: [], references: [.p(hex_pk)])
let rendered = render_blocks(blocks: blocks)
let expected_render = "nostr:\(pk)\nnostr:\(pk)"
XCTAssertEqual(post_note.content, expected_render)
let blocks = parse_mentions(content: post_note.content, tags: []).blocks
let rendered = render_blocks(blocks: blocks)
XCTAssertEqual(rendered, expected_render)