attempt to fix quiz end results

This commit is contained in:
Daniel Bulant 2026-05-16 13:34:46 +02:00
parent fca9608de7
commit dd02db9011
No known key found for this signature in database
3 changed files with 40 additions and 7 deletions

View file

@ -21,7 +21,7 @@ type DeviceQuestionData = {
type ProxyOutput = type ProxyOutput =
| { ConnectPrompt: string } | { ConnectPrompt: string }
| "WaitingForParty" | { WaitingForParty: string }
| { Question: DeviceQuestionData } | { Question: DeviceQuestionData }
| "Results" | "Results"
| { Error: string }; | { Error: string };
@ -171,6 +171,7 @@ function connectApiSocket() {
function toDeviceQuestionData(quizData: QuizState): DeviceQuestionData | null { function toDeviceQuestionData(quizData: QuizState): DeviceQuestionData | null {
if (!quizData.currentQuestion) return null; if (!quizData.currentQuestion) return null;
if (quizData.status === "results") return null;
const question = quizData.currentQuestion; const question = quizData.currentQuestion;
const q_type = const q_type =
question.type === "choice" question.type === "choice"
@ -274,21 +275,25 @@ function handleApiMessage(e: MessageEvent) {
if (event.type === "party_status") { if (event.type === "party_status") {
const quizData = event.party?.data ?? null; const quizData = event.party?.data ?? null;
if (!quizData) return; if (!quizData) return;
if (quizData.status === "results") {
writeProxyOutput(socket, "Results");
return;
}
const question = toDeviceQuestionData(quizData); const question = toDeviceQuestionData(quizData);
if (question) { if (question) {
writeProxyOutput(socket, { Question: question }); writeProxyOutput(socket, { Question: question });
} else if (quizData.status === "results") {
writeProxyOutput(socket, "Results");
} }
return; return;
} }
if (event.type === "quiz_state") { if (event.type === "quiz_state") {
if (event.quiz.status === "results") {
writeProxyOutput(socket, "Results");
return;
}
const question = toDeviceQuestionData(event.quiz); const question = toDeviceQuestionData(event.quiz);
if (question) { if (question) {
writeProxyOutput(socket, { Question: question }); writeProxyOutput(socket, { Question: question });
} else if (event.quiz.status === "results") {
writeProxyOutput(socket, "Results");
} }
return; return;
} }

View file

@ -172,6 +172,8 @@ impl DeviceState {
self.wheel = future_wheel; self.wheel = future_wheel;
} }
ProxyOutput::Results => { ProxyOutput::Results => {
self.question = None;
self.wheel = WheelData::empty();
self.view = ViewState::Results; self.view = ViewState::Results;
} }
ProxyOutput::Error(_) => {} ProxyOutput::Error(_) => {}
@ -239,6 +241,13 @@ impl DeviceState {
)); ));
} }
if self.view == ViewState::Results {
return Some((
center_str::<16>("Quiz ended", 16).unwrap(),
center_str::<16>("See results", 16).unwrap(),
));
}
if self.view != ViewState::Question { if self.view != ViewState::Question {
return None; return None;
} }
@ -423,6 +432,25 @@ mod tests {
state.apply_proxy_output(data); state.apply_proxy_output(data);
assert_eq!(state.view_state(), ViewState::Results); assert_eq!(state.view_state(), ViewState::Results);
let (line1, line2) = state.render_lines().unwrap();
assert_eq!(line1.as_str(), " Quiz ended");
assert_eq!(line2.as_str(), " See results");
}
#[test]
fn clears_question_state_when_results_arrive() {
let mut state = DeviceState::new();
state.apply_proxy_output(
parse_proxy_output(
r#"{"Question":{"text":"Q","points":1,"index":0,"q_type":"Choice"}}"#,
)
.unwrap(),
);
state.apply_proxy_output(parse_proxy_output(r#""Results""#).unwrap());
assert_eq!(state.view_state(), ViewState::Results);
assert!(state.question().is_none());
} }
#[test] #[test]

View file

@ -32,8 +32,8 @@ const WIFI_NETWORK: &str = "flamme";
const WIFI_PASSWORD: &str = "12345678"; const WIFI_PASSWORD: &str = "12345678";
const TARGET_IP: &str = "84.238.32.253"; const TARGET_IP: &str = "84.238.32.253";
const TARGET_PORT: u16 = 7070; const TARGET_PORT: u16 = 7070;
const WHEEL_PRECISION: i32 = 32; const WHEEL_PRECISION: i32 = 16;
const WHEEL_INVERTED: bool = false; const WHEEL_INVERTED: bool = true;
const DEVICE_ID: &str = "esp32-1"; const DEVICE_ID: &str = "esp32-1";
#[derive(Clone, Copy, Debug, Eq, PartialEq)] #[derive(Clone, Copy, Debug, Eq, PartialEq)]