attempt to fix quiz end results
This commit is contained in:
parent
fca9608de7
commit
dd02db9011
3 changed files with 40 additions and 7 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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)]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue