(app: &App, tx: mpsc::UnboundedSender<Event>)
| 2135 | } |
| 2136 | |
| 2137 | fn spawn_set_sandbox_setting(app: &App, tx: mpsc::UnboundedSender<Event>) { |
| 2138 | let Some(ref edit) = app.sandbox_setting_edit else { |
| 2139 | return; |
| 2140 | }; |
| 2141 | let Some(entry) = app.sandbox_settings.get(edit.index) else { |
| 2142 | return; |
| 2143 | }; |
| 2144 | let Some(sandbox_name) = app.selected_sandbox_name() else { |
| 2145 | return; |
| 2146 | }; |
| 2147 | |
| 2148 | let name = sandbox_name.to_string(); |
| 2149 | let key = entry.key.clone(); |
| 2150 | let raw = edit.input.trim().to_string(); |
| 2151 | let kind = entry.kind; |
| 2152 | let mut client = app.client.clone(); |
| 2153 | |
| 2154 | tokio::spawn(async move { |
| 2155 | use openshell_core::proto::{SettingValue, UpdateConfigRequest, setting_value}; |
| 2156 | |
| 2157 | let value = match kind { |
| 2158 | openshell_core::settings::SettingValueKind::Bool => { |
| 2159 | if let Some(v) = openshell_core::settings::parse_bool_like(&raw) { |
| 2160 | setting_value::Value::BoolValue(v) |
| 2161 | } else { |
| 2162 | let _ = tx.send(Event::SandboxSettingSetResult(Err(format!( |
| 2163 | "invalid bool value: {raw}" |
| 2164 | )))); |
| 2165 | return; |
| 2166 | } |
| 2167 | } |
| 2168 | openshell_core::settings::SettingValueKind::Int => { |
| 2169 | if let Ok(v) = raw.parse::<i64>() { |
| 2170 | setting_value::Value::IntValue(v) |
| 2171 | } else { |
| 2172 | let _ = tx.send(Event::SandboxSettingSetResult(Err(format!( |
| 2173 | "invalid int value: {raw}" |
| 2174 | )))); |
| 2175 | return; |
| 2176 | } |
| 2177 | } |
| 2178 | openshell_core::settings::SettingValueKind::String => { |
| 2179 | setting_value::Value::StringValue(raw) |
| 2180 | } |
| 2181 | }; |
| 2182 | |
| 2183 | let req = UpdateConfigRequest { |
| 2184 | name, |
| 2185 | policy: None, |
| 2186 | setting_key: key, |
| 2187 | setting_value: Some(SettingValue { value: Some(value) }), |
| 2188 | delete_setting: false, |
| 2189 | global: false, |
| 2190 | merge_operations: vec![], |
| 2191 | expected_resource_version: 0, |
| 2192 | }; |
| 2193 | |
| 2194 | let result = tokio::time::timeout(Duration::from_secs(5), client.update_config(req)).await; |
no test coverage detected