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

View file

@ -172,6 +172,8 @@ impl DeviceState {
self.wheel = future_wheel;
}
ProxyOutput::Results => {
self.question = None;
self.wheel = WheelData::empty();
self.view = ViewState::Results;
}
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 {
return None;
}
@ -423,6 +432,25 @@ mod tests {
state.apply_proxy_output(data);
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]

View file

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