feat: return id of added message

The feature is only implemented for the message save and template save
commands. Other commands like message send copy move don't return the
added id.

Refs: #627
This commit is contained in:
Clément DOUIN
2026-02-12 12:54:19 +01:00
parent dd0f4bb2a3
commit 018156fe41
2 changed files with 65 additions and 13 deletions
+32 -7
View File
@@ -1,14 +1,17 @@
use std::{
fmt,
io::{self, BufRead, IsTerminal},
sync::Arc,
};
use clap::Parser;
use color_eyre::Result;
use email::{backend::feature::BackendFeatureSource, config::Config};
use email::{backend::feature::BackendFeatureSource, config::Config, envelope::SingleId};
use pimalaya_tui::{
himalaya::backend::BackendBuilder,
terminal::{cli::printer::Printer, config::TomlConfig as _},
};
use std::{
io::{self, BufRead, IsTerminal},
sync::Arc,
};
use serde::{ser::SerializeStruct, Serialize, Serializer};
use tracing::info;
use crate::{
@@ -69,8 +72,30 @@ impl MessageSaveCommand {
.join("\r\n")
};
backend.add_message(folder, msg.as_bytes()).await?;
let id = backend.add_message(folder, msg.as_bytes()).await?;
printer.out(format!("Message successfully saved to {folder}!\n"))
printer.out(MessageAdded { folder, id })
}
}
struct MessageAdded<'a> {
folder: &'a String,
id: SingleId,
}
impl fmt::Display for MessageAdded<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let id = self.id.as_str();
let folder = self.folder;
writeln!(f, "Message {id} successfully saved to {folder}")
}
}
impl Serialize for MessageAdded<'_> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
let mut state = serializer.serialize_struct("MessageAdded", 2)?;
state.serialize_field("folder", self.folder)?;
state.serialize_field("id", self.id.as_str())?;
state.end()
}
}
+33 -6
View File
@@ -1,15 +1,18 @@
use std::{
fmt,
io::{self, BufRead, IsTerminal},
sync::Arc,
};
use clap::Parser;
use color_eyre::Result;
use email::{backend::feature::BackendFeatureSource, config::Config};
use email::{backend::feature::BackendFeatureSource, config::Config, envelope::SingleId};
use mml::MmlCompilerBuilder;
use pimalaya_tui::{
himalaya::backend::BackendBuilder,
terminal::{cli::printer::Printer, config::TomlConfig as _},
};
use std::{
io::{self, BufRead, IsTerminal},
sync::Arc,
};
use serde::{ser::SerializeStruct, Serialize, Serializer};
use tracing::info;
use crate::{
@@ -85,6 +88,30 @@ impl TemplateSaveCommand {
backend.add_message(folder, &msg).await?;
printer.out(format!("Template successfully saved to {folder}!\n"))
let id = backend.add_message(folder, &msg).await?;
printer.out(TemplateAdded { folder, id })
}
}
struct TemplateAdded<'a> {
folder: &'a String,
id: SingleId,
}
impl fmt::Display for TemplateAdded<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let id = self.id.as_str();
let folder = self.folder;
writeln!(f, "Template {id} successfully saved to {folder}")
}
}
impl Serialize for TemplateAdded<'_> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
let mut state = serializer.serialize_struct("TemplateAdded", 2)?;
state.serialize_field("folder", self.folder)?;
state.serialize_field("id", self.id.as_str())?;
state.end()
}
}