mostro_client/cli/
get_dm.rs

1use anyhow::Result;
2use mostro_core::prelude::Message;
3
4use crate::{
5    cli::Context,
6    parser::dms::print_direct_messages,
7    util::{fetch_events_list, Event, ListKind},
8};
9
10pub async fn execute_get_dm(
11    since: Option<&i64>,
12    admin: bool,
13    from_user: &bool,
14    ctx: &Context,
15) -> Result<()> {
16    // Get the list kind
17    let list_kind = match (admin, from_user) {
18        (true, true) => ListKind::PrivateDirectMessagesUser,
19        (true, false) => ListKind::DirectMessagesAdmin,
20        (false, true) => ListKind::PrivateDirectMessagesUser,
21        (false, false) => ListKind::DirectMessagesUser,
22    };
23
24    // Fetch the requested events
25    let all_fetched_events = { fetch_events_list(list_kind, None, None, None, ctx, since).await? };
26
27    // Extract (Message, u64) tuples from Event::MessageTuple variants
28    let mut dm_events: Vec<(Message, u64)> = Vec::new();
29    for event in all_fetched_events {
30        if let Event::MessageTuple(tuple) = event {
31            dm_events.push(*tuple);
32        }
33    }
34
35    print_direct_messages(&dm_events, &ctx.pool).await?;
36    Ok(())
37}