#include "../headers/brproviderdr.h" BRProviderDr::BRProviderDr(QObject *parent) : BRProvider(parent) { // leagues source: // - https://github.com/ralfbecker/ranking/blob/master/sitemgr/digitalrock/dav_calendar.php // - https://github.com/ralfbecker/ranking/blob/master/sitemgr/digitalrock/sac_calendar.php this->leagues.insert( BRWidget::DAV, { { {"id", 0}, {"name", "Deutsche Meisterschaft"}, {"color", "#A8F0A8"}, {"leagueIDs", QVariantList({59, 57, 60})} }, { {"id", 1}, {"name", "Deutscher Jugendcup"}, {"color", "#D8FFD8"}, {"leagueIDs", QVariantList({58})} }, { {"id", 2}, {"name", "Landesmeisterschaft"}, {"color", "#F0F0F0"}, {"leagueIDs", QVariantList({61, 56})} } }); this->leagues.insert( BRWidget::SAC, { { {"id", 0}, {"name", "Erwachsene"}, {"color", "#A8F0A8"}, {"leagueIDs", QVariantList({57, 59, 60})} }, { {"id", 1}, {"name", "Jugend"}, {"color", "#D8FFD8"}, {"leagueIDs", QVariantList({65})} }, { {"id", 2}, {"name", "RegioCups"}, {"color", "#F0F0F0"}, {"leagueIDs", QVariantList({64})} }, { {"id", 3}, {"name", "Iceclimbing"}, {"color", "#F0F0F0"}, {"leagueIDs", QVariantList({84})} } }); } BRWidget::BRWidgetStatusCode BRProviderDr::getWidgetData(BRCalendar::BRCalendarData* calendarData) { // load some data QString nationStr = calendarData->calendar->getFederation() == BRWidget::SAC ? "SUI":"GER"; qDebug() << "Nation str: " << nationStr << " federation: " << calendarData->calendar->getFederation(); int year = QDate::currentDate().year(); QString requestUrl = "https://www.digitalrock.de/egroupware/ranking/json.php?nation=" + nationStr + "&year=" + QString::number(year); QVariantMap ret = this->serverRequest(QUrl(requestUrl)); if(ret["status"] != 200){ // request was a failure return BRWidget::BRWidgetStatusCode(ret["status"].toInt()); } QVariantMap data = QJsonDocument::fromJson(ret["text"].toString().toUtf8()).toVariant().toMap(); data.insert("year", year); data.insert("federation", calendarData->calendar->getFederation()); // create seasons QVariantList seasons = data["years"].toList(); for(QVariant seasonVar : seasons) { int seasonId = seasonVar.toString().toInt(); BRSeason* season = this->getSeason( calendarData->calendar->getFederation(), seasonId, this->parseSeasonData(seasonId, data) ); calendarData->seasons.append(season); if(seasonId == year) calendarData->currentSeason = season; } return BRWidget::Success; } BRWidget::BRWidgetStatusCode BRProviderDr::getWidgetData(BRSeason::BRSeasonData* seasonData) { if(seasonData->season->getLeagues().length() > 0) { // leagues are already loaded // load some data QString nationStr = seasonData->season->getFederation() == BRWidget::SAC ? "SUI":"GER"; qDebug() << "Nation str: " << nationStr << " federation: " << seasonData->season->getFederation(); int year = seasonData->season->getYear(); QString requestUrl = "https://www.digitalrock.de/egroupware/ranking/json.php?nation=" + nationStr + "&year=" + QString::number(year); QVariantMap ret = this->serverRequest(QUrl(requestUrl)); if(ret["status"] != 200){ // request was a failure return BRWidget::BRWidgetStatusCode(ret["status"].toInt()); } QVariantMap data = QJsonDocument::fromJson(ret["text"].toString().toUtf8()).toVariant().toMap(); data.insert("year", year); data.insert("federation", seasonData->season->getFederation()); // populate season QVariantList seasons = data["years"].toList(); this->parseSeasonData(seasonData, year, data); return BRWidget::Success; } else { // should never happen return BRWidget::NotImplementedError; } } BRSeason::BRSeasonData BRProviderDr::parseSeasonData(int id, QVariantMap rawData) { BRSeason::BRSeasonData data; this->parseSeasonData(&data, id, rawData); return data; } void BRProviderDr::parseSeasonData(BRSeason::BRSeasonData* seasonData, int id, QVariantMap rawData) { seasonData->year = id; seasonData->nativeMultiLeagueSupport = true; seasonData->name = QString::number(id); BRWidget::BRFederation federation = BRWidget::BRFederation(rawData["federation"].toInt(0)); // insert the leagues for(QVariantMap leagueVar : this->leagues[federation]) { BRLeague* league = this->getLeague(federation, leagueVar["id"].toInt(), this->parseLeagueData(leagueVar, rawData)); seasonData->leagues.append(league); } } BRWidget::BRWidgetStatusCode BRProviderDr::getWidgetData(BRLeague::BRLeagueData* leagueData) { Q_UNUSED(leagueData) return BRWidget::NotImplementedError; } BRLeague::BRLeagueData BRProviderDr::parseLeagueData(QVariantMap leagueProperties, QVariantMap rawData) { BRLeague::BRLeagueData data; BRWidget::BRFederation federation = BRWidget::BRFederation(rawData["federation"].toInt(0)); data.name = leagueProperties["name"].toString(); data.color = QColor(leagueProperties["color"].toString()); qDebug() << "Adding league: " << data.name; // parse competitions QVariantList competitionsVar = rawData["competitions"].toList(); // TODO: make more efficient for(QVariant competitionVar : competitionsVar) { QVariantMap competitionMap = competitionVar.toMap(); // 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)); data.competitions.append(competition); qDebug() << "- Adding competition: " << competition->getName(); } } // if this is league with id 0 if(leagueProperties["id"].toInt() == 0) { // parse cups QVariantList cupsVar = rawData["cups"].toList(); for(QVariant cupVar : cupsVar) { QVariantMap cupMap = cupVar.toMap(); BRCup* cup = this->getCup(federation, cupMap["SerId"].toInt(), this->parseCupData(rawData["cats"].toList(), cupMap, federation)); data.cups.append(cup); } } return data; } BRWidget::BRWidgetStatusCode BRProviderDr::getWidgetData(BRCompetition::BRCompetitionData* competitionData) { } BRCompetition::BRCompetitionData BRProviderDr::parseCompetitionData(QVariantMap rawData, BRWidget::BRFederation federation) { QMap disciplineTranslations = { {"boulder", BRCompetition::Boulder}, {"lead", BRCompetition::Lead}, {"speed", BRCompetition::Speed} }; BRCompetition::BRCompetitionData data; data.name = rawData["name"].toString(); if(disciplineTranslations.contains(rawData["discipline"].toString())) data.discipline = disciplineTranslations[rawData["discipline"].toString()]; data.startDate = QDate::fromString(rawData["date"].toString(), "yyyy-MM-dd"); data.endDate = QDate::fromString(rawData["date_end"].toString(), "yyyy-MM-dd"); data.eventWebsiteUrl = rawData["homepage"].toString(); for(int i = 0; i < 2; i++) { QString infosheetName = QStringList({"info", "info2"})[i]; if(rawData.contains(infosheetName)) { QString url = rawData[infosheetName].toString(); if(federation == BRWidget::DAV) url = "http://ranking.alpenverein.de/" + QString::number(data.startDate.year()) + "/GER/" + rawData["rkey"].toString() + ".pdf"; data.infosheetUrls.append(url); } } QVariantList categoriesList = rawData["cats"].toList(); for(QVariant categoryVar : categoriesList) { QVariantMap categoryMap = categoryVar.toMap(); BRCategory* category = this->getCategory(federation, rawData["GrpId"].toInt(), this->parseCategoryData(categoryMap)); data.categories.append(category); } // TODO load results return data; } BRCup::BRCupData BRProviderDr::parseCupData(QVariantList categoriesList, QVariantMap rawData, BRWidget::BRFederation federation) { BRCup::BRCupData data; data.name = rawData["name"].toString(); // parse categories for(QVariant categoryName : rawData["cats"].toList()) { // find category name in cats: for(QVariant categoryVar : categoriesList) { QVariantMap categoryMap = categoryVar.toMap(); if(categoryMap["rkey"].toString() == categoryName.toString()) { BRCategory* category = this->getCategory(federation, rawData["GrpId"].toInt(), this->parseCategoryData(categoryMap)); data.categories.append(category); break; } } } return data; } BRCategory::BRCategoryData BRProviderDr::parseCategoryData(QVariantMap rawData) { // TODO: status // TODO: sex BRCategory::BRCategoryData data; data.name = rawData["name"].toString(); return data; }