]> git.sesse.net Git - pkanalytics/blob - players.cpp
fce3f7c30e010d2a5172becac07ad9720ab92b1e
[pkanalytics] / players.cpp
1 #include <algorithm>
2 #include <string>
3 #include <vector>
4 #include <sqlite3.h>
5 #include "players.h"
6
7 using namespace std;
8
9 string format_timestamp(uint64_t pos);
10
11 PlayersModel::PlayersModel(sqlite3 *db) : db(db)
12 {
13         load_data();
14 }
15
16 QVariant PlayersModel::headerData(int section, Qt::Orientation orientation, int role) const
17 {
18         if (role != Qt::DisplayRole) {
19                 return QVariant();
20         }
21         if (orientation == Qt::Horizontal) {
22                 if (section == 0) {
23                         return "#";
24                 } else if (section == 1) {
25                         return "Name";
26                 } else {
27                         return QVariant();
28                 }
29         } else {
30                 return "";
31         }
32 }
33
34 QVariant PlayersModel::data(const QModelIndex &index, int role) const
35 {
36         if (role != Qt::DisplayRole) {
37                 return QVariant();
38         }
39         if (index.column() == 0) {
40                 return QString::fromUtf8(players[index.row()].number);
41         } else if (index.column() == 1) {
42                 return QString::fromUtf8(players[index.row()].name);
43         }
44         return QVariant();
45 }
46
47 void PlayersModel::load_data()
48 {
49         players.clear();
50
51         // Read the players.
52         sqlite3_stmt *stmt;
53         int ret = sqlite3_prepare_v2(db, "SELECT player, number, name FROM player ORDER BY (number+0), number", -1, &stmt, 0);
54         if (ret != SQLITE_OK) {
55                 fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db));
56                 abort();
57         }
58         for ( ;; ) {
59                 ret = sqlite3_step(stmt);
60                 if (ret == SQLITE_ROW) {
61                         Player p;
62                         p.player_id = sqlite3_column_int(stmt, 0);
63                         p.number = (const char *)sqlite3_column_text(stmt, 1);
64                         p.name = (const char *) sqlite3_column_text(stmt, 2);
65                         players.push_back(p);
66                 } else if (ret == SQLITE_DONE) {
67                         break;
68                 } else {
69                         fprintf(stderr, "SELECT step: %s\n", sqlite3_errmsg(db));
70                         abort();
71                 }
72         }
73         ret = sqlite3_finalize(stmt);
74         if (ret != SQLITE_OK) {
75                 fprintf(stderr, "SELECT finalize: %s\n", sqlite3_errmsg(db));
76                 abort();
77         }
78 }