diff --git a/src/storage/migrations/mod.rs b/src/storage/migrations/mod.rs index 1aa0eadf..dc78894d 100644 --- a/src/storage/migrations/mod.rs +++ b/src/storage/migrations/mod.rs @@ -6,7 +6,7 @@ use nostr_types::{Event, RelayUrl}; use speedy::{Readable, Writable}; impl Storage { - const MAX_MIGRATION_LEVEL: u32 = 3; + const MAX_MIGRATION_LEVEL: u32 = 4; pub(super) fn migrate(&self, mut level: u32) -> Result<(), Error> { if level > Self::MAX_MIGRATION_LEVEL { @@ -47,6 +47,10 @@ impl Storage { tracing::info!("{prefix}: Removing invalid relays..."); self.remove_invalid_relays(txn)?; } + 3 => { + tracing::info!("{prefix}: Using kv for settings..."); + self.use_kv_for_settings(txn)?; + } _ => panic!("Unreachable migration level"), }; @@ -147,4 +151,70 @@ impl Storage { Ok(()) } + + fn use_kv_for_settings<'a>(&'a self, rw_txn: &mut RwTxn<'a>) -> Result<(), Error> { + if let Some(settings) = self.read_settings2()? { + self.write_setting_public_key(&settings.public_key, Some(rw_txn))?; + self.write_setting_log_n(&settings.log_n, Some(rw_txn))?; + self.write_setting_offline(&settings.offline, Some(rw_txn))?; + self.write_setting_load_avatars(&settings.load_avatars, Some(rw_txn))?; + self.write_setting_load_media(&settings.load_media, Some(rw_txn))?; + self.write_setting_check_nip05(&settings.check_nip05, Some(rw_txn))?; + self.write_setting_automatically_fetch_metadata(&settings.automatically_fetch_metadata, Some(rw_txn))?; + self.write_setting_num_relays_per_person(&settings.num_relays_per_person, Some(rw_txn))?; + self.write_setting_max_relays(&settings.max_relays, Some(rw_txn))?; + self.write_setting_feed_chunk(&settings.feed_chunk, Some(rw_txn))?; + self.write_setting_replies_chunk(&settings.replies_chunk, Some(rw_txn))?; + self.write_setting_person_feed_chunk(&settings.person_feed_chunk, Some(rw_txn))?; + self.write_setting_overlap(&settings.overlap, Some(rw_txn))?; + self.write_setting_reposts(&settings.reposts, Some(rw_txn))?; + self.write_setting_show_long_form(&settings.show_long_form, Some(rw_txn))?; + self.write_setting_show_mentions(&settings.show_mentions, Some(rw_txn))?; + self.write_setting_direct_messages(&settings.direct_messages, Some(rw_txn))?; + self.write_setting_future_allowance_secs(&settings.future_allowance_secs, Some(rw_txn))?; + self.write_setting_reactions(&settings.reactions, Some(rw_txn))?; + self.write_setting_enable_zap_receipts(&settings.enable_zap_receipts, Some(rw_txn))?; + self.write_setting_show_media(&settings.show_media, Some(rw_txn))?; + self.write_setting_pow(&settings.pow, Some(rw_txn))?; + self.write_setting_set_client_tag(&settings.set_client_tag, Some(rw_txn))?; + self.write_setting_set_user_agent(&settings.set_user_agent, Some(rw_txn))?; + self.write_setting_delegatee_tag(&settings.delegatee_tag, Some(rw_txn))?; + self.write_setting_max_fps(&settings.max_fps, Some(rw_txn))?; + self.write_setting_recompute_feed_periodically(&settings.recompute_feed_periodically, Some(rw_txn))?; + self.write_setting_feed_recompute_interval_ms(&settings.feed_recompute_interval_ms, Some(rw_txn))?; + self.write_setting_theme(&settings.theme, Some(rw_txn))?; + self.write_setting_override_dpi(&settings.override_dpi, Some(rw_txn))?; + self.write_setting_highlight_unread_events(&settings.highlight_unread_events, Some(rw_txn))?; + self.write_setting_posting_area_at_top(&settings.posting_area_at_top, Some(rw_txn))?; + self.write_setting_status_bar(&settings.status_bar, Some(rw_txn))?; + self.write_setting_image_resize_algorithm(&settings.image_resize_algorithm, Some(rw_txn))?; + self.write_setting_relay_list_becomes_stale_hours(&settings.relay_list_becomes_stale_hours, Some(rw_txn))?; + self.write_setting_metadata_becomes_stale_hours(&settings.metadata_becomes_stale_hours, Some(rw_txn))?; + self.write_setting_nip05_becomes_stale_if_valid_hours(&settings.nip05_becomes_stale_if_valid_hours, Some(rw_txn))?; + self.write_setting_nip05_becomes_stale_if_invalid_minutes(&settings.nip05_becomes_stale_if_invalid_minutes, Some(rw_txn))?; + self.write_setting_avatar_becomes_stale_hours(&settings.avatar_becomes_stale_hours, Some(rw_txn))?; + self.write_setting_media_becomes_stale_hours(&settings.media_becomes_stale_hours, Some(rw_txn))?; + self.write_setting_max_websocket_message_size_kb(&settings.max_websocket_message_size_kb, Some(rw_txn))?; + self.write_setting_max_websocket_frame_size_kb(&settings.max_websocket_frame_size_kb, Some(rw_txn))?; + self.write_setting_websocket_accept_unmasked_frames(&settings.websocket_accept_unmasked_frames, Some(rw_txn))?; + self.write_setting_websocket_connect_timeout_sec(&settings.websocket_connect_timeout_sec, Some(rw_txn))?; + self.write_setting_websocket_ping_frequency_sec(&settings.websocket_ping_frequency_sec, Some(rw_txn))?; + self.write_setting_fetcher_metadata_looptime_ms(&settings.fetcher_metadata_looptime_ms, Some(rw_txn))?; + self.write_setting_fetcher_looptime_ms(&settings.fetcher_looptime_ms, Some(rw_txn))?; + self.write_setting_fetcher_connect_timeout_sec(&settings.fetcher_connect_timeout_sec, Some(rw_txn))?; + self.write_setting_fetcher_timeout_sec(&settings.fetcher_timeout_sec, Some(rw_txn))?; + self.write_setting_fetcher_max_requests_per_host(&settings.fetcher_max_requests_per_host, Some(rw_txn))?; + self.write_setting_fetcher_host_exclusion_on_low_error_secs(&settings.fetcher_host_exclusion_on_low_error_secs, Some(rw_txn))?; + self.write_setting_fetcher_host_exclusion_on_med_error_secs(&settings.fetcher_host_exclusion_on_med_error_secs, Some(rw_txn))?; + self.write_setting_fetcher_host_exclusion_on_high_error_secs(&settings.fetcher_host_exclusion_on_high_error_secs, Some(rw_txn))?; + self.write_setting_nip11_lines_to_output_on_error(&settings.nip11_lines_to_output_on_error, Some(rw_txn))?; + self.write_setting_prune_period_days(&settings.prune_period_days, Some(rw_txn))?; + + self.general.delete(rw_txn, b"settings2")?; + + Ok(()) + } else { + Err(ErrorKind::General("Settings missing.".to_string()).into()) + } + } }