diff --git a/src/download/post_msg_metadata.rs b/src/download/post_msg_metadata.rs index ee10640c5..705a71a71 100644 --- a/src/download/post_msg_metadata.rs +++ b/src/download/post_msg_metadata.rs @@ -41,6 +41,14 @@ impl PostMsgMetadata { .get(Param::Filename) .unwrap_or_default() .to_owned(); + let filename = match message.viewtype { + Viewtype::Webxdc => message + .get_webxdc_info(context) + .await + .map(|info| info.name) + .unwrap_or_else(|_| filename), + _ => filename, + }; let wh = { match ( message.param.get_int(Param::Width), diff --git a/src/summary.rs b/src/summary.rs index 9b0c5e154..f116e56c8 100644 --- a/src/summary.rs +++ b/src/summary.rs @@ -231,7 +231,7 @@ impl Message { .unwrap_or_else(|_| "ErrWebxdcName".to_string()), ); } else { - type_file = Some(viewtype.to_locale_string(context).await); + type_file = self.get_filename(); } append_text = true; } diff --git a/src/tests/pre_messages/receiving.rs b/src/tests/pre_messages/receiving.rs index 0657f523f..cb28eda19 100644 --- a/src/tests/pre_messages/receiving.rs +++ b/src/tests/pre_messages/receiving.rs @@ -79,17 +79,22 @@ async fn test_receive_pre_message() -> Result<()> { assert_eq!(msg.get_filename(), Some("test.bin".to_owned())); assert_summary_texts(&msg, bob, "📎 test.bin – test").await; - // Some viewtypes are displayed unwell currently, still test them. - + // Webxdc w/o manifest. let (pre_message, ..) = send_large_webxdc_message(alice, alice_group_id).await?; let msg = bob.recv_msg(&pre_message).await; assert_eq!(msg.download_state, DownloadState::Available); - assert_summary_texts( - &msg, - bob, - &format!("📱 {} – test", Viewtype::Webxdc.to_locale_string(bob).await), + assert_summary_texts(&msg, bob, "📱 test.xdc – test").await; + + let (pre_message, ..) = send_large_file_message( + alice, + alice_group_id, + Viewtype::Webxdc, + include_bytes!("../../../test-data/webxdc/timetracking-v0.10.1.xdc"), ) - .await; + .await?; + let msg = bob.recv_msg(&pre_message).await; + assert_eq!(msg.download_state, DownloadState::Available); + assert_summary_texts(&msg, bob, "📱 TimeTracking – test").await; let (pre_message, ..) = send_large_file_message( alice, @@ -114,6 +119,33 @@ async fn test_receive_pre_message() -> Result<()> { Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn test_receive_webxdc() -> Result<()> { + let mut tcm = TestContextManager::new(); + let alice = &tcm.alice().await; + let bob = &tcm.bob().await; + let alice_group_id = alice.create_group_with_members("", &[bob]).await; + + let (pre_msg, post_msg, _) = send_large_file_message( + alice, + alice_group_id, + Viewtype::Webxdc, + include_bytes!("../../../test-data/webxdc/timetracking-v0.10.1.xdc"), + ) + .await?; + let msg = bob.recv_msg(&pre_msg).await; + assert_eq!(msg.download_state, DownloadState::Available); + assert_summary_texts(&msg, bob, "📱 TimeTracking – test").await; + assert_eq!(msg.get_filename().unwrap(), "TimeTracking"); + + bob.recv_msg_trash(&post_msg).await; + let msg = Message::load_from_db(bob, msg.id).await?; + assert_eq!(msg.download_state, DownloadState::Done); + assert_summary_texts(&msg, bob, "📱 TimeTracking – test").await; + assert_eq!(msg.get_filename().unwrap(), "test.xdc"); + Ok(()) +} + /// Test receiving the Post-Message after receiving the pre-message /// for file attachment #[tokio::test(flavor = "multi_thread", worker_threads = 2)] diff --git a/test-data/webxdc/timetracking-v0.10.1.xdc b/test-data/webxdc/timetracking-v0.10.1.xdc new file mode 100644 index 000000000..fafe51d72 Binary files /dev/null and b/test-data/webxdc/timetracking-v0.10.1.xdc differ