initial commit

This commit is contained in:
2024-11-19 08:23:43 +07:00
commit 4d8a1d44cc
8 changed files with 177 additions and 0 deletions

9
crates/nostr/Cargo.toml Normal file
View 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
View File

@@ -0,0 +1 @@
pub mod state;

37
crates/nostr/src/state.rs Normal file
View 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
View 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
View 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();
});
}