wip: startup flow
This commit is contained in:
20
crates/client/src/lib.rs
Normal file
20
crates/client/src/lib.rs
Normal file
@@ -0,0 +1,20 @@
|
||||
use gpui::Global;
|
||||
use nostr_sdk::prelude::*;
|
||||
use state::get_client;
|
||||
|
||||
pub mod state;
|
||||
|
||||
pub struct NostrClient {
|
||||
pub client: &'static Client,
|
||||
}
|
||||
|
||||
impl Global for NostrClient {}
|
||||
|
||||
impl NostrClient {
|
||||
pub async fn init() -> Self {
|
||||
// Initialize nostr client
|
||||
let client = get_client().await;
|
||||
|
||||
Self { client }
|
||||
}
|
||||
}
|
||||
37
crates/client/src/state.rs
Normal file
37
crates/client/src/state.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use dirs::config_dir;
|
||||
use nostr_sdk::prelude::*;
|
||||
use std::fs;
|
||||
use tokio::sync::OnceCell;
|
||||
|
||||
pub static CLIENT: OnceCell<Client> = OnceCell::const_new();
|
||||
|
||||
pub async fn get_client() -> &'static Client {
|
||||
CLIENT
|
||||
.get_or_init(|| async {
|
||||
// Setup app data folder
|
||||
let config_dir = config_dir().unwrap();
|
||||
let _ = fs::create_dir_all(config_dir.join("Coop/"));
|
||||
|
||||
// Setup database
|
||||
let lmdb = NostrLMDB::open(config_dir.join("Coop/nostr"))
|
||||
.expect("Database is NOT initialized");
|
||||
|
||||
// Setup Nostr Client
|
||||
let client = ClientBuilder::default().database(lmdb).build();
|
||||
|
||||
// Add some bootstrap relays
|
||||
let _ = client.add_relay("wss://relay.damus.io").await;
|
||||
let _ = client.add_relay("wss://relay.primal.net").await;
|
||||
let _ = client.add_relay("wss://nostr.fmt.wiz.biz").await;
|
||||
let _ = client.add_relay("wss://directory.yabu.me").await;
|
||||
let _ = client.add_relay("wss://purplepag.es").await;
|
||||
let _ = client.add_relay("wss://user.kindpag.es/").await;
|
||||
|
||||
// Connect to all relays
|
||||
client.connect().await;
|
||||
|
||||
// Return client
|
||||
client
|
||||
})
|
||||
.await
|
||||
}
|
||||
Reference in New Issue
Block a user