Compare commits
No commits in common. "0de4e2e55d58ea2fdd59f784ce254a76b178ee74" and "942e2fca75f6fb663c5e178ea972287edf821eca" have entirely different histories.
0de4e2e55d
...
942e2fca75
3 changed files with 14 additions and 34 deletions
|
@ -21,8 +21,7 @@ use rustyline::config::Configurer;
|
|||
use rustyline::error::ReadlineError;
|
||||
use rustyline::DefaultEditor;
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
use std::env;
|
||||
use std::env::{args};
|
||||
use std::env::{args, var};
|
||||
use std::fs;
|
||||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader, Write};
|
||||
|
@ -148,7 +147,7 @@ async fn main() -> Result<()> {
|
|||
.inspect(|_| { or_warn!(fs::remove_file(key_file)); }));
|
||||
}
|
||||
|
||||
let keys_entry = Entry::new("mostr", &env::var("MOSTR_ID").unwrap_or("keys".to_string()))?;
|
||||
let keys_entry = Entry::new("mostr", "keys")?;
|
||||
let keys =
|
||||
if args.peek().is_some_and(|arg| arg.trim_start_matches('-') == "import") {
|
||||
args.next();
|
||||
|
@ -190,7 +189,7 @@ async fn main() -> Result<()> {
|
|||
|
||||
let relays_file = config_dir.join("relays");
|
||||
// TODO use NewRelay message for all relays
|
||||
match env::var("MOSTR_RELAY") {
|
||||
match var("MOSTR_RELAY") {
|
||||
Ok(relay) => {
|
||||
or_warn!(client.add_relay(relay).await);
|
||||
}
|
||||
|
|
|
@ -158,7 +158,7 @@ impl TasksRelay {
|
|||
metadata: Option<Metadata>,
|
||||
) -> Self {
|
||||
let mut new = Self::with_sender(EventSender::from(url, tx, keys));
|
||||
metadata.map(|m| new.users.insert(keys.public_key(), m, Timestamp::now()));
|
||||
metadata.map(|m| new.users.insert(keys.public_key(), m));
|
||||
new
|
||||
}
|
||||
|
||||
|
@ -1228,7 +1228,7 @@ impl TasksRelay {
|
|||
match event.kind {
|
||||
Kind::GitIssue => self.add_task(event),
|
||||
Kind::Metadata => match Metadata::from_json(event.content.as_str()) {
|
||||
Ok(metadata) => { self.users.insert(event.pubkey, metadata, event.created_at); }
|
||||
Ok(metadata) => { self.users.insert(event.pubkey, metadata); }
|
||||
Err(e) => warn!("Cannot parse metadata: {} from {:?}", e, event),
|
||||
},
|
||||
Kind::Bookmarks => {
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
use itertools::Itertools;
|
||||
use nostr_sdk::{Keys, Metadata, PublicKey, Tag, Timestamp};
|
||||
use nostr_sdk::{Keys, Metadata, PublicKey, Tag};
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
use log::debug;
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Eq)]
|
||||
pub struct NostrUsers {
|
||||
users: HashMap<PublicKey, Metadata>,
|
||||
user_times: HashMap<PublicKey, Timestamp>,
|
||||
}
|
||||
|
||||
impl NostrUsers {
|
||||
|
@ -26,10 +23,7 @@ impl NostrUsers {
|
|||
if let Ok(key) = PublicKey::from_str(term) {
|
||||
return self.users.get_key_value(&key);
|
||||
}
|
||||
self.users.iter()
|
||||
.sorted_unstable_by_key(|(k, v)| self.get_user_time(k))
|
||||
.rev()
|
||||
.find(|(k, v)|
|
||||
self.users.iter().find(|(k, v)|
|
||||
// TODO regex word boundary
|
||||
v.name.as_ref().is_some_and(|n| n.to_ascii_lowercase().starts_with(term)) ||
|
||||
v.display_name.as_ref().is_some_and(|n| n.to_ascii_lowercase().starts_with(term)) ||
|
||||
|
@ -48,21 +42,8 @@ impl NostrUsers {
|
|||
.unwrap_or_else(|| format!("{:.6}", pubkey.to_string()))
|
||||
}
|
||||
|
||||
fn get_user_time(&self, pubkey: &PublicKey) -> u64 {
|
||||
match self.user_times.get(pubkey) {
|
||||
Some(t) => t.as_u64(),
|
||||
None => Timestamp::zero().as_u64(),
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn insert(&mut self, pubkey: PublicKey, metadata: Metadata, timestamp: Timestamp) {
|
||||
if self.get_user_time(&pubkey) < timestamp.as_u64() {
|
||||
debug!("Inserting user metadata for {}", pubkey);
|
||||
pub(super) fn insert(&mut self, pubkey: PublicKey, metadata: Metadata) {
|
||||
self.users.insert(pubkey, metadata);
|
||||
self.user_times.insert(pubkey, timestamp);
|
||||
} else {
|
||||
debug!("Skipping older user metadata for {}", pubkey);
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn create(&mut self, pubkey: PublicKey) {
|
||||
|
@ -76,7 +57,7 @@ impl NostrUsers {
|
|||
fn test_user_extract() {
|
||||
let keys = Keys::generate();
|
||||
let mut users = NostrUsers::default();
|
||||
users.insert(keys.public_key, Metadata::new().display_name("Tester Jo"), Timestamp::now());
|
||||
users.insert(keys.public_key, Metadata::new().display_name("Tester Jo"));
|
||||
assert_eq!(crate::kinds::extract_tags("Hello @test", &users),
|
||||
("Hello".to_string(), vec![Tag::public_key(keys.public_key)]));
|
||||
}
|
Loading…
Add table
Reference in a new issue