Merge a few relay fixes from ken
Pick a few fixes from #380 Link: https://github.com/damus-io/notedeck/pull/380 Ken Sedgwick (5): build: Cargo.lock updates to mitigate num_enum_derive problem add .rustfmt.toml to specify edition Fix parsing of subscription id for RelayMessage::Event Skip adding relays that are already in the pool canonicalize relay urls to avoid false duplicates
This commit is contained in:
1
.rustfmt.toml
Normal file
1
.rustfmt.toml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
edition = "2021"
|
||||||
22
Cargo.lock
generated
22
Cargo.lock
generated
@@ -1271,6 +1271,7 @@ dependencies = [
|
|||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2741,7 +2742,7 @@ version = "0.5.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
|
checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro-crate 1.3.1",
|
"proc-macro-crate",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
@@ -2753,7 +2754,7 @@ version = "0.6.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
|
checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro-crate 1.3.1",
|
"proc-macro-crate",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.77",
|
"syn 2.0.77",
|
||||||
@@ -2765,7 +2766,7 @@ version = "0.7.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
|
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro-crate 3.2.0",
|
"proc-macro-crate",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.77",
|
"syn 2.0.77",
|
||||||
@@ -3166,15 +3167,6 @@ dependencies = [
|
|||||||
"toml_edit 0.19.15",
|
"toml_edit 0.19.15",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro-crate"
|
|
||||||
version = "3.2.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
|
|
||||||
dependencies = [
|
|
||||||
"toml_edit 0.22.20",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.86"
|
version = "1.0.86"
|
||||||
@@ -4452,7 +4444,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_spanned",
|
"serde_spanned",
|
||||||
"toml_datetime",
|
"toml_datetime",
|
||||||
"toml_edit 0.22.20",
|
"toml_edit 0.22.21",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4477,9 +4469,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_edit"
|
name = "toml_edit"
|
||||||
version = "0.22.20"
|
version = "0.22.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
|
checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -15,3 +15,4 @@ nostrdb = { git = "https://github.com/damus-io/nostrdb-rs", rev = "9bbafd8a2e904
|
|||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.40"
|
||||||
env_logger = "0.11.1"
|
env_logger = "0.11.1"
|
||||||
|
url = "2.5.2"
|
||||||
|
|||||||
@@ -90,7 +90,17 @@ impl<'a> RelayMessage<'a> {
|
|||||||
// Event
|
// Event
|
||||||
// Relay response format: ["EVENT", <subscription id>, <event JSON>]
|
// Relay response format: ["EVENT", <subscription id>, <event JSON>]
|
||||||
if &msg[0..=7] == "[\"EVENT\"" {
|
if &msg[0..=7] == "[\"EVENT\"" {
|
||||||
return Ok(Self::event(msg, "fixme"));
|
let mut start = 9;
|
||||||
|
while let Some(&b' ') = msg.as_bytes().get(start) {
|
||||||
|
start += 1; // Move past optional spaces
|
||||||
|
}
|
||||||
|
if let Some(comma_index) = msg[start..].find(',') {
|
||||||
|
let subid_end = start + comma_index;
|
||||||
|
let subid = &msg[start..subid_end].trim().trim_matches('"');
|
||||||
|
return Ok(Self::event(msg, subid));
|
||||||
|
} else {
|
||||||
|
return Ok(Self::event(msg, "fixme"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// EOSE (NIP-15)
|
// EOSE (NIP-15)
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ use nostrdb::Filter;
|
|||||||
|
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
use ewebsock::{WsEvent, WsMessage};
|
use ewebsock::{WsEvent, WsMessage};
|
||||||
|
|
||||||
@@ -152,6 +154,11 @@ impl RelayPool {
|
|||||||
url: String,
|
url: String,
|
||||||
wakeup: impl Fn() + Send + Sync + Clone + 'static,
|
wakeup: impl Fn() + Send + Sync + Clone + 'static,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
let url = Self::canonicalize_url(url);
|
||||||
|
// Check if the URL already exists in the pool.
|
||||||
|
if self.has(&url) {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
let relay = Relay::new(url, wakeup)?;
|
let relay = Relay::new(url, wakeup)?;
|
||||||
let pool_relay = PoolRelay::new(relay);
|
let pool_relay = PoolRelay::new(relay);
|
||||||
|
|
||||||
@@ -160,6 +167,14 @@ impl RelayPool {
|
|||||||
Ok(())
|
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
|
/// Attempts to receive a pool event from a list of relays. The
|
||||||
/// function searches each relay in the list in order, attempting to
|
/// function searches each relay in the list in order, attempting to
|
||||||
/// receive a message from each. If a message is received, return it.
|
/// receive a message from each. If a message is received, return it.
|
||||||
|
|||||||
Reference in New Issue
Block a user