This commit is contained in:
2026-06-10 13:00:51 +07:00
parent 0230fcff23
commit e812ae05a9
8 changed files with 94 additions and 67 deletions

View File

@@ -1,4 +1,3 @@
use std::collections::{HashMap, HashSet};
use std::fmt::Display;
use std::rc::Rc;
@@ -42,10 +41,9 @@ setting_accessors! {
pub theme_mode: ThemeMode,
pub hide_avatar: bool,
pub screening: bool,
pub encryption_key: bool,
pub nip4e: bool,
pub auth_mode: AuthMode,
pub trusted_relays: HashSet<RelayUrl>,
pub room_configs: HashMap<u64, RoomConfig>,
pub trusted_relays: Vec<String>,
pub file_server: Url,
}
@@ -141,18 +139,13 @@ pub struct Settings {
pub screening: bool,
/// Enable decoupling encryption key
///
/// NIP-4e
pub encryption_key: bool,
pub nip4e: bool,
/// Authentication mode
pub auth_mode: AuthMode,
/// Trusted relays; Coop will automatically authenticate with these relays
pub trusted_relays: HashSet<RelayUrl>,
/// Configuration for each chat room
pub room_configs: HashMap<u64, RoomConfig>,
pub trusted_relays: Vec<String>,
/// Server for blossom media attachments
pub file_server: Url,
@@ -165,10 +158,9 @@ impl Default for Settings {
theme_mode: ThemeMode::default(),
hide_avatar: false,
screening: true,
encryption_key: false,
nip4e: false,
auth_mode: AuthMode::default(),
trusted_relays: HashSet::default(),
room_configs: HashMap::default(),
trusted_relays: vec![],
file_server: Url::parse("https://blossom.band/").unwrap(),
}
}
@@ -315,21 +307,29 @@ impl AppSettings {
/// Check if decoupling encryption key is enabled
pub fn is_nip4e_enabled(&self, cx: &App) -> bool {
self.inner.read(cx).encryption_key
self.inner.read(cx).nip4e
}
/// Check if the given relay is already authenticated
pub fn trusted_relay(&self, url: &RelayUrl, cx: &App) -> bool {
self.inner.read(cx).trusted_relays.iter().any(|relay| {
relay.as_str_without_trailing_slash() == url.as_str_without_trailing_slash()
})
self.inner
.read(cx)
.trusted_relays
.iter()
.any(|relay| relay == url.as_str_without_trailing_slash())
}
/// Add a relay to the trusted list
pub fn add_trusted_relay(&mut self, url: &RelayUrl, cx: &mut Context<Self>) {
self.inner.update(cx, |this, cx| {
this.trusted_relays.insert(url.clone());
cx.notify();
if !this
.trusted_relays
.iter()
.any(|relay| relay == url.as_str_without_trailing_slash())
{
this.trusted_relays.push(url.to_string());
cx.notify();
}
});
}
}