Overlord to save dirty relays on "save_relays" message (post field only)

This commit is contained in:
Mike Dilger 2022-12-28 12:16:59 +13:00
parent 0bca661974
commit 825fc8b5bb
2 changed files with 36 additions and 0 deletions

View File

@ -147,6 +147,20 @@ impl DbRelay {
Ok(()) Ok(())
} }
pub async fn update_post(url: String, post: bool) -> Result<(), Error> {
let sql = "UPDATE relay SET post = ? WHERE url = ?";
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((&post, &url))?;
Ok::<(), Error>(())
})
.await??;
Ok(())
}
#[allow(dead_code)] #[allow(dead_code)]
pub async fn delete(criteria: &str) -> Result<(), Error> { pub async fn delete(criteria: &str) -> Result<(), Error> {
let sql = format!("DELETE FROM relay WHERE {}", criteria); let sql = format!("DELETE FROM relay WHERE {}", criteria);

View File

@ -446,6 +446,28 @@ impl Overlord {
settings.save().await?; settings.save().await?;
} }
} }
"save_relays" => {
let dirty_relays: Vec<DbRelay> = GLOBALS
.relays
.read()
.await
.iter()
.filter_map(|(_, r)| if r.dirty { Some(r.to_owned()) } else { None })
.collect();
info!("Saving {} relays", dirty_relays.len());
for relay in dirty_relays.iter() {
// Just update 'post' since that's all 'dirty' indicates currently
DbRelay::update_post(relay.url.to_owned(), relay.post).await?;
if let Some(relay) = GLOBALS
.relays
.write()
.await
.get_mut(&Url(relay.url.clone()))
{
relay.dirty = false;
}
}
}
_ => {} _ => {}
}, },
_ => {} _ => {}