Skip to content

Commit 6081f37

Browse files
committed
Add SetAttendanceMode command
1 parent 00569b5 commit 6081f37

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

src/client.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ async fn handle_message(
184184
Command::RemoveNerd { talk_id } => {
185185
remove_nerd(state, talk_id, user_id).await?;
186186
}
187+
Command::SetAttendanceMode { attendance_mode } => {
188+
set_attendance_mode(state, user_id, attendance_mode).await?;
189+
}
187190
}
188191
}
189192

@@ -400,3 +403,22 @@ async fn remove_nerd(state: &AppState, talk_id: usize, user_id: usize) -> Result
400403
.send(Update::RemoveNerd { talk_id, user_id });
401404
Ok(())
402405
}
406+
407+
async fn set_attendance_mode(
408+
state: &AppState,
409+
user_id: UserId,
410+
attendance_mode: crate::storage::AttendanceMode,
411+
) -> Result<()> {
412+
let mut storage = state.storage.write().await;
413+
let Storage { users, .. } = storage.deref_mut();
414+
let user = users
415+
.get_mut(&user_id)
416+
.wrap_err_with(|| format!("user {user_id} does not exist"))?;
417+
user.attendance_mode = attendance_mode;
418+
users.commit().await.wrap_err("failed to commit users")?;
419+
let _ = state.updates_sender.send(Update::UpdateAttendanceMode {
420+
user_id,
421+
attendance_mode,
422+
});
423+
Ok(())
424+
}

src/messages.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ pub enum Command {
8282
RemoveNerd {
8383
talk_id: usize,
8484
},
85+
SetAttendanceMode {
86+
attendance_mode: AttendanceMode,
87+
},
8588
}
8689

8790
#[allow(clippy::enum_variant_names)]
@@ -134,6 +137,10 @@ pub enum Update {
134137
talk_id: usize,
135138
user_id: usize,
136139
},
140+
UpdateAttendanceMode {
141+
user_id: usize,
142+
attendance_mode: AttendanceMode,
143+
},
137144
}
138145

139146
#[derive(Clone, Debug, Deserialize, Serialize)]

0 commit comments

Comments
 (0)