mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 08:21:47 +00:00
storage: migration 20
This commit is contained in:
parent
597e4f91ef
commit
b44b3fb6bc
64
gossip-lib/src/storage/migrations/m20.rs
Normal file
64
gossip-lib/src/storage/migrations/m20.rs
Normal 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(())
|
||||
}
|
||||
}
|
@ -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"),
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user