diff --git a/src/db/relay.rs b/src/db/relay.rs index d09c7fda..a02feb4c 100644 --- a/src/db/relay.rs +++ b/src/db/relay.rs @@ -147,6 +147,20 @@ impl DbRelay { 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)] pub async fn delete(criteria: &str) -> Result<(), Error> { let sql = format!("DELETE FROM relay WHERE {}", criteria); diff --git a/src/overlord/mod.rs b/src/overlord/mod.rs index c4abb872..c9e3b025 100644 --- a/src/overlord/mod.rs +++ b/src/overlord/mod.rs @@ -446,6 +446,28 @@ impl Overlord { settings.save().await?; } } + "save_relays" => { + let dirty_relays: Vec = 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; + } + } + } _ => {} }, _ => {}