feat: add basic nostr connection

This commit is contained in:
reya 2024-02-02 09:09:14 +07:00
parent e8bd48e51b
commit fd393a4d30
4 changed files with 175 additions and 789 deletions

View File

@ -1,6 +1,3 @@
# Generated by Cargo # Generated by Cargo
# will have compiled files and executables # will have compiled files and executables
/target/ /target/
/bin/depot-*
/bin/depot

886
src-tauri/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,8 @@
[package] [package]
name = "lume" name = "lume"
version = "3.0.0" version = "3.0.0"
description = "the communication app" description = "nostr client"
authors = ["Ren Amamiya"] authors = ["npub1zfss807aer0j26mwp2la0ume0jqde3823rmu97ra6sgyyg956e0s6xw445"]
license = "GPL-3.0"
repository = "https://github.com/lumehq/lume" repository = "https://github.com/lumehq/lume"
edition = "2021" edition = "2021"
rust-version = "1.70" rust-version = "1.70"
@ -14,10 +13,12 @@ tauri-build = { version = "2.0.0-alpha", features = [] }
[dependencies] [dependencies]
nostr = "0.27" nostr = "0.27"
nostr-sdk = "0.27" nostr-sdk = "0.27"
nostr-sqlite = "0.27"
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
serde_json = "1.0" serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
tauri = { version = "2.0.0-alpha", features = [ "tray-icon", tauri = { version = "2.0.0-alpha", features = [
"tray-icon",
"macos-private-api", "macos-private-api",
"native-tls-vendored", "native-tls-vendored",
"protocol-asset", "protocol-asset",
@ -37,19 +38,15 @@ tauri-plugin-store = "2.0.0-alpha"
tauri-plugin-upload = "2.0.0-alpha" tauri-plugin-upload = "2.0.0-alpha"
tauri-plugin-window-state = "2.0.0-alpha" tauri-plugin-window-state = "2.0.0-alpha"
tauri-plugin-theme = { git = "https://github.com/wyhaya/tauri-plugin-theme" } tauri-plugin-theme = { git = "https://github.com/wyhaya/tauri-plugin-theme" }
tauri-plugin-sql = {version="2.0.0-alpha", features = [
"sqlite",
] }
sqlx-cli = { version = "0.7.0", default-features = false, features = [
"sqlite",
] }
webpage = { version = "2.0", features = ["serde"] } webpage = { version = "2.0", features = ["serde"] }
[target.'cfg(not(target_os = "linux"))'.dependencies] [target.'cfg(not(target_os = "linux"))'.dependencies]
keyring = "2" keyring = "2"
[target.'cfg(target_os = "linux")'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
keyring = { version = "2", default_features = false, features = ["linux-secret-service"] } keyring = { version = "2", default_features = false, features = [
"linux-secret-service",
] }
[features] [features]
# by default Tauri runs in production mode # by default Tauri runs in production mode

View File

@ -6,33 +6,52 @@
pub mod commands; pub mod commands;
pub mod nostr; pub mod nostr;
use nostr_sdk::{Client, ClientBuilder};
use nostr_sqlite::SQLiteDatabase;
use tauri::Manager;
use tauri_plugin_autostart::MacosLauncher; use tauri_plugin_autostart::MacosLauncher;
use tauri_plugin_sql::{Migration, MigrationKind};
use tauri_plugin_theme::ThemePlugin; use tauri_plugin_theme::ThemePlugin;
use tokio::sync::Mutex;
struct NostrClient(Mutex<Client>);
fn main() { fn main() {
let mut ctx = tauri::generate_context!(); let mut ctx = tauri::generate_context!();
tauri::Builder::default() tauri::Builder::default()
.setup(|app| { .setup(|app| {
#[cfg(desktop)] let handle = app.handle().clone();
app let config_dir = app.path().app_config_dir().unwrap();
.handle()
.plugin(tauri_plugin_updater::Builder::new().build())?; tauri::async_runtime::spawn(async move {
// Create database connection
let database = SQLiteDatabase::open(config_dir.join("nostr.db"))
.await
.expect("Open database failed.");
// Create nostr connection
let client = ClientBuilder::default().database(database).build();
// Add bootstrap relay
client
.add_relay("wss://nostr.mutinywallet.com")
.await
.expect("Failed to add bootstrap relay.");
// Add bootstrap relay
client
.add_relay("wss://bostr.nokotaro.com")
.await
.expect("Failed to add bootstrap relay.");
// Connect
client.connect().await;
// Init global state
handle.manage(NostrClient(client.into()))
});
Ok(()) Ok(())
}) })
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations(
"sqlite:lume_v3.db",
vec![Migration {
version: 20230418013219,
description: "initial data",
sql: include_str!("../migrations/20230418013219_initial_data.sql"),
kind: MigrationKind::Up,
}],
)
.build(),
)
.plugin(ThemePlugin::init(ctx.config_mut())) .plugin(ThemePlugin::init(ctx.config_mut()))
.plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_clipboard_manager::init())
.plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_dialog::init())
@ -43,6 +62,7 @@ fn main() {
.plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_process::init())
.plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_upload::init()) .plugin(tauri_plugin_upload::init())
.plugin(tauri_plugin_updater::Builder::new().build())
.plugin(tauri_plugin_window_state::Builder::default().build()) .plugin(tauri_plugin_window_state::Builder::default().build())
.plugin(tauri_plugin_autostart::init( .plugin(tauri_plugin_autostart::init(
MacosLauncher::LaunchAgent, MacosLauncher::LaunchAgent,