Restore missing driver, car and session normalizers
This commit is contained in:
64
src/app.js
64
src/app.js
@@ -1930,6 +1930,70 @@ function normalizeObsOverlaySettings(raw = {}) {
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeDriver(driver = {}) {
|
||||
return {
|
||||
id: String(driver?.id || uid("driver")),
|
||||
name: String(driver?.name || "").trim(),
|
||||
classId: String(driver?.classId || "").trim(),
|
||||
transponder: String(driver?.transponder || "").trim(),
|
||||
brand: String(driver?.brand || "").trim(),
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeCar(car = {}) {
|
||||
return {
|
||||
id: String(car?.id || uid("car")),
|
||||
name: String(car?.name || "").trim(),
|
||||
transponder: String(car?.transponder || "").trim(),
|
||||
brand: String(car?.brand || "").trim(),
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeSession(session = {}) {
|
||||
const type = SESSION_TYPES.includes(String(session?.type || "").toLowerCase())
|
||||
? String(session.type).toLowerCase()
|
||||
: "practice";
|
||||
const status = ["ready", "running", "stopped", "finished"].includes(String(session?.status || "").toLowerCase())
|
||||
? String(session.status).toLowerCase()
|
||||
: "ready";
|
||||
const seedMethod = ["best_sum", "average", "consecutive"].includes(String(session?.seedMethod || "").toLowerCase())
|
||||
? String(session.seedMethod).toLowerCase()
|
||||
: "best_sum";
|
||||
const assignments = Array.isArray(session?.assignments)
|
||||
? session.assignments
|
||||
.map((assignment) => ({
|
||||
id: String(assignment?.id || uid("as")),
|
||||
driverId: String(assignment?.driverId || "").trim(),
|
||||
carId: String(assignment?.carId || "").trim(),
|
||||
}))
|
||||
.filter((assignment) => assignment.driverId || assignment.carId)
|
||||
: [];
|
||||
return {
|
||||
...session,
|
||||
id: String(session?.id || uid("session")),
|
||||
eventId: String(session?.eventId || "").trim(),
|
||||
name: String(session?.name || "").trim(),
|
||||
type,
|
||||
durationMin: Math.max(1, Number(session?.durationMin || 1) || 1),
|
||||
followUpSec: Math.max(0, Number(session?.followUpSec || 0) || 0),
|
||||
startMode: normalizeStartMode(session?.startMode || "mass"),
|
||||
seedBestLapCount: Math.max(0, Number(session?.seedBestLapCount || 0) || 0),
|
||||
seedMethod,
|
||||
staggerGapSec: Math.max(0, Number(session?.staggerGapSec || 0) || 0),
|
||||
maxCars: session?.maxCars ? Math.max(1, Number(session.maxCars) || 1) : null,
|
||||
mode: session?.mode === "track" ? "track" : "race",
|
||||
status,
|
||||
startedAt: Number.isFinite(Number(session?.startedAt)) ? Number(session.startedAt) : null,
|
||||
endedAt: Number.isFinite(Number(session?.endedAt)) ? Number(session.endedAt) : null,
|
||||
finishedByTimer: session?.finishedByTimer === true,
|
||||
assignments,
|
||||
driverIds: Array.isArray(session?.driverIds) ? session.driverIds.map(String).filter(Boolean) : [],
|
||||
manualGridIds: Array.isArray(session?.manualGridIds) ? session.manualGridIds.map(String).filter(Boolean) : [],
|
||||
gridCustomized: session?.gridCustomized === true,
|
||||
generated: session?.generated === true,
|
||||
};
|
||||
}
|
||||
|
||||
function parseOverlayBooleanParam(name, fallback) {
|
||||
const raw = urlParams.get(name);
|
||||
if (raw == null) {
|
||||
|
||||
Reference in New Issue
Block a user