diff --git a/main.cpp b/main.cpp index 84cb3e0..e14c6b5 100644 --- a/main.cpp +++ b/main.cpp @@ -511,8 +511,11 @@ int main(int argc, char *argv[]) valeurConvertie = conversion_temperature(valeurBrute, uniteTemperature); symboleUnite = symbole_unite_temperature(uniteTemperature); } - // Arrondi à la précision d'affichage configurée (équivalent toFixed()) : - obj["valeur"] = QString::number(valeurConvertie, 'f', precision).toDouble(); + // Toujours une chaîne (même pour les nombres) - évite que QML + // ne fige le rôle 'valeur' en type numérique lors d'une famille + // visitée avant "Position" (latitude/longitude), qui tronquerait + // alors ces dernières à leur seul chiffre de tête. + obj["valeur"] = QString::number(valeurConvertie, 'f', precision); obj["valeur_texte"] = false; obj["unite"] = symboleUnite; } @@ -626,6 +629,21 @@ int main(int argc, char *argv[]) return withCors(QHttpServerResponse(QJsonDocument(reponse).toJson())); }); + // Réponse au "preflight" CORS (requête OPTIONS automatique du navigateur + // avant tout PATCH avec Content-Type: application/json) - sans elle, le + // navigateur abandonne silencieusement la vraie requête PATCH avant même + // de l'envoyer. + server.route("/elements/circuit/", QHttpServerRequest::Method::Options, + [](int) { + QHttpServerResponse resp(QHttpServerResponder::StatusCode::NoContent); + QHttpHeaders headers = resp.headers(); + headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowOrigin, "*"); + headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowMethods, "GET, PATCH, OPTIONS"); + headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowHeaders, "Content-Type"); + resp.setHeaders(std::move(headers)); + return resp; + }); + auto tcpServer = new QTcpServer(); if (!tcpServer->listen(QHostAddress::Any, 8080) || !server.bind(tcpServer)) { qCritical() << "Impossible de démarrer le serveur HTTP sur le port 8080.";