initial commit
This commit is contained in:
9
crates/nostr/Cargo.toml
Normal file
9
crates/nostr/Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "nostr"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
nostr-sdk.workspace = true
|
||||
dirs.workspace = true
|
||||
tokio.workspace = true
|
||||
1
crates/nostr/src/lib.rs
Normal file
1
crates/nostr/src/lib.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub mod state;
|
||||
37
crates/nostr/src/state.rs
Normal file
37
crates/nostr/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
|
||||
}
|
||||
14
crates/ui/Cargo.toml
Normal file
14
crates/ui/Cargo.toml
Normal file
@@ -0,0 +1,14 @@
|
||||
[package]
|
||||
name = "coop"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
[[bin]]
|
||||
name = "coop"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
gpui.workspace = true
|
||||
tokio.workspace = true
|
||||
nostr = { version = "0.1.0", path = "../nostr" }
|
||||
46
crates/ui/src/main.rs
Normal file
46
crates/ui/src/main.rs
Normal file
@@ -0,0 +1,46 @@
|
||||
use gpui::*;
|
||||
use nostr::state::get_client;
|
||||
|
||||
struct HelloWorld {
|
||||
text: SharedString,
|
||||
}
|
||||
|
||||
impl Render for HelloWorld {
|
||||
fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
|
||||
div()
|
||||
.bg(rgb(0xffffff))
|
||||
.flex()
|
||||
.size_full()
|
||||
.justify_center()
|
||||
.items_center()
|
||||
.child(format!("Hello, {}!", &self.text))
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let _client = get_client().await;
|
||||
|
||||
App::new().run(|cx: &mut AppContext| {
|
||||
let bounds = Bounds::centered(None, size(px(860.0), px(650.0)), cx);
|
||||
|
||||
cx.open_window(
|
||||
WindowOptions {
|
||||
window_bounds: Some(WindowBounds::Windowed(bounds)),
|
||||
window_decorations: Some(WindowDecorations::Client),
|
||||
titlebar: Some(TitlebarOptions {
|
||||
title: Some(SharedString::new_static("coop")),
|
||||
appears_transparent: true,
|
||||
..Default::default()
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
|cx| {
|
||||
cx.new_view(|_cx| HelloWorld {
|
||||
text: "coop".into(),
|
||||
})
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user