damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit dcd7b5b1116334605d98636428ed2e30cb2f8b9f
parent a721256e9b49559504c95f6c96398edd0d342bab
Author: William Casarin <jb55@jb55.com>
Date:   Tue,  7 May 2024 14:05:43 -0700

nip10: fix mixed nip10 markers

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mdamus/ContentParsing.swift | 6++++--
MdamusTests/NIP10Tests.swift | 30++++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/damus/ContentParsing.swift b/damus/ContentParsing.swift @@ -79,19 +79,21 @@ func interp_event_refs_without_mentions_ndb(_ ev_tags: References<NoteRef>) -> [ var evrefs: [EventRef] = [] var first: Bool = true var root_id: NoteRef? = nil + var any_marker: Bool = false for ref in ev_tags { if let marker = ref.marker { + any_marker = true switch marker { case .root: root_id = ref case .reply: evrefs.append(.reply(ref)) case .mention: evrefs.append(.mention(.noteref(ref))) } } else { - if first { + if !any_marker && first { root_id = ref first = false - } else { + } else if !any_marker { evrefs.append(.reply(ref)) } } diff --git a/damusTests/NIP10Tests.swift b/damusTests/NIP10Tests.swift @@ -129,6 +129,36 @@ final class NIP10Tests: XCTestCase { }), [root_note_id]) } + func test_mixed_nip10() { + let root_note_id_hex = "27e71cf53299dafb5dc7bcc0a078357418a4375cb1097bf5184662493f79a627" + let reply_hex = "1a616998552cf76e9786f76ac68f6104cdae46377330735c68bfe0b9426d2fa8" + + let tags = [ + [ "e", root_note_id_hex, "", "root" ], + [ "e", "f99046bd87be7508d55e139de48517c06ef90830d77a5d3213df858d77bb2f8f" ], + [ "e", reply_hex, "", "reply" ], + [ "p", "3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681" ], + [ "p", "8ea485266b2285463b13bf835907161c22bb3da1e652b443db14f9cee6720a43" ], + [ "p", "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245" ] + ] + + + let root_note_id = NoteId(hex: root_note_id_hex)! + let reply_id = NoteId(hex: reply_hex)! + + let note = NdbNote(content: "hi", keypair: test_keypair, kind: 1, tags: tags)! + let refs = interp_event_refs_without_mentions_ndb(note.referenced_noterefs) + + XCTAssertEqual(refs.reduce(into: Array<NoteId>(), { xs, r in + if let note_id = r.is_thread_id?.note_id { xs.append(note_id) } + }), [root_note_id]) + + XCTAssertEqual(refs.reduce(into: Array<NoteId>(), { xs, r in + if let note_id = r.is_reply?.note_id { xs.append(note_id) } + }), [reply_id]) + + } + func test_deprecated_nip10() { let root_note_id_hex = "7c7d37bc8c04d2ec65cbc7d9275253e6b5cc34b5d10439f158194a3feefa8d52" let direct_reply_hex = "7c7d37bc8c04d2ec65cbc7d9275253e6b5cc34b5d10439f158194a3feefa8d51"