All checks were successful
Android Build Final Fixed / build-android (push) Successful in 7m46s
58 lines
1.7 KiB
Rust
58 lines
1.7 KiB
Rust
use easy_nostr::EasyNostr;
|
|
use nostr_sdk::prelude::{Keys, ToBech32};
|
|
use serde::Serialize; // Import für die Schlüssel-Generierung
|
|
|
|
// Diese Struktur ist für den Transport zum Frontend (JSON)
|
|
#[derive(Serialize)]
|
|
pub struct LocalPost {
|
|
pub content: String,
|
|
pub author: String,
|
|
pub created_at: u64,
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn fetch_nostr_posts(hashtags: Vec<String>) -> Result<Vec<LocalPost>, String> {
|
|
println!("Fetching Nostr posts for hashtags: {:?}", hashtags);
|
|
// 1. Temporären Einweg-Schlüssel generieren
|
|
let random_keys = Keys::generate();
|
|
let temp_nsec = random_keys
|
|
.secret_key()
|
|
.to_bech32()
|
|
.map_err(|e| format!("Fehler beim Generieren des Keys: {}", e))?;
|
|
|
|
// 2. Verbindung mit dem temporären Key aufbauen
|
|
let easy = EasyNostr::new(&temp_nsec)
|
|
.await
|
|
.map_err(|e| e.to_string())?;
|
|
|
|
// 3. Relays hinzufügen
|
|
easy.add_relays(vec![
|
|
"wss://relay.damus.io",
|
|
"wss://nos.lol",
|
|
"wss://relay.snort.social",
|
|
])
|
|
.await
|
|
.map_err(|e| e.to_string())?;
|
|
|
|
// 4. Posts von der Library holen - Entweder per Hashtag oder Random
|
|
let raw_posts = if hashtags.is_empty() {
|
|
easy.get_random_posts().await.map_err(|e| e.to_string())?
|
|
} else {
|
|
easy.get_posts_by_hashtags(hashtags)
|
|
.await
|
|
.map_err(|e| e.to_string())?
|
|
};
|
|
|
|
// 5. Mappen: Library-Typ -> Unser serialisierbarer Typ
|
|
let mapped_posts = raw_posts
|
|
.into_iter()
|
|
.map(|p| LocalPost {
|
|
content: p.content,
|
|
author: p.author.to_string(),
|
|
created_at: p.created_at.as_secs(),
|
|
})
|
|
.collect();
|
|
|
|
Ok(mapped_posts)
|
|
}
|