mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 16:31:18 +00:00
When your own RelayList comes in, honor it
This commit is contained in:
parent
88c81224d3
commit
b96cd1fb5a
@ -169,6 +169,20 @@ impl DbRelay {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn clear_read_and_write() -> Result<(), Error> {
|
||||
let sql = "UPDATE relay SET read = false, write = false";
|
||||
spawn_blocking(move || {
|
||||
let maybe_db = GLOBALS.db.blocking_lock();
|
||||
let db = maybe_db.as_ref().unwrap();
|
||||
let mut stmt = db.prepare(sql)?;
|
||||
stmt.execute(())?;
|
||||
Ok::<(), Error>(())
|
||||
})
|
||||
.await??;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn update_read_and_write(
|
||||
url: RelayUrl,
|
||||
read: bool,
|
||||
|
@ -251,6 +251,27 @@ async fn process_relay_list(event: &Event) -> Result<(), Error> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Enable special handling for our own relay list
|
||||
let mut ours = false;
|
||||
if let Some(pubkey) = GLOBALS.signer.public_key() {
|
||||
if event.pubkey == pubkey {
|
||||
ours = true;
|
||||
|
||||
tracing::info!("Processing our own relay list");
|
||||
|
||||
// clear all read/write flags in relays (will be added back below)
|
||||
|
||||
// in database
|
||||
DbRelay::clear_read_and_write().await?;
|
||||
|
||||
// in memory
|
||||
for mut elem in GLOBALS.relay_tracker.all_relays.iter_mut() {
|
||||
elem.value_mut().read = false;
|
||||
elem.value_mut().write = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut read_relays: Vec<RelayUrl> = Vec::new();
|
||||
let mut write_relays: Vec<RelayUrl> = Vec::new();
|
||||
for tag in event.tags.iter() {
|
||||
@ -258,13 +279,51 @@ async fn process_relay_list(event: &Event) -> Result<(), Error> {
|
||||
if let Ok(relay_url) = RelayUrl::try_from_unchecked_url(url) {
|
||||
if let Some(m) = marker {
|
||||
match &*m.trim().to_lowercase() {
|
||||
"read" => read_relays.push(relay_url.clone()),
|
||||
"write" => write_relays.push(relay_url.clone()),
|
||||
"read" => {
|
||||
read_relays.push(relay_url.clone());
|
||||
if ours {
|
||||
// set in database
|
||||
DbRelay::update_read_and_write(relay_url.clone(), true, false)
|
||||
.await?;
|
||||
// set in memory
|
||||
if let Some(mut elem) =
|
||||
GLOBALS.relay_tracker.all_relays.get_mut(&relay_url)
|
||||
{
|
||||
elem.read = true;
|
||||
elem.write = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
"write" => {
|
||||
write_relays.push(relay_url.clone());
|
||||
if ours {
|
||||
// set in database
|
||||
DbRelay::update_read_and_write(relay_url.clone(), false, true)
|
||||
.await?;
|
||||
// set in memory
|
||||
if let Some(mut elem) =
|
||||
GLOBALS.relay_tracker.all_relays.get_mut(&relay_url)
|
||||
{
|
||||
elem.read = false;
|
||||
elem.write = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {} // ignore unknown marker
|
||||
}
|
||||
} else {
|
||||
read_relays.push(relay_url.clone());
|
||||
write_relays.push(relay_url.clone());
|
||||
if ours {
|
||||
// set in database
|
||||
DbRelay::update_read_and_write(relay_url.clone(), true, true).await?;
|
||||
// set in memory
|
||||
if let Some(mut elem) = GLOBALS.relay_tracker.all_relays.get_mut(&relay_url)
|
||||
{
|
||||
elem.read = true;
|
||||
elem.write = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user