]> git.sesse.net Git - pkanalytics/blobdiff - events.cpp
Make it possible to delete events.
[pkanalytics] / events.cpp
index 381991a2a211603d7323c2c8efb12fe94ea3cf4f..428ca73821e2d199c4b108a16faf076c13a4ea98 100644 (file)
@@ -120,11 +120,11 @@ void EventsModel::refresh_if_needed() const
        //emit dataChanged(QModelIndex(
 }
 
-int EventsModel::insert_event(uint64_t t, int player_id)
+unsigned EventsModel::insert_event(uint64_t t, int player_id)
 {
        auto it = lower_bound(events.begin(), events.end(), t,
                [](const Event &e, uint64_t t) { return e.t < t; });
-       int pos = distance(events.begin(), it);
+       unsigned pos = distance(events.begin(), it);
        beginInsertRows(QModelIndex(), pos, pos);
 
        Event e;
@@ -163,6 +163,37 @@ int EventsModel::insert_event(uint64_t t, int player_id)
        return pos;
 }
 
+void EventsModel::delete_event(unsigned pos)
+{
+       int event_id = events[pos].event_id;
+
+       beginRemoveRows(QModelIndex(), pos, pos);
+       events.erase(events.begin() + pos);
+       endRemoveRows();
+
+       // Delete the row from the database.
+       sqlite3_stmt *stmt;
+       int ret = sqlite3_prepare_v2(db, "DELETE FROM event WHERE event=?", -1, &stmt, 0);
+       if (ret != SQLITE_OK) {
+               fprintf(stderr, "DELETE prepare: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+
+       sqlite3_bind_int64(stmt, 1, event_id);
+
+       ret = sqlite3_step(stmt);
+       if (ret == SQLITE_ROW) {
+               fprintf(stderr, "DELETE step: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+
+       ret = sqlite3_finalize(stmt);
+       if (ret != SQLITE_OK) {
+               fprintf(stderr, "DELETE finalize: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+}
+
 void EventsModel::set_event_type(unsigned pos, const string &type)
 {
        events[pos].type = type;