storage: migration 20

This commit is contained in:
Mike Dilger 2023-12-09 08:13:15 +13:00
parent 597e4f91ef
commit b44b3fb6bc
2 changed files with 68 additions and 1 deletions

View File

@ -0,0 +1,64 @@
use crate::error::Error;
use crate::globals::GLOBALS;
use crate::storage::types::PersonList1;
use crate::storage::Storage;
use heed::RwTxn;
use nostr_types::Tag;
impl Storage {
pub(super) fn m20_trigger(&self) -> Result<(), Error> {
Ok(())
}
pub(super) fn m20_migrate<'a>(
&'a self,
prefix: &str,
txn: &mut RwTxn<'a>,
) -> Result<(), Error> {
// Info message
tracing::info!("{prefix}: ...");
// Migrate
self.m20_initialize_person_list_event_metadata(txn)?;
Ok(())
}
fn m20_initialize_person_list_event_metadata<'a>(
&'a self,
txn: &mut RwTxn<'a>,
) -> Result<(), Error> {
// Get public key, or give up
let pk = match self.read_setting_public_key() {
Some(pk) => pk,
None => return Ok(()),
};
for (list, mut metadata) in self.get_all_person_list_metadata1()? {
if let Ok(Some(event)) =
self.get_replaceable_event(list.event_kind(), pk, &metadata.dtag)
{
metadata.event_created_at = event.created_at;
metadata.event_public_len = event
.tags
.iter()
.filter(|t| matches!(t, Tag::Pubkey { .. }))
.count();
metadata.event_private_len = {
let mut private_len: Option<usize> = None;
if !matches!(list, PersonList1::Followed) && GLOBALS.signer.is_ready() {
if let Ok(bytes) = GLOBALS.signer.decrypt_nip04(&pk, &event.content) {
if let Ok(vectags) = serde_json::from_slice::<Vec<Tag>>(&bytes) {
private_len = Some(vectags.len());
}
}
}
private_len
};
self.set_person_list_metadata1(list, &metadata, Some(txn))?;
}
}
Ok(())
}
}

View File

@ -12,6 +12,7 @@ mod m17;
mod m18;
mod m19;
mod m2;
mod m20;
mod m3;
mod m4;
mod m5;
@ -25,7 +26,7 @@ use crate::error::{Error, ErrorKind};
use heed::RwTxn;
impl Storage {
const MAX_MIGRATION_LEVEL: u32 = 19;
const MAX_MIGRATION_LEVEL: u32 = 20;
/// Initialize the database from empty
pub(super) fn init_from_empty(&self) -> Result<(), Error> {
@ -81,6 +82,7 @@ impl Storage {
17 => self.m17_trigger()?,
18 => self.m18_trigger()?,
19 => self.m19_trigger()?,
20 => self.m20_trigger()?,
_ => panic!("Unreachable migration level"),
}
@ -109,6 +111,7 @@ impl Storage {
17 => self.m17_migrate(&prefix, txn)?,
18 => self.m18_migrate(&prefix, txn)?,
19 => self.m19_migrate(&prefix, txn)?,
20 => self.m20_migrate(&prefix, txn)?,
_ => panic!("Unreachable migration level"),
};