|
1 | 1 | use crate::app_state::{AppState, send_response}; |
2 | 2 | use serde::{Deserialize, Serialize}; |
3 | 3 | use serde_json::json; |
4 | | -use socketioxide::extract::{AckSender, Data, State}; |
| 4 | +use socketioxide::extract::{AckSender, Data, SocketRef, State}; |
5 | 5 | use tracing::info; |
6 | 6 |
|
7 | 7 | #[derive(Debug, Serialize, Deserialize, Clone)] |
@@ -53,17 +53,30 @@ pub async fn handle_git_file_original( |
53 | 53 | } |
54 | 54 |
|
55 | 55 | pub async fn handle_git_commit( |
| 56 | + socket: SocketRef, |
56 | 57 | Data(request): Data<GitCommitRequest>, |
57 | 58 | ack: AckSender, |
58 | 59 | state: State<AppState>, |
59 | 60 | ) { |
60 | 61 | info!("Received git:commit: {} files", request.files.len()); |
61 | | - let result = { |
62 | | - let git = state.git_manager.lock().await; |
63 | | - git.commit(&request.files, &request.message) |
64 | | - .map(|_| json!({})) |
| 62 | + |
| 63 | + let (result, changes_update) = { |
| 64 | + let mut git = state.git_manager.lock().await; |
| 65 | + match git.commit(&request.files, &request.message) { |
| 66 | + Ok(_) => { |
| 67 | + let status = git.refresh_status_cache().map(|s| s.to_json()); |
| 68 | + (Ok(json!({})), status.ok()) |
| 69 | + } |
| 70 | + Err(e) => (Err(e), None), |
| 71 | + } |
65 | 72 | }; |
| 73 | + |
66 | 74 | send_response(ack, result); |
| 75 | + |
| 76 | + if let Some(update) = changes_update { |
| 77 | + let _ = socket.emit("changes:update", &update); |
| 78 | + let _ = socket.broadcast().emit("changes:update", &update).await; |
| 79 | + } |
67 | 80 | } |
68 | 81 |
|
69 | 82 | pub async fn handle_git_push(ack: AckSender, state: State<AppState>) { |
|
0 commit comments