(app_handle: tauri::AppHandle)
| 103 | |
| 104 | #[command] |
| 105 | pub async fn docker_events(app_handle: tauri::AppHandle) -> Result<(), String> { |
| 106 | let docker = get_docker().await?; |
| 107 | let mut last_hash = String::new(); |
| 108 | |
| 109 | tokio::spawn(async move { |
| 110 | let mut interval = tokio::time::interval(Duration::from_millis(REFRESH_INTERVAL)); |
| 111 | |
| 112 | loop { |
| 113 | interval.tick().await; |
| 114 | // Handle containers |
| 115 | match get_containers(&docker).await { |
| 116 | Ok(containers) => { |
| 117 | // Only emit if data changed |
| 118 | let new_hash = format!("{:?}", containers); |
| 119 | if new_hash != last_hash { |
| 120 | last_hash = new_hash; |
| 121 | let payload = (String::from("docker:containers"), &containers); |
| 122 | if let Err(e) = app_handle.emit("docker:containers", payload) { |
| 123 | eprintln!("Failed to emit containers event: {}", e); |
| 124 | } |
| 125 | // Extract and emit stacks with event name |
| 126 | let stacks: Vec<String> = |
| 127 | extract_projects(&containers).into_iter().collect(); |
| 128 | let payload = (String::from("docker:stacks"), stacks); |
| 129 | if let Err(e) = app_handle.emit("docker:stacks", payload) { |
| 130 | eprintln!("Failed to emit stacks event: {}", e); |
| 131 | } |
| 132 | |
| 133 | // Emit networks |
| 134 | let payload = ( |
| 135 | String::from("docker:networks"), |
| 136 | list_networks().await.unwrap(), |
| 137 | ); |
| 138 | if let Err(e) = app_handle.emit("docker:networks", payload) { |
| 139 | eprintln!("Failed to emit networks event: {}", e); |
| 140 | } |
| 141 | } |
| 142 | } |
| 143 | Err(e) => eprintln!("Failed to connect to Docker: {}", e), |
| 144 | } |
| 145 | } |
| 146 | }); |
| 147 | |
| 148 | Ok(()) |
| 149 | } |
nothing calls this directly
no test coverage detected