Do not allow [re]running ssh tasks when not connected to the server (#19306)

Kirill Bulatov created

Release Notes:

- N/A

Change summary

crates/tasks_ui/src/modal.rs  |  7 -------
crates/workspace/src/tasks.rs | 14 ++++++++++++++
2 files changed, 14 insertions(+), 7 deletions(-)

Detailed changes

crates/tasks_ui/src/modal.rs 🔗

@@ -384,13 +384,6 @@ impl PickerDelegate for TasksModalDelegate {
                 .start_slot::<Icon>(icon)
                 .end_slot::<AnyElement>(history_run_icon)
                 .spacing(ListItemSpacing::Sparse)
-                // .map(|this| {
-                //     if Some(ix) <= self.divider_index {
-                //         this.start_slot(Icon::new(IconName::HistoryRerun).size(IconSize::Small))
-                //     } else {
-                //         this.start_slot(v_flex().flex_none().size(IconSize::Small.rems()))
-                //     }
-                // })
                 .when_some(tooltip_label, |list_item, item_label| {
                     list_item.tooltip(move |_| item_label.clone())
                 })

crates/workspace/src/tasks.rs 🔗

@@ -1,4 +1,5 @@
 use project::TaskSourceKind;
+use remote::ConnectionState;
 use task::{ResolvedTask, TaskContext, TaskTemplate};
 use ui::ViewContext;
 
@@ -12,6 +13,19 @@ pub fn schedule_task(
     omit_history: bool,
     cx: &mut ViewContext<'_, Workspace>,
 ) {
+    match workspace.project.read(cx).ssh_connection_state(cx) {
+        None | Some(ConnectionState::Connected) => {}
+        Some(
+            ConnectionState::Connecting
+            | ConnectionState::Disconnected
+            | ConnectionState::HeartbeatMissed
+            | ConnectionState::Reconnecting,
+        ) => {
+            log::warn!("Cannot schedule tasks when disconnected from a remote host");
+            return;
+        }
+    }
+
     if let Some(spawn_in_terminal) =
         task_to_resolve.resolve_task(&task_source_kind.to_id_base(), task_cx)
     {