From c2de0f6b5ebabc2c587bbbf12c65a75dc2fe08ff Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Tue, 14 Feb 2023 18:05:42 -0800 Subject: [PATCH] Add auto update setting --- assets/settings/default.json | 2 ++ crates/auto_update/src/auto_update.rs | 19 ++++++++++++++++++- crates/settings/src/settings.rs | 6 ++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index bab998f72f..a4b95603e8 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -90,6 +90,8 @@ // Send anonymized usage data like what languages you're using Zed with. "metrics": true }, + // Automatically update Zed + "auto_update": true, // Git gutter behavior configuration. "git": { // Control whether the git gutter is shown. May take 2 values: diff --git a/crates/auto_update/src/auto_update.rs b/crates/auto_update/src/auto_update.rs index 19f4652005..4272d7b1af 100644 --- a/crates/auto_update/src/auto_update.rs +++ b/crates/auto_update/src/auto_update.rs @@ -9,6 +9,7 @@ use gpui::{ MutableAppContext, Task, WeakViewHandle, }; use serde::Deserialize; +use settings::Settings; use smol::{fs::File, io::AsyncReadExt, process::Command}; use std::{ffi::OsString, sync::Arc, time::Duration}; use update_notification::UpdateNotification; @@ -53,7 +54,23 @@ pub fn init(http_client: Arc, server_url: String, cx: &mut Mutab let server_url = server_url; let auto_updater = cx.add_model(|cx| { let updater = AutoUpdater::new(version, http_client, server_url.clone()); - updater.start_polling(cx).detach(); + + let mut update_subscription = cx + .global::() + .auto_update + .then(|| updater.start_polling(cx)); + + cx.observe_global::(move |updater, cx| { + if cx.global::().auto_update { + if update_subscription.is_none() { + *(&mut update_subscription) = Some(updater.start_polling(cx)) + } + } else { + (&mut update_subscription).take(); + } + }) + .detach(); + updater }); cx.set_global(Some(auto_updater)); diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 9c4b1f8044..21939b26b0 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -53,6 +53,7 @@ pub struct Settings { pub theme: Arc, pub telemetry_defaults: TelemetrySettings, pub telemetry_overrides: TelemetrySettings, + pub auto_update: bool, } #[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] @@ -312,6 +313,8 @@ pub struct SettingsFileContent { pub theme: Option, #[serde(default)] pub telemetry: TelemetrySettings, + #[serde(default)] + pub auto_update: Option, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] @@ -375,6 +378,7 @@ impl Settings { theme: themes.get(&defaults.theme.unwrap()).unwrap(), telemetry_defaults: defaults.telemetry, telemetry_overrides: Default::default(), + auto_update: defaults.auto_update.unwrap(), } } @@ -427,6 +431,7 @@ impl Settings { self.language_overrides = data.languages; self.telemetry_overrides = data.telemetry; self.lsp = data.lsp; + merge(&mut self.auto_update, data.auto_update); } pub fn with_language_defaults( @@ -573,6 +578,7 @@ impl Settings { metrics: Some(true), }, telemetry_overrides: Default::default(), + auto_update: true, } }