]> git.sesse.net Git - pkanalytics/blobdiff - mainwindow.cpp
Implement optional gender rule A and pull rules.
[pkanalytics] / mainwindow.cpp
index feaf3abc525ed4b0c88fe53e849004a7513b72c4..3b29d729b1f42f8cc2df9161ac2c2524efd0c2c1 100644 (file)
@@ -67,6 +67,37 @@ string get_video_filename(sqlite3 *db, int match_id)
        return filename;
 }
 
+bool get_match_property(sqlite3 *db, int match_id, const string &prop_name)
+{
+       sqlite3_stmt *stmt;
+
+       int ret = sqlite3_prepare_v2(db, ("SELECT " + prop_name + " FROM match WHERE match=?").c_str(), -1, &stmt, 0);
+       if (ret != SQLITE_OK) {
+               fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+
+       sqlite3_bind_int64(stmt, 1, match_id);
+
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_ROW) {
+               fprintf(stderr, "SELECT step: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+
+       if (sqlite3_column_type(stmt, 0) != SQLITE_INTEGER) {
+               return "";
+       }
+       bool value = sqlite3_column_int(stmt, 0);
+
+       ret = sqlite3_finalize(stmt);
+       if (ret != SQLITE_OK) {
+               fprintf(stderr, "SELECT finalize: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+       return value;
+}
+
 void save_video_filename(sqlite3 *db, int match_id, const string &filename)
 {
        sqlite3_stmt *stmt;
@@ -82,7 +113,33 @@ void save_video_filename(sqlite3 *db, int match_id, const string &filename)
 
        ret = sqlite3_step(stmt);
        if (ret == SQLITE_ROW) {
-               fprintf(stderr, "INSERT step: %s\n", sqlite3_errmsg(db));
+               fprintf(stderr, "UPDATE 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();
+       }
+}
+
+void save_match_property(sqlite3 *db, int match_id, const string &prop_name, bool value)
+{
+       sqlite3_stmt *stmt;
+
+       int ret = sqlite3_prepare_v2(db, ("UPDATE match SET " + prop_name + "=? WHERE match=?").c_str(), -1, &stmt, 0);
+       if (ret != SQLITE_OK) {
+               fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+
+       sqlite3_bind_int64(stmt, 1, value);
+       sqlite3_bind_int64(stmt, 2, match_id);
+
+       ret = sqlite3_step(stmt);
+       if (ret == SQLITE_ROW) {
+               fprintf(stderr, "UPDATE step: %s\n", sqlite3_errmsg(db));
                abort();
        }
 
@@ -276,6 +333,15 @@ MainWindow::MainWindow(EventsModel *events, PlayersModel *players,
        // Menus.
        connect(ui->action_exit, &QAction::triggered, [this] { close(); });
        connect(ui->action_export_json, &QAction::triggered, [db] { export_to_json(db, "ultimate.json"); });
+
+       ui->action_gender_rule_a->setChecked(get_match_property(db, match_id, "gender_rule_a"));
+       ui->action_gender_pull_rule->setChecked(get_match_property(db, match_id, "gender_pull_rule"));
+       connect(ui->action_gender_rule_a, &QAction::toggled, [this, db, match_id] {
+               save_match_property(db, match_id, "gender_rule_a", ui->action_gender_rule_a->isChecked());
+       });
+       connect(ui->action_gender_pull_rule, &QAction::toggled, [this, db, match_id] {
+               save_match_property(db, match_id, "gender_pull_rule", ui->action_gender_pull_rule->isChecked());
+       });
 }
 
 void MainWindow::position_changed(uint64_t pos)