diff --git a/crates/feedback/src/feedback.rs b/crates/feedback/src/feedback.rs index c1a23b42dd916257bf8ed4e7ac64ee3d258076c6..0cfe9d3c21493493629362a6475f5f6e7f71e083 100644 --- a/crates/feedback/src/feedback.rs +++ b/crates/feedback/src/feedback.rs @@ -22,8 +22,6 @@ const ZED_REPO_URL: &str = "https://github.com/zed-industries/zed"; const REQUEST_FEATURE_URL: &str = "https://github.com/zed-industries/zed/discussions/new/choose"; -const EMAIL_ZED_URL: &str = "mailto:hi@zed.dev"; - fn file_bug_report_url(specs: &SystemSpecs) -> String { format!( concat!( @@ -37,6 +35,18 @@ fn file_bug_report_url(specs: &SystemSpecs) -> String { ) } +fn email_zed_url(specs: &SystemSpecs) -> String { + format!( + concat!("mailto:hi@zed.dev", "?", "body={}"), + email_body(specs) + ) +} + +fn email_body(specs: &SystemSpecs) -> String { + let body = format!("\n\nSystem Information:\n\n{}", specs); + urlencoding::encode(&body).to_string() +} + pub fn init(cx: &mut App) { cx.observe_new(|workspace: &mut Workspace, window, cx| { let Some(window) = window else { @@ -79,8 +89,16 @@ pub fn init(cx: &mut App) { }) .detach(); }) - .register_action(move |_, _: &EmailZed, _, cx| { - cx.open_url(EMAIL_ZED_URL); + .register_action(move |_, _: &EmailZed, window, cx| { + let specs = SystemSpecs::new(window, cx); + cx.spawn_in(window, async move |_, cx| { + let specs = specs.await; + cx.update(|_, cx| { + cx.open_url(&email_zed_url(&specs)); + }) + .log_err(); + }) + .detach(); }) .register_action(move |_, _: &OpenZedRepo, _, cx| { cx.open_url(ZED_REPO_URL);