Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
274 changes: 144 additions & 130 deletions Cargo.lock

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ json5 = "1"
lazy_static = "1"
libc = "0.2"
log = "0.4"
nostr-sdk = "0.44"
nostr-sdk = "0.45"
nowhear = "0.5"
percent-encoding = "2"
ratatui = { version = "0.30", features = ["serde", "macros"] }
Expand All @@ -40,7 +40,6 @@ serde_json = "1"
signal-hook = "0.4"
sorted-vec = "0.8"
strip-ansi-escapes = "0.2"
strum = { version = "0.28", features = ["derive"] }
tears = "0.10.2"
thousands = "0.2"
tokio = { version = "1", features = ["full"] }
Expand Down
14 changes: 8 additions & 6 deletions src/application/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -306,10 +306,11 @@ impl<'a> AppState<'a> {
let event_builder = if let Some(reply_to_event) = self.editor.reply_target() {
log::info!("Publishing reply: {content}");
// Build NIP-10 reply tags (root/reply markers, deduped p-tag).
EventBuilder::text_note(&content).tags(ReplyTagsBuilder::build(reply_to_event.clone()))
EventBuilder::new(Kind::TextNote, &content)
.tags(ReplyTagsBuilder::build(reply_to_event.clone()))
} else {
log::info!("Publishing note: {content}");
EventBuilder::text_note(&content)
EventBuilder::new(Kind::TextNote, &content)
};

let outcome = self
Expand Down Expand Up @@ -609,6 +610,7 @@ impl<'a> AppState<'a> {
mod tests {
use super::*;
use crate::domain::{nostr::Profile, text::shorten_npub};
use color_eyre::eyre::Result;
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use std::time::Duration;

Expand All @@ -625,9 +627,9 @@ mod tests {
}

fn create_text_note(keys: &Keys, content: &str, created_at: Timestamp) -> Result<Event> {
Ok(EventBuilder::text_note(content)
Ok(EventBuilder::new(Kind::TextNote, content)
.custom_created_at(created_at)
.sign_with_keys(keys)?)
.finalize(keys)?)
}

#[test]
Expand Down Expand Up @@ -803,7 +805,7 @@ mod tests {
let metadata = Metadata::new().name("alice").display_name("Alice");
let metadata_event = EventBuilder::new(Kind::Metadata, metadata.as_json())
.custom_created_at(Timestamp::from(1000))
.sign_with_keys(&author_keys)?;
.finalize(&author_keys)?;

let _ = state.process_nostr_event_for_tab(metadata_event, &FeedKind::Home);

Expand All @@ -830,7 +832,7 @@ mod tests {

let invalid_metadata_event = EventBuilder::new(Kind::Metadata, "not json")
.custom_created_at(Timestamp::from(1000))
.sign_with_keys(&author_keys)?;
.finalize(&author_keys)?;

let _ = state.process_nostr_event_for_tab(invalid_metadata_event, &FeedKind::Home);

Expand Down
3 changes: 2 additions & 1 deletion src/domain/collections.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,9 @@ impl fmt::Display for EventSet {
#[cfg(test)]
mod tests {
use super::*;
use nostr_sdk::nostr::{Kind, Timestamp};
use color_eyre::eyre::Result;
use nostr_sdk::prelude::Signature;
use nostr_sdk::prelude::{Kind, Timestamp};

fn create_test_event(id_suffix: u8, content: &str) -> Result<Event> {
let mut id_bytes = [0u8; 32];
Expand Down
37 changes: 16 additions & 21 deletions src/domain/nostr/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,25 +53,17 @@ impl Ord for SortableEventId {
/// their target event with an `e` tag; when multiple `e` tags are present, the
/// last one identifies the target. Returns `None` if there is no `e` tag.
pub fn find_event_id_from_last_e_tag(event: &Event) -> Option<EventId> {
event
.tags
.filter_standardized(TagKind::SingleLetter(SingleLetterTag::lowercase(
Alphabet::E,
)))
.last()
.and_then(|tag| match tag {
TagStandard::Event { event_id, .. } => Some(*event_id),
_ => None,
})
event.tags.event_ids().last()
}

#[cfg(test)]
mod tests {
use super::*;
use color_eyre::eyre::Result;

#[test]
fn test_sortable_event_id_creation() {
let event_id = EventId::all_zeros();
let event_id = EventId::from_byte_array([0; EventId::LEN]);
let timestamp = Timestamp::from(1000);

let sortable = SortableEventId::new(event_id, timestamp);
Expand All @@ -85,9 +77,9 @@ mod tests {
let keys = Keys::generate();
let timestamp = Timestamp::from(1234567890);

let event = EventBuilder::text_note("test")
let event = EventBuilder::new(Kind::TextNote, "test")
.custom_created_at(timestamp)
.sign_with_keys(&keys)?;
.finalize(&keys)?;

let sortable = SortableEventId::from_event(&event);

Expand All @@ -99,7 +91,7 @@ mod tests {

#[test]
fn test_sortable_event_id_ordering_by_timestamp() {
let event_id1 = EventId::all_zeros();
let event_id1 = EventId::from_byte_array([0; EventId::LEN]);
let event_id2 = EventId::from_slice(&[1u8; 32]).expect("Valid event ID");

let older = SortableEventId::new(event_id1, Timestamp::from(1000));
Expand All @@ -126,7 +118,7 @@ mod tests {

#[test]
fn test_sortable_event_id_equality() {
let event_id = EventId::all_zeros();
let event_id = EventId::from_byte_array([0; EventId::LEN]);
let timestamp = Timestamp::from(1000);

let sortable1 = SortableEventId::new(event_id, timestamp);
Expand All @@ -142,7 +134,10 @@ mod tests {

let mut set: ReverseSortedSet<SortableEventId> = ReverseSortedSet::new();

let id1 = SortableEventId::new(EventId::all_zeros(), Timestamp::from(1000));
let id1 = SortableEventId::new(
EventId::from_byte_array([0; EventId::LEN]),
Timestamp::from(1000),
);
let id2 = SortableEventId::new(
EventId::from_slice(&[1u8; 32]).expect("Valid"),
Timestamp::from(2000),
Expand All @@ -165,11 +160,11 @@ mod tests {
#[test]
fn test_find_event_id_from_last_e_tag() {
let keys = Keys::generate();
let target_id = EventId::all_zeros();
let target_id = EventId::from_byte_array([0; EventId::LEN]);

let event = EventBuilder::new(Kind::Reaction, "+")
.tags(vec![Tag::event(target_id)])
.sign_with_keys(&keys)
.finalize(&keys)
.expect("Failed to create event");

let found_id = find_event_id_from_last_e_tag(&event);
Expand All @@ -179,12 +174,12 @@ mod tests {
#[test]
fn test_find_event_id_from_last_e_tag_multiple_tags() {
let keys = Keys::generate();
let first_id = EventId::all_zeros();
let first_id = EventId::from_byte_array([0; EventId::LEN]);
let last_id = EventId::from_slice(&[1u8; 32]).expect("Valid event ID");

let event = EventBuilder::new(Kind::Reaction, "+")
.tags(vec![Tag::event(first_id), Tag::event(last_id)])
.sign_with_keys(&keys)
.finalize(&keys)
.expect("Failed to create event");

// Should return the last 'e' tag
Expand All @@ -197,7 +192,7 @@ mod tests {
let keys = Keys::generate();

let event = EventBuilder::new(Kind::Reaction, "+")
.sign_with_keys(&keys)
.finalize(&keys)
.expect("Failed to create event");

let found_id = find_event_id_from_last_e_tag(&event);
Expand Down
Loading
Loading