nip19: add naddr link support
Add functionality for when user taps on naddr link they get redirected to the proper note. Closes: https://github.com/damus-io/damus/issues/1806 Changelog-Added: Add naddr link support Lightning-url: LNURL1DP68GURN8GHJ7EM9W3SKCCNE9E3K7MF0D3H82UNVWQHKWUN9V4HXGCTHDC6RZVGR8SW3G Signed-off-by: kernelkind <kernelkind@gmail.com> Reviewed-by: William Casarin <jb55@jb55.com> Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
committed by
William Casarin
parent
3056ab9bfb
commit
a4a0465605
@@ -941,6 +941,34 @@ func find_event_with_subid(state: DamusState, query query_: FindEvent, subid: St
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func naddrLookup(damus_state: DamusState, naddr: NAddr, callback: @escaping (NostrEvent?) -> ()) {
|
||||||
|
var nostrKinds: [NostrKind]? = NostrKind(rawValue: naddr.kind).map { [$0] }
|
||||||
|
|
||||||
|
let filter = NostrFilter(kinds: nostrKinds, authors: [naddr.author])
|
||||||
|
|
||||||
|
let subid = UUID().description
|
||||||
|
|
||||||
|
damus_state.pool.subscribe_to(sub_id: subid, filters: [filter], to: nil) { relay_id, res in
|
||||||
|
guard case .nostr_event(let ev) = res else {
|
||||||
|
damus_state.pool.unsubscribe(sub_id: subid, to: [relay_id])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if case .event(_, let ev) = ev {
|
||||||
|
for tag in ev.tags {
|
||||||
|
if(tag.count >= 2 && tag[0].string() == "d"){
|
||||||
|
if (tag[1].string() == naddr.identifier){
|
||||||
|
damus_state.pool.unsubscribe(sub_id: subid, to: [relay_id])
|
||||||
|
callback(ev)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
damus_state.pool.unsubscribe(sub_id: subid, to: [relay_id])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func timeline_name(_ timeline: Timeline?) -> String {
|
func timeline_name(_ timeline: Timeline?) -> String {
|
||||||
guard let timeline else {
|
guard let timeline else {
|
||||||
return ""
|
return ""
|
||||||
@@ -1093,7 +1121,10 @@ func on_open_url(state: DamusState, url: URL, result: @escaping (OpenResult?) ->
|
|||||||
// doesn't really make sense here
|
// doesn't really make sense here
|
||||||
break
|
break
|
||||||
case .naddr(let naddr):
|
case .naddr(let naddr):
|
||||||
break // TODO: fix
|
naddrLookup(damus_state: state, naddr: naddr) { res in
|
||||||
|
guard let res = res else { return }
|
||||||
|
result(.event(res))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case .filter(let filt):
|
case .filter(let filt):
|
||||||
result(.filter(filt))
|
result(.filter(filt))
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ func decode_nostr_bech32_uri(_ s: String) -> NostrLink? {
|
|||||||
case .nscript(let data):
|
case .nscript(let data):
|
||||||
return .script(data)
|
return .script(data)
|
||||||
case .naddr(let naddr):
|
case .naddr(let naddr):
|
||||||
return .none // TODO: FIX
|
return .ref(.naddr(naddr))
|
||||||
case .nevent(let nevent):
|
case .nevent(let nevent):
|
||||||
return .ref(.event(nevent.noteid))
|
return .ref(.event(nevent.noteid))
|
||||||
case .nprofile(let nprofile):
|
case .nprofile(let nprofile):
|
||||||
|
|||||||
Reference in New Issue
Block a user