From a8ad14ae27f34e7e57f5577dc4ad56b79c9fbe5c Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Sat, 7 Jan 2023 16:30:07 +1300 Subject: [PATCH] BUGFIX in update_metadata() --- src/people.rs | 72 ++++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/src/people.rs b/src/people.rs index 79222c89..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.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??; + 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);