mirror of
https://github.com/aljazceru/notedeck.git
synced 2026-01-14 13:54:19 +01:00
canonicalize relay urls to avoid false duplicates
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -1271,6 +1271,7 @@ dependencies = [
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"tracing",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -15,3 +15,4 @@ nostrdb = { git = "https://github.com/damus-io/nostrdb-rs", rev = "9bbafd8a2e904
|
||||
hex = "0.4.3"
|
||||
tracing = "0.1.40"
|
||||
env_logger = "0.11.1"
|
||||
url = "2.5.2"
|
||||
|
||||
@@ -4,6 +4,8 @@ use nostrdb::Filter;
|
||||
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use url::Url;
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
use ewebsock::{WsEvent, WsMessage};
|
||||
|
||||
@@ -152,6 +154,7 @@ impl RelayPool {
|
||||
url: String,
|
||||
wakeup: impl Fn() + Send + Sync + Clone + 'static,
|
||||
) -> Result<()> {
|
||||
let url = Self::canonicalize_url(url);
|
||||
// Check if the URL already exists in the pool.
|
||||
if self.has(&url) {
|
||||
return Ok(());
|
||||
@@ -164,6 +167,14 @@ impl RelayPool {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// standardize the format (ie, trailing slashes)
|
||||
fn canonicalize_url(url: String) -> String {
|
||||
match Url::parse(&url) {
|
||||
Ok(parsed_url) => parsed_url.to_string(),
|
||||
Err(_) => url, // If parsing fails, return the original URL.
|
||||
}
|
||||
}
|
||||
|
||||
/// Attempts to receive a pool event from a list of relays. The
|
||||
/// function searches each relay in the list in order, attempting to
|
||||
/// receive a message from each. If a message is received, return it.
|
||||
|
||||
Reference in New Issue
Block a user