diff --git a/Cargo.lock b/Cargo.lock index a3be1191..daefcf46 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2352,7 +2352,7 @@ dependencies = [ [[package]] name = "nostr-types" version = "0.2.0-unstable" -source = "git+https://github.com/mikedilger/nostr-types#204d4395f7a4cf6b3f9af54f2677863326cbdf94" +source = "git+https://github.com/mikedilger/nostr-types#6af60c195cff89ddf322b113e0014848b6c9ad6c" dependencies = [ "aes", "base64 0.13.1", diff --git a/src/people.rs b/src/people.rs index 519c9811..0846b047 100644 --- a/src/people.rs +++ b/src/people.rs @@ -86,43 +86,49 @@ impl People { // Update the map let person = self.people.get_mut(pubkeyhex).unwrap(); + + // Determine whether to update it + let mut doit = person.metadata_at.is_none(); if let Some(metadata_at) = person.metadata_at { if asof.0 > metadata_at { - // Process fresh metadata - - person.name = metadata.name; - person.about = metadata.about; - person.picture = metadata.picture; - if person.dns_id != metadata.nip05 { - person.dns_id = metadata.nip05; - person.dns_id_valid = 0; // changed, so reset to invalid - person.dns_id_last_checked = None; // we haven't checked this one yet - } - person.metadata_at = Some(asof.0); - - // Update the database - let person = person.clone(); - let pubkeyhex2 = pubkeyhex.to_owned(); - task::spawn_blocking(move || { - let maybe_db = GLOBALS.db.blocking_lock(); - let db = maybe_db.as_ref().unwrap(); - - let mut stmt = db.prepare( - "UPDATE person SET name=?, about=?, picture=?, dns_id=?, metadata_at=? WHERE pubkey=?" - )?; - stmt.execute(( - &person.name, - &person.about, - &person.picture, - &person.dns_id, - &person.metadata_at, - &pubkeyhex2.0, - ))?; - Ok::<(), Error>(()) - }) - .await??; + doit = true; } } + if doit { + // Process fresh metadata + + person.name = metadata.get("name"); + person.about = metadata.get("about"); + person.picture = metadata.get("picture"); + if person.dns_id != metadata.get("nip05") { + person.dns_id = metadata.get("nip05"); + person.dns_id_valid = 0; // changed, so reset to invalid + person.dns_id_last_checked = None; // we haven't checked this one yet + } + person.metadata_at = Some(asof.0); + + // Update the database + let person = person.clone(); + let pubkeyhex2 = pubkeyhex.to_owned(); + task::spawn_blocking(move || { + let maybe_db = GLOBALS.db.blocking_lock(); + let db = maybe_db.as_ref().unwrap(); + + let mut stmt = db.prepare( + "UPDATE person SET name=?, about=?, picture=?, dns_id=?, metadata_at=? WHERE pubkey=?" + )?; + stmt.execute(( + &person.name, + &person.about, + &person.picture, + &person.dns_id, + &person.metadata_at, + &pubkeyhex2.0, + ))?; + Ok::<(), Error>(()) + }) + .await??; + } // Remove from failed avatars list so the UI will try to fetch the avatar again GLOBALS.failed_avatars.write().await.remove(pubkeyhex);