X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=json.cpp;h=0bd24522e839bdcbfa64fa33b295ed5d3aa88fd6;hb=fb839f83f5113f02fb9ef3485f27f5b220919a4c;hp=56b2000da510bb15acfb76a4fe22c0eb7ed5656d;hpb=3b736d3d022d8847f247b307d652c76bdf2efe4e;p=pkanalytics diff --git a/json.cpp b/json.cpp index 56b2000..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(); @@ -61,8 +95,17 @@ QJsonArray export_matches_to_json(sqlite3 *db) QJsonObject e; e.insert("t", sqlite3_column_int(stmt, 1)); - e.insert("player", sqlite3_column_int(stmt, 2)); - e.insert("type", (const char *)sqlite3_column_text(stmt, 3)); + if (sqlite3_column_type(stmt, 2) == SQLITE_INTEGER) { + e.insert("player", sqlite3_column_int(stmt, 2)); + } else { + e.insert("player", QJsonValue()); // null + } + 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; @@ -117,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();