]> git.sesse.net Git - pkanalytics/blob - events.h
Make it possible to delete events.
[pkanalytics] / events.h
1 #ifndef _EVENTS_H
2 #define _EVENTS_H 1
3
4 #include <sqlite3.h>
5 #include <stdint.h>
6 #include <QAbstractTableModel>
7 #include <map>
8 #include <vector>
9 #include <optional>
10
11 class EventsModel : public QAbstractTableModel
12 {
13 public:
14         EventsModel(sqlite3 *db) : db(db) {}
15
16         int rowCount(const QModelIndex &parent) const override
17         {
18                 refresh_if_needed();
19                 return events.size();
20         }
21         int columnCount(const QModelIndex &column) const override
22         {
23                 return 3;
24         }
25         QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
26         QVariant data(const QModelIndex &index, int role) const override;
27
28         unsigned insert_event(uint64_t t, int player_id);  // Returns the row.
29         void delete_event(unsigned row);
30         void set_event_type(unsigned row, const std::string &type);
31
32 private:
33         struct Player {
34                 int player_id;
35                 std::string number;
36                 std::string name;
37         };
38         mutable std::map<int, Player> players;
39
40         struct Event {
41                 int event_id;
42                 uint64_t t;
43                 std::optional<int> player_id;
44                 std::string type;
45         };
46         mutable std::vector<Event> events;
47         mutable bool stale = true;
48
49         sqlite3 *db;
50
51         void refresh_if_needed() const;
52 };
53
54 #endif  // !defined(_EVENTS_H)