#include "headers/brprovidervl.h" BRProviderVl::BRProviderVl(QObject *parent) : BRProvider(parent) { } BRWidget::BRWidgetStatusCode BRProviderVl::getWidgetData(BRCalendar::BRCalendarData* calendarData) { // load some data QString requestUrl = "https://ifsc.results.info/api/v1/"; QVariantMap ret = this->serverRequest(QUrl(requestUrl), {{"x-auth-token", "cc7375f680648e7e6171e035e70351eb"}}); if(ret["status"] != 200){ // request was a failure return BRWidget::BRWidgetStatusCode(ret["status"].toInt()); } QVariantMap data = QJsonDocument::fromJson(ret["text"].toString().toUtf8()).toVariant().toMap(); // create seasons QVariantList seasons = data["seasons"].toList(); for(QVariant seasonVar : seasons) { QVariantMap seasonMap = seasonVar.toMap(); int seasonId = seasonMap["name"].toInt(); BRSeason* season = this->getSeason( calendarData->calendar->getFederation(), seasonId, this->parseSeasonData(seasonMap) ); calendarData->seasons.append(season); qDebug() << "Inserted season:" << season->getName(); if(seasonId == data["current"].toMap()["season"].toInt()) calendarData->currentSeason = season; } // load default league of current season calendarData->currentSeason->getLeagues()[0]->load(); return BRWidget::Success; } BRWidget::BRWidgetStatusCode BRProviderVl::getWidgetData(BRSeason::BRSeasonData* seasonData) { if(seasonData->season->getLeagues().length() > 0) { // leagues are already loaded // load default league seasonData->season->getLeagues()[0]->load(); return BRWidget::Success; } else { // should never happen return BRWidget::NotImplementedError; } } BRSeason::BRSeasonData BRProviderVl::parseSeasonData(QVariantMap rawData) { BRSeason::BRSeasonData data; data.year = rawData["name"].toInt(); data.name = rawData["name"].toString(); data.nativeMultiLeagueSupport = false; // insert the leagues for(QVariant leagueVar : rawData["leagues"].toList()) { QVariantMap leagueMap = leagueVar.toMap(); BRLeague::BRLeagueData leagueData; leagueData.name = leagueMap["name"].toString(); int leagueId = leagueMap["url"].toString().split("/").last().toInt(); BRLeague* league = this->getLeague(BRWidget::IFSC, leagueId, leagueData); data.leagues.append(league); } return data; } BRWidget::BRWidgetStatusCode BRProviderVl::getWidgetData(BRLeague::BRLeagueData* leagueData) { // load some data QString requestUrl = "https://ifsc.results.info/api/v1/season_leagues/" + QString::number(leagueData->league->getId()); QVariantMap ret = this->serverRequest(QUrl(requestUrl), {{"x-auth-token", "cc7375f680648e7e6171e035e70351eb"}}); if(ret["status"] != 200){ // request was a failure return BRWidget::BRWidgetStatusCode(ret["status"].toInt()); } QVariantMap data = QJsonDocument::fromJson(ret["text"].toString().toUtf8()).toVariant().toMap(); this->parseLeagueData(leagueData, data); return BRWidget::Success; } void BRProviderVl::parseLeagueData(BRLeague::BRLeagueData* data, QVariantMap rawData) { BRWidget::BRFederation federation = BRWidget::BRFederation(rawData["federation"].toInt(0)); data->name = rawData["league"].toString(); data->color = QColor("#ffffff"); // TODO qDebug() << "Adding league: " << data->name; // parse competitions QVariantList competitionsVar = rawData["events"].toList(); for(QVariant competitionVar : competitionsVar) { QVariantMap competitionMap = competitionVar.toMap(); BRCompetition* competition = this->getCompetition(federation, competitionVar.toMap()["event_id"].toInt(), this->parseCompetitionData(competitionMap, federation)); data->competitions.append(competition); qDebug() << "- Adding competition: " << competition->getName(); } // parse cups QVariantList cupsVar = rawData["cups"].toList(); for(QVariant cupVar : cupsVar) { QVariantMap cupMap = cupVar.toMap(); BRCup* cup = this->getCup(federation, cupMap["cup_id"].toInt(), this->parseCupData(cupMap)); data->cups.append(cup); } } BRWidget::BRWidgetStatusCode BRProviderVl::getWidgetData(BRCompetition::BRCompetitionData* competitionData) { } BRCompetition::BRCompetitionData BRProviderVl::parseCompetitionData(QVariantMap rawData, BRWidget::BRFederation federation) { QMap disciplineTranslations = { {"boulder", BRCompetition::Boulder}, {"lead", BRCompetition::Lead}, {"speed", BRCompetition::Speed} }; 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"); data.eventWebsiteUrl = ""; for(int i = 0; i < 2; i++) { QString infosheetName = QStringList({"infosheet_url", "additional_info_url"})[i]; if(rawData.contains(infosheetName) && !rawData[infosheetName].isNull()) { data.infosheetUrls.append(rawData[infosheetName].toString()); } } QVariantList categoriesList = rawData["d_cats"].toList(); for(QVariant categoryVar : categoriesList) { QVariantMap categoryMap = categoryVar.toMap(); BRCategory* category = this->getCategory(federation, rawData["id"].toInt(), this->parseCategoryData(categoryMap)); data.categories.append(category); } // TODO load results return data; } BRCup::BRCupData BRProviderVl::parseCupData(QVariantMap rawData) { BRCup::BRCupData data; data.name = rawData["cup"].toString(); // parse categories for(QVariant categoryVar : rawData["d_cats"].toList()) { // find category name in cats: QVariantMap categoryMap = categoryVar.toMap(); int categoryId = categoryMap["ranking_url"].toString().split("/").last().toInt(); BRCategory* category = this->getCategory(BRWidget::IFSC, categoryId, this->parseCategoryData(categoryMap)); data.categories.append(category); } return data; } BRCategory::BRCategoryData BRProviderVl::parseCategoryData(QVariantMap rawData) { // TODO: status // TODO: sex BRCategory::BRCategoryData data; data.name = rawData["name"].toString(); return data; }