Skip to content

Commit 9e0ec9a

Browse files
authored
Merge pull request #145 from MostroP2P/split-util
refactor: Split big utils.rs file in a module for being more usable
2 parents 9497978 + 3fe4c33 commit 9e0ec9a

13 files changed

Lines changed: 609 additions & 634 deletions

File tree

src/cli/get_dm.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use anyhow::Result;
22
use mostro_core::prelude::Message;
3+
use nostr_sdk::prelude::*;
34

45
use crate::{
56
cli::Context,
@@ -26,7 +27,7 @@ pub async fn execute_get_dm(
2627
fetch_events_list(list_kind, None, None, None, ctx, Some(since)).await?;
2728

2829
// Extract (Message, u64) tuples from Event::MessageTuple variants
29-
let mut dm_events: Vec<(Message, u64)> = Vec::new();
30+
let mut dm_events: Vec<(Message, u64, PublicKey)> = Vec::new();
3031
for event in all_fetched_events {
3132
if let Event::MessageTuple(tuple) = event {
3233
dm_events.push(*tuple);

src/cli/get_dm_user.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
use crate::cli::Context;
2-
use crate::{db::Order, util::get_direct_messages_from_trade_keys};
2+
use crate::db::Order;
3+
use crate::util::{fetch_events_list, Event, ListKind};
34
use anyhow::Result;
45
use comfy_table::modifiers::UTF8_ROUND_CORNERS;
56
use comfy_table::presets::UTF8_FULL;
67
use comfy_table::Table;
78
use mostro_core::prelude::*;
9+
use nostr_sdk::prelude::*;
810

911
pub async fn execute_get_dm_user(since: &i64, ctx: &Context) -> Result<()> {
1012
// Get all trade keys from orders
@@ -19,28 +21,41 @@ pub async fn execute_get_dm_user(since: &i64, ctx: &Context) -> Result<()> {
1921
trade_keys_hex.sort();
2022
trade_keys_hex.dedup();
2123

24+
// Check if the trade keys are empty
2225
if trade_keys_hex.is_empty() {
2326
println!("No trade keys found in orders");
2427
return Ok(());
2528
}
2629

30+
// Print the number of trade keys
2731
println!(
2832
"Searching for DMs in {} trade keys...",
2933
trade_keys_hex.len()
3034
);
3135

32-
let direct_messages = get_direct_messages_from_trade_keys(
33-
&ctx.client,
34-
trade_keys_hex,
35-
*since,
36-
&ctx.mostro_pubkey,
36+
let direct_messages = fetch_events_list(
37+
ListKind::DirectMessagesUser,
38+
None,
39+
None,
40+
None,
41+
ctx,
42+
Some(since),
3743
)
3844
.await?;
3945

46+
// Extract (Message, u64) tuples from Event::MessageTuple variants
47+
let mut dm_events: Vec<(Message, u64, PublicKey)> = Vec::new();
48+
// Check if the direct messages are empty
4049
if direct_messages.is_empty() {
4150
println!("You don't have any direct messages in your trade keys");
4251
return Ok(());
4352
}
53+
// Extract the direct messages
54+
for event in direct_messages {
55+
if let Event::MessageTuple(tuple) = event {
56+
dm_events.push(*tuple);
57+
}
58+
}
4459

4560
let mut table = Table::new();
4661
table
@@ -49,7 +64,7 @@ pub async fn execute_get_dm_user(since: &i64, ctx: &Context) -> Result<()> {
4964
.set_content_arrangement(comfy_table::ContentArrangement::Dynamic)
5065
.set_header(vec!["Time", "From", "Message"]);
5166

52-
for (message, created_at, sender_pubkey) in direct_messages.iter() {
67+
for (message, created_at, sender_pubkey) in dm_events.iter() {
5368
let datetime = chrono::DateTime::from_timestamp(*created_at as i64, 0);
5469
let formatted_date = match datetime {
5570
Some(dt) => dt.format("%Y-%m-%d %H:%M:%S").to_string(),

src/cli/rate_user.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ use uuid::Uuid;
55

66
const RATING_BOUNDARIES: [u8; 5] = [1, 2, 3, 4, 5];
77

8-
use crate::{cli::Context, db::Order, util::send_dm};
8+
use crate::{
9+
cli::Context,
10+
db::Order,
11+
util::{print_dm_events, send_dm, wait_for_dm},
12+
};
913

1014
// Get the user rate
1115
fn get_user_rate(rating: &u8) -> Result<Payload> {
@@ -44,16 +48,23 @@ pub async fn execute_rate_user(order_id: &Uuid, rating: &u8, ctx: &Context) -> R
4448
.as_json()
4549
.map_err(|_| anyhow::anyhow!("Failed to serialize message"))?;
4650

47-
send_dm(
51+
let sent_message = send_dm(
4852
&ctx.client,
4953
Some(&ctx.identity_keys),
5054
&trade_keys,
5155
&ctx.mostro_pubkey,
5256
rate_message,
5357
None,
5458
false,
55-
)
56-
.await?;
59+
);
60+
61+
// Wait for incoming DM
62+
let recv_event = wait_for_dm(ctx, Some(&trade_keys), sent_message).await?;
63+
64+
// Parse the incoming DM
65+
// use a fake request id
66+
let fake_request_id = Uuid::new_v4().as_u128() as u64;
67+
print_dm_events(recv_event, fake_request_id, ctx, Some(&trade_keys)).await?;
5768

5869
Ok(())
5970
}

src/parser/dms.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,8 @@ pub async fn print_commands_results(message: &MessageKind, ctx: &Context) -> Res
165165
Err(anyhow::anyhow!("No order id found in message"))
166166
}
167167
}
168-
Action::Rate => {
169-
println!("Sats released!");
170-
println!("You can rate the counterpart now");
168+
Action::RateReceived => {
169+
println!("Rate received! Thank you!");
171170
Ok(())
172171
}
173172
Action::FiatSentOk => {
@@ -217,7 +216,7 @@ pub async fn print_commands_results(message: &MessageKind, ctx: &Context) -> Res
217216
Ok(())
218217
}
219218
}
220-
Action::HoldInvoicePaymentSettled => {
219+
Action::HoldInvoicePaymentSettled | Action::Released => {
221220
println!("Hold invoice payment settled");
222221
Ok(())
223222
}
@@ -317,7 +316,10 @@ pub async fn parse_dm_events(
317316
direct_messages
318317
}
319318

320-
pub async fn print_direct_messages(dm: &[(Message, u64)], pool: &SqlitePool) -> Result<()> {
319+
pub async fn print_direct_messages(
320+
dm: &[(Message, u64, PublicKey)],
321+
pool: &SqlitePool,
322+
) -> Result<()> {
321323
if dm.is_empty() {
322324
println!();
323325
println!("No new messages");

0 commit comments

Comments
 (0)