Compare commits
1 Commits
a91537fccf
...
v1
| Author | SHA1 | Date | |
|---|---|---|---|
| f91cdb0801 |
@@ -15,6 +15,7 @@ tauri-build = { version = "2", features = [] }
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
tauri = { version = "2", features = [] }
|
tauri = { version = "2", features = [] }
|
||||||
tauri-plugin-opener = "2"
|
tauri-plugin-opener = "2"
|
||||||
|
tauri-plugin-store = "2"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
easy-nostr = { path = "./easy-nostr" }
|
easy-nostr = { path = "./easy-nostr" }
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"windows": ["main"],
|
"windows": ["main"],
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"core:default",
|
"core:default",
|
||||||
"opener:default"
|
"opener:default",
|
||||||
|
"store:default"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,16 +5,18 @@ mod news;
|
|||||||
pub fn run() {
|
pub fn run() {
|
||||||
tauri::Builder::default()
|
tauri::Builder::default()
|
||||||
.plugin(tauri_plugin_opener::init())
|
.plugin(tauri_plugin_opener::init())
|
||||||
|
.plugin(tauri_plugin_store::Builder::default().build())
|
||||||
// Registriert den Nostr-State
|
// Registriert den Nostr-State
|
||||||
.manage(news::NewsState::default())
|
.manage(news::NewsState::default())
|
||||||
.invoke_handler(tauri::generate_handler![
|
.invoke_handler(tauri::generate_handler![
|
||||||
home::fetch_nostr_posts,
|
home::fetch_nostr_posts,
|
||||||
news::save_openrouter_key,
|
news::save_openrouter_key,
|
||||||
|
news::save_groq_key,
|
||||||
|
news::load_keys,
|
||||||
news::load_rss_config,
|
news::load_rss_config,
|
||||||
news::save_rss_urls, // Geändert von save_rss_url zu save_rss_urls
|
news::save_rss_urls,
|
||||||
news::fetch_ai_news,
|
news::fetch_ai_news,
|
||||||
news::fetch_rss_news,
|
news::fetch_rss_news,
|
||||||
news::save_groq_key,
|
|
||||||
])
|
])
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
.expect("error while running tauri application");
|
.expect("error while running tauri application");
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ use std::fs;
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use tauri::{AppHandle, Manager, State};
|
use tauri::{AppHandle, Manager, State};
|
||||||
|
use tauri_plugin_store::StoreExt;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Default, Clone)]
|
#[derive(Serialize, Deserialize, Default, Clone)]
|
||||||
pub struct RssConfig {
|
pub struct RssConfig {
|
||||||
@@ -114,16 +115,46 @@ fn default_feeds() -> Vec<RssFeed> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn save_openrouter_key(key: String, state: State<'_, NewsState>) -> Result<(), String> {
|
pub async fn load_keys(app: AppHandle, state: State<'_, NewsState>) -> Result<(), String> {
|
||||||
let mut lock = state.openrouter_key.lock().map_err(|_| "Lock failed")?;
|
let store = app.store("keys.json").map_err(|e| e.to_string())?;
|
||||||
*lock = key.trim().to_string();
|
if let Some(v) = store.get("openrouter_key") {
|
||||||
|
if let Some(k) = v.as_str() {
|
||||||
|
*state.openrouter_key.lock().unwrap() = k.to_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(v) = store.get("groq_key") {
|
||||||
|
if let Some(k) = v.as_str() {
|
||||||
|
*state.groq_key.lock().unwrap() = k.to_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn save_groq_key(key: String, state: State<'_, NewsState>) -> Result<(), String> {
|
pub async fn save_openrouter_key(
|
||||||
let mut lock = state.groq_key.lock().map_err(|_| "Lock failed")?;
|
key: String,
|
||||||
*lock = key.trim().to_string();
|
app: AppHandle,
|
||||||
|
state: State<'_, NewsState>,
|
||||||
|
) -> Result<(), String> {
|
||||||
|
let trimmed = key.trim().to_string();
|
||||||
|
*state.openrouter_key.lock().map_err(|_| "Lock failed")? = trimmed.clone();
|
||||||
|
let store = app.store("keys.json").map_err(|e| e.to_string())?;
|
||||||
|
store.set("openrouter_key", trimmed);
|
||||||
|
store.save().map_err(|e| e.to_string())?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tauri::command]
|
||||||
|
pub async fn save_groq_key(
|
||||||
|
key: String,
|
||||||
|
app: AppHandle,
|
||||||
|
state: State<'_, NewsState>,
|
||||||
|
) -> Result<(), String> {
|
||||||
|
let trimmed = key.trim().to_string();
|
||||||
|
*state.groq_key.lock().map_err(|_| "Lock failed")? = trimmed.clone();
|
||||||
|
let store = app.store("keys.json").map_err(|e| e.to_string())?;
|
||||||
|
store.set("groq_key", trimmed);
|
||||||
|
store.save().map_err(|e| e.to_string())?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,11 +69,12 @@ pub fn news() -> Html {
|
|||||||
let new_url_ref = use_node_ref();
|
let new_url_ref = use_node_ref();
|
||||||
let new_cat_ref = use_node_ref();
|
let new_cat_ref = use_node_ref();
|
||||||
|
|
||||||
// Init: RSS Feeds laden
|
// Init: Keys und RSS Feeds laden
|
||||||
{
|
{
|
||||||
let rss_feeds = rss_feeds.clone();
|
let rss_feeds = rss_feeds.clone();
|
||||||
use_effect_with((), move |_| {
|
use_effect_with((), move |_| {
|
||||||
spawn_local(async move {
|
spawn_local(async move {
|
||||||
|
let _ = invoke("load_keys", JsValue::NULL).await;
|
||||||
if let Ok(res) = invoke("load_rss_config", JsValue::NULL).await {
|
if let Ok(res) = invoke("load_rss_config", JsValue::NULL).await {
|
||||||
if let Ok(feeds) = serde_wasm_bindgen::from_value::<Vec<RssFeed>>(res) {
|
if let Ok(feeds) = serde_wasm_bindgen::from_value::<Vec<RssFeed>>(res) {
|
||||||
rss_feeds.set(feeds);
|
rss_feeds.set(feeds);
|
||||||
|
|||||||
Reference in New Issue
Block a user