@@ -8,60 +8,64 @@ use crate::dispatcher;
8
8
use crate :: note:: NoteRef ;
9
9
use crate :: { with_mut_damus, DamusRef } ;
10
10
11
- pub async fn setup_user_relays ( damusref : DamusRef ) {
12
- debug ! ( "do_setup_user_relays starting" ) ;
11
+ pub async fn track_user_relays ( damusref : DamusRef ) {
12
+ debug ! ( "track_user_relays starting" ) ;
13
13
14
- let filter = with_mut_damus ( & damusref, |damus| {
15
- debug ! ( "setup_user_relays: acquired damus for filter" ) ;
14
+ let filter = user_relay_filter ( & damusref) ;
16
15
17
- let account = damus
18
- . accounts
19
- . get_selected_account ( )
20
- . as_ref ( )
21
- . map ( |a| a. pubkey . bytes ( ) )
22
- . expect ( "selected account" ) ;
23
-
24
- // NIP-65
25
- Filter :: new ( )
26
- . authors ( [ account] )
27
- . kinds ( [ 10002 ] )
28
- . limit ( 1 )
29
- . build ( )
30
- } ) ;
31
-
32
- let mut sub = with_mut_damus ( & damusref, |damus| {
33
- debug ! ( "setup_user_relays: acquired damus for query + subscribe" ) ;
16
+ // Do we have a user relay list stored in nostrdb? Start with that ...
17
+ with_mut_damus ( & damusref, |damus| {
34
18
let txn = Transaction :: new ( & damus. ndb ) . expect ( "transaction" ) ;
35
19
let relays = query_nip65_relays ( & damus. ndb , & txn, & filter) ;
36
- debug ! ( "setup_user_relays: query #1 relays : {:#?}" , relays) ;
20
+ debug ! ( "track_user_relays: initial from nostrdb : {:#?}" , relays) ;
37
21
set_relays ( & mut damus. pool , relays) ;
22
+ } ) ;
38
23
39
- // Add a relay subscription to the pool
24
+ // Subscribe to user relay list updates
25
+ let mut sub = with_mut_damus ( & damusref, |damus| {
40
26
dispatcher:: subscribe ( damus, & [ filter. clone ( ) ] , 10 ) . expect ( "subscribe" )
41
27
} ) ;
42
- debug ! ( "setup_user_relays : sub {}" , sub. id) ;
28
+ debug ! ( "track_user_relays : sub {}" , sub. id) ;
43
29
30
+ // Track user relay list updates
44
31
loop {
45
32
match sub. receiver . next ( ) . await {
46
- Some ( ev) => {
47
- debug ! ( "setup_user_relays: saw {:?}" , ev) ;
48
- with_mut_damus ( & damusref, |damus| {
49
- let txn = Transaction :: new ( & damus. ndb ) . expect ( "transaction" ) ;
50
- let relays = query_nip65_relays ( & damus. ndb , & txn, & filter) ;
51
- debug ! ( "setup_user_relays: query #2 relays: {:#?}" , relays) ;
52
- set_relays ( & mut damus. pool , relays) ;
53
- } )
54
- }
33
+ Some ( _ev) => with_mut_damus ( & damusref, |damus| {
34
+ let txn = Transaction :: new ( & damus. ndb ) . expect ( "transaction" ) ;
35
+ let relays = query_nip65_relays ( & damus. ndb , & txn, & filter) ;
36
+ debug ! ( "track_user_relays update: {:#?}" , relays) ;
37
+ set_relays ( & mut damus. pool , relays) ;
38
+ } ) ,
55
39
None => {
56
- debug ! ( "setup_user_relays : saw None" ) ;
40
+ debug ! ( "track_user_relays : saw None" ) ;
57
41
break ;
58
42
}
59
43
}
60
44
}
61
45
62
- debug ! ( "do_setup_user_relays finished" ) ;
46
+ // Should only get here if the channel is closed
47
+ debug ! ( "track_user_relays finished" ) ;
48
+ }
49
+
50
+ fn user_relay_filter ( damusref : & DamusRef ) -> Filter {
51
+ with_mut_damus ( & damusref, |damus| {
52
+ let account = damus
53
+ . accounts
54
+ . get_selected_account ( )
55
+ . as_ref ( )
56
+ . map ( |a| a. pubkey . bytes ( ) )
57
+ . expect ( "selected account" ) ;
58
+
59
+ // NIP-65
60
+ Filter :: new ( )
61
+ . authors ( [ account] )
62
+ . kinds ( [ 10002 ] )
63
+ . limit ( 1 )
64
+ . build ( )
65
+ } )
63
66
}
64
67
68
+ // useful for debugging
65
69
fn _query_note_json ( ndb : & Ndb , txn : & Transaction , filter : & Filter ) -> Vec < String > {
66
70
let lim = filter. limit ( ) . unwrap_or ( crate :: filter:: default_limit ( ) ) as i32 ;
67
71
let results = ndb
0 commit comments