Skip to content

Commit 69fbb98

Browse files
authored
api: Add Message::new_text() (#6123)
This adds a function to `Message`: ```rust pub fn new_text(text: String) -> Self { Message { viewtype: Viewtype::Text, text, ..Default::default() } } ``` I keep expecting that a function like this must exist and being surprised that it doesn't. Open question is whether it should be `pub` or `pub(crate)` - I made it `pub` for now because it may be useful for others and we currently we aren't thinking about the Rust API that much, anyway, but I can make it `pub(crate)`, too (then it can't be used in deltachat-jsonrpc and deltachat-repl). I replaced some usages of Message::new(Viewtype::Text), but not all yet, I'm going to do this in a follow-up, which will remove another around 65 LOC.
1 parent c98d381 commit 69fbb98

File tree

4 files changed

+35
-55
lines changed

4 files changed

+35
-55
lines changed

deltachat-jsonrpc/src/api.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,8 +2118,7 @@ impl CommandApi {
21182118
) -> Result<u32> {
21192119
let ctx = self.get_context(account_id).await?;
21202120

2121-
let mut msg = Message::new(Viewtype::Text);
2122-
msg.set_text(text);
2121+
let mut msg = Message::new_text(text);
21232122

21242123
let message_id = deltachat::chat::send_msg(&ctx, ChatId::new(chat_id), &mut msg).await?;
21252124
Ok(message_id.to_u32())

deltachat-repl/src/cmdline.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,8 +1004,7 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu
10041004
ensure!(sel_chat.is_some(), "No chat selected.");
10051005

10061006
if !arg1.is_empty() {
1007-
let mut draft = Message::new(Viewtype::Text);
1008-
draft.set_text(arg1.to_string());
1007+
let mut draft = Message::new_text(arg1.to_string());
10091008
sel_chat
10101009
.as_ref()
10111010
.unwrap()
@@ -1028,8 +1027,7 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu
10281027
!arg1.is_empty(),
10291028
"Please specify text to add as device message."
10301029
);
1031-
let mut msg = Message::new(Viewtype::Text);
1032-
msg.set_text(arg1.to_string());
1030+
let mut msg = Message::new_text(arg1.to_string());
10331031
chat::add_device_msg(&context, None, Some(&mut msg)).await?;
10341032
}
10351033
"listmedia" => {

src/chat.rs

Lines changed: 23 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -797,8 +797,7 @@ impl ChatId {
797797
context.scheduler.interrupt_inbox().await;
798798

799799
if chat.is_self_talk() {
800-
let mut msg = Message::new(Viewtype::Text);
801-
msg.text = stock_str::self_deleted_msg_body(context).await;
800+
let mut msg = Message::new_text(stock_str::self_deleted_msg_body(context).await);
802801
add_device_msg(context, None, Some(&mut msg)).await?;
803802
}
804803
chatlist_events::emit_chatlist_changed(context);
@@ -3106,8 +3105,7 @@ pub async fn send_text_msg(
31063105
chat_id
31073106
);
31083107

3109-
let mut msg = Message::new(Viewtype::Text);
3110-
msg.text = text_to_send;
3108+
let mut msg = Message::new_text(text_to_send);
31113109
send_msg(context, chat_id, &mut msg).await
31123110
}
31133111

@@ -4780,8 +4778,7 @@ mod tests {
47804778
async fn test_get_draft() {
47814779
let t = TestContext::new().await;
47824780
let chat_id = &t.get_self_chat().await.id;
4783-
let mut msg = Message::new(Viewtype::Text);
4784-
msg.set_text("hello".to_string());
4781+
let mut msg = Message::new_text("hello".to_string());
47854782

47864783
chat_id.set_draft(&t, Some(&mut msg)).await.unwrap();
47874784
let draft = chat_id.get_draft(&t).await.unwrap().unwrap();
@@ -4795,13 +4792,11 @@ mod tests {
47954792
let t = TestContext::new_alice().await;
47964793
let chat_id = create_group_chat(&t, ProtectionStatus::Unprotected, "abc").await?;
47974794

4798-
let mut msg = Message::new(Viewtype::Text);
4799-
msg.set_text("hi!".to_string());
4795+
let mut msg = Message::new_text("hi!".to_string());
48004796
chat_id.set_draft(&t, Some(&mut msg)).await?;
48014797
assert!(chat_id.get_draft(&t).await?.is_some());
48024798

4803-
let mut msg = Message::new(Viewtype::Text);
4804-
msg.set_text("another".to_string());
4799+
let mut msg = Message::new_text("another".to_string());
48054800
chat_id.set_draft(&t, Some(&mut msg)).await?;
48064801
assert!(chat_id.get_draft(&t).await?.is_some());
48074802

@@ -4815,8 +4810,7 @@ mod tests {
48154810
async fn test_forwarding_draft_failing() -> Result<()> {
48164811
let t = TestContext::new_alice().await;
48174812
let chat_id = &t.get_self_chat().await.id;
4818-
let mut msg = Message::new(Viewtype::Text);
4819-
msg.set_text("hello".to_string());
4813+
let mut msg = Message::new_text("hello".to_string());
48204814
chat_id.set_draft(&t, Some(&mut msg)).await?;
48214815
assert_eq!(msg.id, chat_id.get_draft(&t).await?.unwrap().id);
48224816

@@ -4829,8 +4823,7 @@ mod tests {
48294823
async fn test_draft_stable_ids() -> Result<()> {
48304824
let t = TestContext::new_alice().await;
48314825
let chat_id = &t.get_self_chat().await.id;
4832-
let mut msg = Message::new(Viewtype::Text);
4833-
msg.set_text("hello".to_string());
4826+
let mut msg = Message::new_text("hello".to_string());
48344827
assert_eq!(msg.id, MsgId::new_unset());
48354828
assert!(chat_id.get_draft_msg_id(&t).await?.is_none());
48364829

@@ -4876,11 +4869,7 @@ mod tests {
48764869
let chat_id = create_group_chat(&t, ProtectionStatus::Unprotected, "abc").await?;
48774870

48784871
let msgs: Vec<message::Message> = (1..=1000)
4879-
.map(|i| {
4880-
let mut msg = Message::new(Viewtype::Text);
4881-
msg.set_text(i.to_string());
4882-
msg
4883-
})
4872+
.map(|i| Message::new_text(i.to_string()))
48844873
.collect();
48854874
let mut tasks = Vec::new();
48864875
for mut msg in msgs {
@@ -4913,8 +4902,7 @@ mod tests {
49134902
.await?;
49144903

49154904
// save a draft
4916-
let mut draft = Message::new(Viewtype::Text);
4917-
draft.set_text("draft text".to_string());
4905+
let mut draft = Message::new_text("draft text".to_string());
49184906
chat_id.set_draft(&t, Some(&mut draft)).await?;
49194907

49204908
let test = Message::load_from_db(&t, draft.id).await?;
@@ -4967,29 +4955,25 @@ mod tests {
49674955
let one2one_msg = Message::load_from_db(&alice, one2one_msg_id).await?;
49684956

49694957
// quoting messages in same chat is okay
4970-
let mut msg = Message::new(Viewtype::Text);
4971-
msg.set_text("baz".to_string());
4958+
let mut msg = Message::new_text("baz".to_string());
49724959
msg.set_quote(&alice, Some(&grp_msg)).await?;
49734960
let result = send_msg(&alice, grp_chat_id, &mut msg).await;
49744961
assert!(result.is_ok());
49754962

4976-
let mut msg = Message::new(Viewtype::Text);
4977-
msg.set_text("baz".to_string());
4963+
let mut msg = Message::new_text("baz".to_string());
49784964
msg.set_quote(&alice, Some(&one2one_msg)).await?;
49794965
let result = send_msg(&alice, one2one_chat_id, &mut msg).await;
49804966
assert!(result.is_ok());
49814967
let one2one_quote_reply_msg_id = result.unwrap();
49824968

49834969
// quoting messages from groups to one-to-ones is okay ("reply privately")
4984-
let mut msg = Message::new(Viewtype::Text);
4985-
msg.set_text("baz".to_string());
4970+
let mut msg = Message::new_text("baz".to_string());
49864971
msg.set_quote(&alice, Some(&grp_msg)).await?;
49874972
let result = send_msg(&alice, one2one_chat_id, &mut msg).await;
49884973
assert!(result.is_ok());
49894974

49904975
// quoting messages from one-to-one chats in groups is an error; usually this is also not allowed by UI at all ...
4991-
let mut msg = Message::new(Viewtype::Text);
4992-
msg.set_text("baz".to_string());
4976+
let mut msg = Message::new_text("baz".to_string());
49934977
msg.set_quote(&alice, Some(&one2one_msg)).await?;
49944978
let result = send_msg(&alice, grp_chat_id, &mut msg).await;
49954979
assert!(result.is_err());
@@ -5481,13 +5465,11 @@ mod tests {
54815465
let t = TestContext::new().await;
54825466

54835467
// add two device-messages
5484-
let mut msg1 = Message::new(Viewtype::Text);
5485-
msg1.set_text("first message".to_string());
5468+
let mut msg1 = Message::new_text("first message".to_string());
54865469
let msg1_id = add_device_msg(&t, None, Some(&mut msg1)).await;
54875470
assert!(msg1_id.is_ok());
54885471

5489-
let mut msg2 = Message::new(Viewtype::Text);
5490-
msg2.set_text("second message".to_string());
5472+
let mut msg2 = Message::new_text("second message".to_string());
54915473
let msg2_id = add_device_msg(&t, None, Some(&mut msg2)).await;
54925474
assert!(msg2_id.is_ok());
54935475
assert_ne!(msg1_id.as_ref().unwrap(), msg2_id.as_ref().unwrap());
@@ -5516,14 +5498,12 @@ mod tests {
55165498
let t = TestContext::new().await;
55175499

55185500
// add two device-messages with the same label (second attempt is not added)
5519-
let mut msg1 = Message::new(Viewtype::Text);
5520-
msg1.text = "first message".to_string();
5501+
let mut msg1 = Message::new_text("first message".to_string());
55215502
let msg1_id = add_device_msg(&t, Some("any-label"), Some(&mut msg1)).await;
55225503
assert!(msg1_id.is_ok());
55235504
assert!(!msg1_id.as_ref().unwrap().is_unset());
55245505

5525-
let mut msg2 = Message::new(Viewtype::Text);
5526-
msg2.text = "second message".to_string();
5506+
let mut msg2 = Message::new_text("second message".to_string());
55275507
let msg2_id = add_device_msg(&t, Some("any-label"), Some(&mut msg2)).await;
55285508
assert!(msg2_id.is_ok());
55295509
assert!(msg2_id.as_ref().unwrap().is_unset());
@@ -5570,8 +5550,7 @@ mod tests {
55705550
let res = add_device_msg(&t, Some("some-label"), None).await;
55715551
assert!(res.is_ok());
55725552

5573-
let mut msg = Message::new(Viewtype::Text);
5574-
msg.set_text("message text".to_string());
5553+
let mut msg = Message::new_text("message text".to_string());
55755554

55765555
let msg_id = add_device_msg(&t, Some("some-label"), Some(&mut msg)).await;
55775556
assert!(msg_id.is_ok());
@@ -5588,8 +5567,7 @@ mod tests {
55885567
add_device_msg(&t, Some("some-label"), None).await.ok();
55895568
assert!(was_device_msg_ever_added(&t, "some-label").await.unwrap());
55905569

5591-
let mut msg = Message::new(Viewtype::Text);
5592-
msg.set_text("message text".to_string());
5570+
let mut msg = Message::new_text("message text".to_string());
55935571
add_device_msg(&t, Some("another-label"), Some(&mut msg))
55945572
.await
55955573
.ok();
@@ -5606,8 +5584,7 @@ mod tests {
56065584
async fn test_delete_device_chat() {
56075585
let t = TestContext::new().await;
56085586

5609-
let mut msg = Message::new(Viewtype::Text);
5610-
msg.set_text("message text".to_string());
5587+
let mut msg = Message::new_text("message text".to_string());
56115588
add_device_msg(&t, Some("some-label"), Some(&mut msg))
56125589
.await
56135590
.ok();
@@ -5630,8 +5607,7 @@ mod tests {
56305607
.await
56315608
.unwrap();
56325609

5633-
let mut msg = Message::new(Viewtype::Text);
5634-
msg.set_text("message text".to_string());
5610+
let mut msg = Message::new_text("message text".to_string());
56355611
assert!(send_msg(&t, device_chat_id, &mut msg).await.is_err());
56365612
assert!(prepare_msg(&t, device_chat_id, &mut msg).await.is_err());
56375613

@@ -5642,8 +5618,7 @@ mod tests {
56425618
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
56435619
async fn test_delete_and_reset_all_device_msgs() {
56445620
let t = TestContext::new().await;
5645-
let mut msg = Message::new(Viewtype::Text);
5646-
msg.set_text("message text".to_string());
5621+
let mut msg = Message::new_text("message text".to_string());
56475622
let msg_id1 = add_device_msg(&t, Some("some-label"), Some(&mut msg))
56485623
.await
56495624
.unwrap();
@@ -5675,8 +5650,7 @@ mod tests {
56755650
async fn test_archive() {
56765651
// create two chats
56775652
let t = TestContext::new().await;
5678-
let mut msg = Message::new(Viewtype::Text);
5679-
msg.set_text("foo".to_string());
5653+
let mut msg = Message::new_text("foo".to_string());
56805654
let msg_id = add_device_msg(&t, None, Some(&mut msg)).await.unwrap();
56815655
let chat_id1 = message::Message::load_from_db(&t, msg_id)
56825656
.await

src/message.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,15 @@ impl Message {
491491
}
492492
}
493493

494+
/// Creates a new message with Viewtype::Text.
495+
pub fn new_text(text: String) -> Self {
496+
Message {
497+
viewtype: Viewtype::Text,
498+
text,
499+
..Default::default()
500+
}
501+
}
502+
494503
/// Loads message with given ID from the database.
495504
///
496505
/// Returns an error if the message does not exist.

0 commit comments

Comments
 (0)