blob: 2ca83a31ff80aa0d4193e22a675b22a533893dc3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#ifndef ITAT_CHALLANGE_OLYMPICS_SPORT_H
#define ITAT_CHALLANGE_OLYMPICS_SPORT_H
#include "MedalWinner.h"
#include "CompetitorWithResults.h"
#include <QAbstractListModel>
#include <QNetworkAccessManager>
#include <qcontainerfwd.h>
#include <set>
#include <QJsonObject>
#include <QJsonDocument>
#include <QString>
#include <QList>
#include "EventInfo.h"
using namespace std;
class SportModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(QString discipline READ discipline WRITE setDiscipline NOTIFY disciplineChanged);
public:
enum Role
{
EventName = Qt::UserRole + 1,
Competitors
};
explicit SportModel(QObject *parent = nullptr);
virtual int rowCount(const QModelIndex &parent) const override;
virtual QVariant data(const QModelIndex &index, int role) const override;
virtual QHash<int, QByteArray> roleNames() const override;
QString discipline() const;
void setDiscipline(const QString &discipline);
public slots:
void request(QString discipline);
void parseData();
signals:
void disciplineChanged();
private:
QList<EventInfo*> m_sportList;
QString m_discipline;
QNetworkAccessManager m_networkManager;
QNetworkReply *m_reply = nullptr;
};
class Sport
{
public:
Sport(QJsonObject discipline)
{
this->discipline = discipline;
}
set<QString> getCategories();
QList<CompetitorWithResults> getCompetitorsByCategory(QString category);
QList<MedalWinner> getCompetitorsWithMedal();
// filter to change the current competitor array
void lastName(QList<Competitor> &competitors);
void filterByName(QList<Competitor> &competitors, QString name);
void filterByCountry(QList<Competitor> &competitors, QString nocShort);
// sort functions to change the order of the current competitor array
void sortByName(QList<Competitor> &competitors);
void sortByCountry(QList<Competitor> &competitors);
void sortByResult(QList<CompetitorWithResults> &competitors);
void sortByMedals(QList<MedalWinner> &competitors);
void reverseOrder(QList<Competitor> &competitors);
// statistic function(s)
void addRelativeToFirst(QList<CompetitorWithResults> &competitors);
void setDiscipline(QJsonObject discipline)
{
this->discipline = QJsonObject(discipline);
}
private:
/*
* Analysis of provided competitor objects:
*
* Attributes:
* - code
* - noc (national olympics comittee)
* - name (sometimes the country name? mostly the competitors name)
* - order
* [- results] (only if the results are out!)
*
*
* Analysis of provided result objects:
*
* Attributes:
* - position
* - mark
* - medalType
* - irk
* [- winnerLoserTie] (only if provided in the discipline?)
*
* Analysis of where to find the medal winners:
*
* Search for ... in category name.
* - "Bronze"
* - "Gold"
* - "Final"
*
* ! ATTENTION !
* When searching for "Final" there might be "Final A", "Final B", etc.
* The results will only be in ONE of these categories!
* -> which is good... cause then we can count occurences.
*/
QJsonObject discipline;
void filterCompetitors(QList<Competitor> &competitors, QString filter);
bool validateDiscipline();
QJsonObject createCompetitorWithMedals(QJsonObject medalComp);
float calcRelativeStat(QString ref, QString val);
};
#endif
|