(&self)
| 167 | |
| 168 | #[tracing::instrument(level = "debug", skip(self))] |
| 169 | pub async fn discover_provider_extensions(&self) -> Result<()> { |
| 170 | let ext_handler = get_extension_handler(&self.app_handle); |
| 171 | let extensions_res = ext_handler.get_installed_extensions().await?; |
| 172 | for extension in extensions_res { |
| 173 | let provides = ext_handler |
| 174 | .get_provider_scopes(extension.package_name.clone().into()) |
| 175 | .await; |
| 176 | tracing::info!( |
| 177 | "Got provider scopes from {} {:?}", |
| 178 | extension.package_name, |
| 179 | provides |
| 180 | ); |
| 181 | if let Ok(provides) = provides { |
| 182 | tracing::info!( |
| 183 | "Inserting extension provider {:?} {:?}", |
| 184 | extension, |
| 185 | provides, |
| 186 | ); |
| 187 | |
| 188 | let provider = Box::new(ExtensionProvider::new( |
| 189 | extension.clone(), |
| 190 | provides, |
| 191 | self.app_handle.clone(), |
| 192 | self.status_tx.clone(), |
| 193 | )); |
| 194 | let key = { |
| 195 | let mut provider_store = self.provider_store.write().await; |
| 196 | let key = provider.key(); |
| 197 | provider_store.insert(key.clone(), provider); |
| 198 | tracing::info!("provider_store: {:?}", provider_store.keys()); |
| 199 | key |
| 200 | }; |
| 201 | |
| 202 | let provider_store = self.provider_store.clone(); |
| 203 | async_runtime::spawn(async move { |
| 204 | let provider_store = provider_store.read().await; |
| 205 | if let Some(provider) = provider_store.get(&key) { |
| 206 | let res = provider.initialize().await; |
| 207 | if let Err(err) = res { |
| 208 | tracing::error!( |
| 209 | "Error initializing extension provider {}: {:?}", |
| 210 | key, |
| 211 | err |
| 212 | ); |
| 213 | } |
| 214 | } |
| 215 | }); |
| 216 | } |
| 217 | |
| 218 | self.app_handle.emit("providers-updated", Value::Null)?; |
| 219 | } |
| 220 | Ok(()) |
| 221 | } |
| 222 | |
| 223 | #[tracing::instrument(level = "debug", skip(self, key))] |
| 224 | pub async fn initialize_provider(&self, key: String) { |
no test coverage detected