X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=json.cpp;h=0bd24522e839bdcbfa64fa33b295ed5d3aa88fd6;hb=a1575a3d3bc7c3c37ec83576ab2e1627d1b517bc;hp=ec7d3eb3c58a78714c6b7acf5a546015646ddd7e;hpb=e72f24ba4f127c772d05a4630c379ccc8ca1c583;p=pkanalytics diff --git a/json.cpp b/json.cpp index ec7d3eb..0bd2452 100644 --- a/json.cpp +++ b/json.cpp @@ -39,6 +39,40 @@ QJsonArray export_players_to_json(sqlite3 *db) return players; } +QJsonArray export_formations_to_json(sqlite3 *db) +{ + QJsonArray formations; + + sqlite3_stmt *stmt; + int ret = sqlite3_prepare_v2(db, "SELECT formation, offense, name FROM formation ORDER BY name", -1, &stmt, 0); + if (ret != SQLITE_OK) { + fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db)); + abort(); + } + for ( ;; ) { + ret = sqlite3_step(stmt); + if (ret == SQLITE_ROW) { + QJsonObject f; + f.insert("formation_id", sqlite3_column_int(stmt, 0)); + f.insert("offense", bool(sqlite3_column_int(stmt, 1))); + f.insert("name", (const char *)sqlite3_column_text(stmt, 2)); + formations.push_back(std::move(f)); + } else if (ret == SQLITE_DONE) { + break; + } else { + fprintf(stderr, "SELECT step: %s\n", sqlite3_errmsg(db)); + abort(); + } + } + ret = sqlite3_finalize(stmt); + if (ret != SQLITE_OK) { + fprintf(stderr, "SELECT finalize: %s\n", sqlite3_errmsg(db)); + abort(); + } + + return formations; +} + QJsonArray export_matches_to_json(sqlite3 *db) { QJsonArray matches; @@ -46,7 +80,7 @@ QJsonArray export_matches_to_json(sqlite3 *db) // Load the events, splitting them into matches as we go. std::map events_per_match; sqlite3_stmt *stmt; - int ret = sqlite3_prepare_v2(db, "SELECT match, t, player, type FROM event ORDER BY t", -1, &stmt, 0); + int ret = sqlite3_prepare_v2(db, "SELECT match, t, player, formation, type FROM event ORDER BY t", -1, &stmt, 0); if (ret != SQLITE_OK) { fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db)); abort(); @@ -66,7 +100,12 @@ QJsonArray export_matches_to_json(sqlite3 *db) } else { e.insert("player", QJsonValue()); // null } - e.insert("type", (const char *)sqlite3_column_text(stmt, 3)); + if (sqlite3_column_type(stmt, 3) == SQLITE_INTEGER) { + e.insert("formation", sqlite3_column_int(stmt, 3)); + } else { + e.insert("formation", QJsonValue()); // null + } + e.insert("type", (const char *)sqlite3_column_text(stmt, 4)); events_per_match[match]->push_back(std::move(e)); } else if (ret == SQLITE_DONE) { break; @@ -121,6 +160,7 @@ void export_to_json(sqlite3 *db, const char *filename) { QJsonObject obj; obj.insert("players", export_players_to_json(db)); + obj.insert("formations", export_formations_to_json(db)); obj.insert("matches", export_matches_to_json(db)); QByteArray serialized = QString(QJsonDocument(obj).toJson(QJsonDocument::Compact)).toUtf8();