From 9d8e1c7c420fa38d83f5c0ce9c77aa20061d63db Mon Sep 17 00:00:00 2001 From: Dorian Zedler Date: Sun, 8 Nov 2020 10:47:44 +0100 Subject: [PATCH] - now parsing discipline and status of category --- blueROCK.pro | 2 + headers/brcategory.h | 23 ++++++++ headers/brcompetition.h | 12 ---- headers/brproviderdr.h | 2 +- headers/brprovidervl.h | 4 +- headers/brresult.h | 5 ++ headers/brresultdetails.h | 13 +++++ sources/brcategory.cpp | 13 +++++ sources/brcompetition.cpp | 6 -- sources/brproviderdr.cpp | 106 ++++++++++++++++++++++++++---------- sources/brprovidervl.cpp | 67 ++++++++++++++++++----- sources/brresult.cpp | 3 + sources/brresultdetails.cpp | 6 ++ 13 files changed, 199 insertions(+), 63 deletions(-) create mode 100644 headers/brresultdetails.h create mode 100644 sources/brresultdetails.cpp diff --git a/blueROCK.pro b/blueROCK.pro index e14f685..84d5b1e 100644 --- a/blueROCK.pro +++ b/blueROCK.pro @@ -38,6 +38,7 @@ SOURCES += \ sources/brproviderdr.cpp \ sources/brprovidervl.cpp \ sources/brresult.cpp \ + sources/brresultdetails.cpp \ sources/brround.cpp \ sources/brseason.cpp \ sources/brserverconnector.cpp \ @@ -58,6 +59,7 @@ HEADERS += \ headers/brproviderdr.h \ headers/brprovidervl.h \ headers/brresult.h \ + headers/brresultdetails.h \ headers/brround.h \ headers/brseason.h \ headers/brserverconnector.h \ diff --git a/headers/brcategory.h b/headers/brcategory.h index 29a3353..89d666c 100644 --- a/headers/brcategory.h +++ b/headers/brcategory.h @@ -13,15 +13,34 @@ class BRCategory : public BRWidget { Q_OBJECT Q_PROPERTY(QString name READ getName NOTIFY metadataChanged) + Q_PROPERTY(BRDiscipline discipline READ getDiscipline NOTIFY metadataChanged) + Q_PROPERTY(BRCategoryStatus status READ getStatus NOTIFY metadataChanged) Q_PROPERTY(BRRound* currentRound READ getCurrentRound WRITE setCurrentRound NOTIFY currentRoundChanged) Q_PROPERTY(QList rounds READ getRoundsQML NOTIFY roundsChanged) public: friend class BRProvider; friend class BRCompetition; + enum BRDiscipline { + UnknownDiscipline = -1, + Speed, + Lead, + Boulder, + Combined + }; + + enum BRCategoryStatus { + UnknownStatus = -1, + Registration, + Startlist, + Result + }; + typedef struct { const BRCategory* category; QString name; + BRDiscipline discipline; + BRCategoryStatus status; BRRound* currentRound; QList rounds; } BRCategoryData; @@ -29,6 +48,8 @@ public: Q_INVOKABLE BRWidget::BRWidgetStatusCode load() override; Q_INVOKABLE BRCompetition* getCompetition() const; Q_INVOKABLE QString getName(); + Q_INVOKABLE BRDiscipline getDiscipline(); + Q_INVOKABLE BRCategoryStatus getStatus(); Q_INVOKABLE BRRound* getCurrentRound() const; Q_INVOKABLE void setCurrentRound(BRRound* round); Q_INVOKABLE QList getRounds() const; @@ -44,6 +65,8 @@ private: BRRound* currentRound; QString name; + BRDiscipline discipline; + BRCategoryStatus status; QList rounds; signals: diff --git a/headers/brcompetition.h b/headers/brcompetition.h index dd45b26..501d3f2 100644 --- a/headers/brcompetition.h +++ b/headers/brcompetition.h @@ -15,7 +15,6 @@ class BRCompetition : public BRWidget { Q_OBJECT Q_PROPERTY(QString name READ getName NOTIFY metadataChanged) - Q_PROPERTY(QString discipline READ getDiscipline NOTIFY metadataChanged) Q_PROPERTY(QDate startDate READ getStartDate NOTIFY metadataChanged) Q_PROPERTY(QDate endDate READ getEndDate NOTIFY metadataChanged) Q_PROPERTY(QString dateSpan READ getDateSpan NOTIFY metadataChanged) @@ -31,18 +30,9 @@ public: friend class BRProvider; friend class BRLeague; - enum BRDiscipline { - Unknown = -1, - Boulder, - Lead, - Speed - }; - Q_ENUM(BRDiscipline) - typedef struct BRCompetitionData { const BRCompetition* competition; QString name; - BRDiscipline discipline; QDate startDate; QDate endDate; QUrl eventWebsiteUrl; @@ -56,7 +46,6 @@ public: Q_INVOKABLE BRWidget::BRWidgetStatusCode load() override; Q_INVOKABLE QString getName(); - Q_INVOKABLE BRDiscipline getDiscipline(); Q_INVOKABLE QDate getStartDate(); Q_INVOKABLE QDate getEndDate(); Q_INVOKABLE QString getDateSpan(); @@ -80,7 +69,6 @@ private: // metadata QString name; - BRDiscipline discipline; QDate startDate; QDate endDate; BRLeague* league; diff --git a/headers/brproviderdr.h b/headers/brproviderdr.h index dd6b495..279ca01 100644 --- a/headers/brproviderdr.h +++ b/headers/brproviderdr.h @@ -22,7 +22,7 @@ protected: BRLeague::BRLeagueData parseLeagueData(QVariantMap leagueProperties, QVariantMap rawData); BRWidget::BRWidgetStatusCode getWidgetData(BRCompetition::BRCompetitionData* competitionData) override; - BRCompetition::BRCompetitionData parseCompetitionData(QVariantMap rawData, BRWidget::BRFederation federation); + BRCompetition::BRCompetitionData parseCompetitionData(QVariantMap rawData, QVariantList globalCategoriesList, BRWidget::BRFederation federation); void parseCompetitionData(BRCompetition::BRCompetitionData* competitionData, QVariantMap rawData, BRWidget::BRFederation federation); BRCup::BRCupData parseCupData(QVariantList categoriesList, QVariantMap rawData, BRWidget::BRFederation federation); diff --git a/headers/brprovidervl.h b/headers/brprovidervl.h index 6949f18..07705a0 100644 --- a/headers/brprovidervl.h +++ b/headers/brprovidervl.h @@ -21,9 +21,9 @@ protected: void parseLeagueData(BRLeague::BRLeagueData* leagueData, QVariantMap rawData); BRWidget::BRWidgetStatusCode getWidgetData(BRCompetition::BRCompetitionData* competitionData) override; - BRCompetition::BRCompetitionData parseCompetitionData(QVariantMap rawData, BRWidget::BRFederation federation); + BRCompetition::BRCompetitionData parseCompetitionData(QVariantMap rawData, QVariantList globalCategoriesList, BRWidget::BRFederation federation); - BRCup::BRCupData parseCupData(QVariantMap rawData); + BRCup::BRCupData parseCupData(QVariantMap rawData, QVariantList globalCategoriesList); BRCategory::BRCategoryData parseCategoryData(QVariantMap rawData); void parseCategoryData(BRCategory::BRCategoryData* categoryData, QVariantMap rawData); diff --git a/headers/brresult.h b/headers/brresult.h index 7ca4991..ee855f2 100644 --- a/headers/brresult.h +++ b/headers/brresult.h @@ -4,6 +4,7 @@ #include #include "brwidget.h" +#include "brresultdetails.h" class BRAthlete; @@ -11,6 +12,7 @@ class BRResult : public BRWidget { Q_OBJECT Q_PROPERTY(int rank READ getRank NOTIFY metadataChanged) + Q_PROPERTY(BRResultDetails* details READ getDetails NOTIFY metadataChanged) Q_PROPERTY(BRAthlete* athlete READ getAthlete NOTIFY metadataChanged) public: @@ -20,12 +22,14 @@ public: const BRResult* result; int rank; + BRResultDetails* data; BRAthlete* athlete; } BRResultData; BRWidget::BRWidgetStatusCode load() override; Q_INVOKABLE int getRank() const; + Q_INVOKABLE BRResultDetails* getDetails() const; Q_INVOKABLE BRAthlete* getAthlete() const; private: @@ -33,6 +37,7 @@ private: void setData(BRResultData data); int rank; + BRResultDetails* details; BRAthlete* athlete; signals: diff --git a/headers/brresultdetails.h b/headers/brresultdetails.h new file mode 100644 index 0000000..e638664 --- /dev/null +++ b/headers/brresultdetails.h @@ -0,0 +1,13 @@ +#ifndef BRRESULTDATA_H +#define BRRESULTDATA_H + +#include + +class BRResultDetails : public QObject +{ + Q_OBJECT +public: + BRResultDetails(); +}; + +#endif // BRRESULTDATA_H diff --git a/sources/brcategory.cpp b/sources/brcategory.cpp index 9afdee1..c115c12 100644 --- a/sources/brcategory.cpp +++ b/sources/brcategory.cpp @@ -5,6 +5,7 @@ BRCategory::BRCategory(BRProvider* provider, BRWidget::BRFederation federation, int id, BRCategoryData initialData) : BRWidget(provider, federation, id) { this->currentRound = nullptr; + this->discipline = UnknownDiscipline; this->setData(initialData); } @@ -16,6 +17,14 @@ QString BRCategory::getName() { return this->name; } +BRCategory::BRDiscipline BRCategory::getDiscipline() { + return this->discipline; +} + +BRCategory::BRCategoryStatus BRCategory::getStatus() { + return this->status; +} + BRRound* BRCategory::getCurrentRound() const { return this->currentRound; } @@ -40,6 +49,8 @@ BRCategory::BRCategoryData BRCategory::getData() { BRCategory::BRCategoryData data { this, this->name, + this->discipline, + this->status, this->currentRound, this->rounds }; @@ -49,6 +60,8 @@ BRCategory::BRCategoryData BRCategory::getData() { void BRCategory::setData(BRCategoryData data) { this->name = data.name; + this->discipline = data.discipline; + this->status = data.status; emit this->metadataChanged(); if(this->currentRound != data.currentRound) { diff --git a/sources/brcompetition.cpp b/sources/brcompetition.cpp index 0a219cd..762bb8f 100644 --- a/sources/brcompetition.cpp +++ b/sources/brcompetition.cpp @@ -21,10 +21,6 @@ QString BRCompetition::getName() { return this->name; } -BRCompetition::BRDiscipline BRCompetition::getDiscipline() { - return this->discipline; -} - QDate BRCompetition::getStartDate() { return this->startDate; } @@ -105,7 +101,6 @@ BRWidget::BRWidgetStatusCode BRCompetition::load() { BRCompetitionData newData { this, this->name, - this->discipline, this->startDate, this->endDate, this->eventWebsiteUrl, @@ -128,7 +123,6 @@ BRWidget::BRWidgetStatusCode BRCompetition::load() { void BRCompetition::setData(BRCompetition::BRCompetitionData data) { this->name = data.name; - this->discipline = data.discipline; this->startDate = data.startDate; this->endDate = data.endDate; this->eventWebsiteUrl = data.eventWebsiteUrl; diff --git a/sources/brproviderdr.cpp b/sources/brproviderdr.cpp index 31f3c5c..e4f1213 100644 --- a/sources/brproviderdr.cpp +++ b/sources/brproviderdr.cpp @@ -182,7 +182,7 @@ BRLeague::BRLeagueData BRProviderDr::parseLeagueData(QVariantMap leaguePropertie // check if this competition is part of this league if(leagueProperties["leagueIDs"].toList().contains(competitionMap["cat_id"].toInt())) { - BRCompetition* competition = this->getCompetition(federation, competitionVar.toMap()["WetId"].toInt(), this->parseCompetitionData(competitionMap, federation)); + BRCompetition* competition = this->getCompetition(federation, competitionVar.toMap()["WetId"].toInt(), this->parseCompetitionData(competitionMap, rawData["cats"].toList(), federation)); data.competitions.append(competition); } } @@ -233,22 +233,14 @@ BRWidget::BRWidgetStatusCode BRProviderDr::getWidgetData(BRCompetition::BRCompet return BRWidget::Success; } -BRCompetition::BRCompetitionData BRProviderDr::parseCompetitionData(QVariantMap rawData, BRWidget::BRFederation federation) { +BRCompetition::BRCompetitionData BRProviderDr::parseCompetitionData(QVariantMap rawData, QVariantList globalCategoriesList, BRWidget::BRFederation federation) { // Load competition data from calendar BRCompetition::BRCompetitionData data; - QMap disciplineTranslations = { - {"boulder", BRCompetition::Boulder}, - {"lead", BRCompetition::Lead}, - {"speed", BRCompetition::Speed} - }; data.name = rawData["name"].toString(); qDebug() << "-- Parsing competition: " << data.name; - if(disciplineTranslations.contains(rawData["discipline"].toString())) - data.discipline = disciplineTranslations[rawData["discipline"].toString()]; - if(rawData.contains("date")) data.startDate = QDate::fromString(rawData["date"].toString(), "yyyy-MM-dd"); if(rawData.contains("date_end")) @@ -273,11 +265,30 @@ BRCompetition::BRCompetitionData BRProviderDr::parseCompetitionData(QVariantMap // load categories QVariantList categoriesList = rawData["cats"].toList(); data.categories.clear(); + for(QVariant categoryVar : categoriesList) { - BRCategory::BRCategoryData categoryData; - categoryData.currentRound = nullptr; - categoryData.name = categoryVar.toMap()["name"].toString(); - BRCategory* category = this->getCategory(federation, categoryVar.toMap()["GrpId"].toInt(), categoryData); + QVariantMap categoryMap = categoryVar.toMap(); + + // parse discipline + QString discipline; + if(rawData.contains("discipline")) + // all categories have the same discipline + discipline = rawData["discipline"].toString(); + else + // categories discipline may differ + // search category in global categories list + for(QVariant globalCategoryVar : globalCategoriesList) { + QVariantMap globalCategoryMap = globalCategoryVar.toMap(); + if(categoryMap["GrpId"].toInt() == globalCategoryMap["GrpId"].toInt()) { + // TODO: sex / gender + discipline = globalCategoryMap["discipline"].toString(); + break; + } + } + + categoryMap.insert("discipline", discipline); + + BRCategory* category = this->getCategory(federation, categoryMap["GrpId"].toInt(), this->parseCategoryData(categoryMap)); data.categories.append(category); } @@ -297,19 +308,30 @@ void BRProviderDr::parseCompetitionData(BRCompetition::BRCompetitionData* compet // for that, all categories are recreated QVariantList categoriesList = rawData["categorys"].toList(); - // delete old categories + // store old categories + QMap oldCategories; for(BRCategory* category : competitionData->categories) - category->deleteLater(); + if(!oldCategories.contains(category->getId())) + oldCategories.insert(category->getId(), category); + competitionData->categories.clear(); for(QVariant categoryVar : categoriesList) { QVariantMap categoryMap = categoryVar.toMap(); + int categoryId = categoryMap["GrpId"].toInt(); BRCategory::BRCategoryData categoryData; categoryData.name = categoryMap["name"].toString(); + + // restore data that is not available in competition view of the API + if(oldCategories.contains(categoryId)) { + categoryData.status = oldCategories[categoryId]->getStatus(); + categoryData.discipline = oldCategories[categoryId]->getDiscipline(); + } + categoryData.currentRound = nullptr; - qDebug() << "Loading category: " << categoryData.name; + qDebug() << "Loading category: " << categoryData.name << " with discipline: " << categoryData.discipline; QVariantMap roundList; // check if route_names are given: @@ -338,7 +360,7 @@ void BRProviderDr::parseCompetitionData(BRCompetition::BRCompetitionData* compet if(categoryData.currentRound == nullptr && categoryData.rounds.length() > 0) categoryData.currentRound = categoryData.rounds[0]; - BRCategory* category = this->getCategory(federation, categoryMap["GrpId"].toInt(), categoryData); + BRCategory* category = this->getCategory(federation, categoryId, categoryData); competitionData->categories.append(category); // restore current category and load its reults @@ -379,7 +401,10 @@ void BRProviderDr::parseCompetitionData(BRCompetition::BRCompetitionData* compet } } - // load round results + // delete old categories + for(int categoryId : oldCategories.keys()) { + oldCategories[categoryId]->deleteLater(); + } } } @@ -391,6 +416,8 @@ BRCup::BRCupData BRProviderDr::parseCupData(QVariantList categoriesList, QVarian data.name = rawData["name"].toString(); + qDebug() << "- Parsing Cup: " << data.name; + // parse categories for(QVariant categoryName : rawData["cats"].toList()) { // find category name in cats: @@ -398,10 +425,7 @@ BRCup::BRCupData BRProviderDr::parseCupData(QVariantList categoriesList, QVarian for(QVariant categoryVar : categoriesList) { QVariantMap categoryMap = categoryVar.toMap(); if(categoryMap["rkey"].toString() == categoryName.toString()) { - - BRCategory::BRCategoryData categoryData; - categoryData.name = rawData["name"].toString(); - BRCategory* category = this->getCategory(federation, rawData["GrpId"].toInt(), categoryData); + BRCategory* category = this->getCategory(federation, rawData["GrpId"].toInt(), this->parseCategoryData(categoryMap)); data.categories.append(category); break; } @@ -413,11 +437,37 @@ BRCup::BRCupData BRProviderDr::parseCupData(QVariantList categoriesList, QVarian BRCategory::BRCategoryData BRProviderDr::parseCategoryData(QVariantMap rawData) { BRCategory::BRCategoryData data; - // TODO: status - // TODO: sex - // TODO: load routes - // TODO: athletes - this->parseCategoryData(&data, rawData); + // TODO: gender + + data.name = rawData["name"].toString(); + data.currentRound = nullptr; + + QMap statusTranslations = { + {4, BRCategory::Registration}, + {2, BRCategory::Startlist}, + {1, BRCategory::Result}, + {0, BRCategory::Result} + }; + + QMap disciplineTranslations = { + {"boulder", BRCategory::Boulder}, + {"lead", BRCategory::Lead}, + {"speed", BRCategory::Speed} + }; + + if(disciplineTranslations.contains(rawData["discipline"].toString())) + data.discipline = disciplineTranslations[rawData["discipline"].toString()]; + else + data.discipline = BRCategory::UnknownDiscipline; + + // parse status + if(rawData.contains("status") && statusTranslations.contains(rawData["status"].toInt())) + data.status = statusTranslations[rawData["status"].toInt()]; + else + data.status = BRCategory::UnknownStatus; + + qDebug() << "-- Parsing category: " << data.name << " with discipline: " << data.discipline << " and status: " << data.status; + return data; } diff --git a/sources/brprovidervl.cpp b/sources/brprovidervl.cpp index 42a8741..f7e3538 100644 --- a/sources/brprovidervl.cpp +++ b/sources/brprovidervl.cpp @@ -114,7 +114,7 @@ void BRProviderVl::parseLeagueData(BRLeague::BRLeagueData* data, QVariantMap raw QVariantMap competitionMap = competitionVar.toMap(); qDebug() << "- Adding competition: " << competitionMap["event"].toString(); - BRCompetition* competition = this->getCompetition(federation, competitionVar.toMap()["event_id"].toInt(), this->parseCompetitionData(competitionMap, federation)); + BRCompetition* competition = this->getCompetition(federation, competitionVar.toMap()["event_id"].toInt(), this->parseCompetitionData(competitionMap, rawData["d_cats"].toList(), federation)); data->competitions.append(competition); } @@ -123,7 +123,7 @@ void BRProviderVl::parseLeagueData(BRLeague::BRLeagueData* data, QVariantMap raw for(QVariant cupVar : cupsVar) { QVariantMap cupMap = cupVar.toMap(); - BRCup* cup = this->getCup(federation, cupMap["cup_id"].toInt(), this->parseCupData(cupMap)); + BRCup* cup = this->getCup(federation, cupMap["cup_id"].toInt(), this->parseCupData(cupMap, rawData["d_cats"].toList())); data->cups.append(cup); } } @@ -172,18 +172,11 @@ BRWidget::BRWidgetStatusCode BRProviderVl::getWidgetData(BRCompetition::BRCompet return BRWidget::Success; } -BRCompetition::BRCompetitionData BRProviderVl::parseCompetitionData(QVariantMap rawData, BRWidget::BRFederation federation) { - - QMap disciplineTranslations = { - {"boulder", BRCompetition::Boulder}, - {"lead", BRCompetition::Lead}, - {"speed", BRCompetition::Speed} - }; +BRCompetition::BRCompetitionData BRProviderVl::parseCompetitionData(QVariantMap rawData, QVariantList globalCategoriesList, BRWidget::BRFederation federation) { BRCompetition::BRCompetitionData data; data.name = rawData["event"].toString(); - data.discipline = BRCompetition::Unknown; data.startDate = QDate::fromString(rawData["starts_at"].toString().split(" ")[0], "yyyy-MM-dd"); data.endDate = QDate::fromString(rawData["ends_at"].toString().split(" ")[0], "yyyy-MM-dd"); @@ -200,7 +193,16 @@ BRCompetition::BRCompetitionData BRProviderVl::parseCompetitionData(QVariantMap QVariantList categoriesList = rawData["d_cats"].toList(); for(QVariant categoryVar : categoriesList) { QVariantMap categoryMap = categoryVar.toMap(); - qDebug() << "-- Adding category: " << categoryMap["name"].toString(); + + // search category in global categories list + for(QVariant globalCategoryVar : globalCategoriesList) { + QVariantMap globalCategoryMap = globalCategoryVar.toMap(); + if(categoryMap["id"].toInt() == globalCategoryMap["id"].toInt()) { + categoryMap.insert("discipline", globalCategoryMap["discipline"].toString()); + break; + } + } + BRCategory* category = this->getCategory(federation, categoryMap["id"].toInt(), this->parseCategoryData(categoryMap)); data.categories.append(category); } @@ -211,7 +213,7 @@ BRCompetition::BRCompetitionData BRProviderVl::parseCompetitionData(QVariantMap } -BRCup::BRCupData BRProviderVl::parseCupData(QVariantMap rawData) { +BRCup::BRCupData BRProviderVl::parseCupData(QVariantMap rawData, QVariantList globalCategoriesList) { BRCup::BRCupData data; data.name = rawData["cup"].toString(); @@ -223,9 +225,18 @@ BRCup::BRCupData BRProviderVl::parseCupData(QVariantMap rawData) { QVariantMap categoryMap = categoryVar.toMap(); int categoryId = categoryMap["ranking_url"].toString().split("/").last().toInt(); + + // search category in global categories list + for(QVariant globalCategoryVar : globalCategoriesList) { + QVariantMap globalCategoryMap = globalCategoryVar.toMap(); + if(categoryId == globalCategoryMap["id"].toInt()) { + categoryMap.insert("discipline", globalCategoryMap["discipline"].toString()); + break; + } + } + BRCategory* category = this->getCategory(BRWidget::IFSC, categoryId, this->parseCategoryData(categoryMap)); data.categories.append(category); - } return data; @@ -235,10 +246,38 @@ BRCup::BRCupData BRProviderVl::parseCupData(QVariantMap rawData) { BRCategory::BRCategoryData BRProviderVl::parseCategoryData(QVariantMap rawData) { // TODO: status - // TODO: sex BRCategory::BRCategoryData data; data.name = rawData["name"].toString(); + // TODO: gender + + // parse status and discipline + QMap statusTranslations = { + {"registration_pending", BRCategory::Registration}, + {"registration_active", BRCategory::Registration}, + // TODO {2, BRCategory::Startlist}, + {"active", BRCategory::Result}, + {"finished", BRCategory::Result} + }; + + QMap disciplineTranslations = { + {"Boulder", BRCategory::Boulder}, + {"Lead", BRCategory::Lead}, + {"Speed", BRCategory::Speed} + }; + + if(disciplineTranslations.contains(rawData["discipline"].toString())) + data.discipline = disciplineTranslations[rawData["discipline"].toString()]; + else + data.discipline = BRCategory::UnknownDiscipline; + + if(statusTranslations.contains(rawData["status"].toString())) + data.status = statusTranslations[rawData["status"].toString()]; + else + data.status = BRCategory::UnknownStatus; + + qDebug() << "-- Parsing category: " << data.name << " with discipline: " << data.discipline << " and status: " << data.status; + data.currentRound = nullptr; // load rounds diff --git a/sources/brresult.cpp b/sources/brresult.cpp index 986e84e..fe8b3bd 100644 --- a/sources/brresult.cpp +++ b/sources/brresult.cpp @@ -14,6 +14,9 @@ BRAthlete* BRResult::getAthlete() const { return this->athlete; } +BRResultDetails* BRResult::getDetails() const { + return this->details; +} void BRResult::setData(BRResultData data) { this->rank = data.rank; diff --git a/sources/brresultdetails.cpp b/sources/brresultdetails.cpp new file mode 100644 index 0000000..d76882f --- /dev/null +++ b/sources/brresultdetails.cpp @@ -0,0 +1,6 @@ +#include "../headers/brresultdetails.h" + +BRResultDetails::BRResultDetails() +{ + +}