mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 16:18:42 +00:00
A new menu option added to download workout files from the ErgDB. Will also need to look at upload so we can share amongst the GC community. Fixes #521.
105 lines
3.0 KiB
C++
105 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2011 Mark Liversedge (liversedge@gmail.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
* Software Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
|
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "ErgDB.h"
|
|
|
|
static const QString ErgDBUrl = "http://www.73summits.com/ergdb/";
|
|
|
|
ErgDB::ErgDB(QObject *parent) : QObject(parent)
|
|
{
|
|
getList(); // get all the files...
|
|
}
|
|
|
|
// fetch a list from ErgDB
|
|
void
|
|
ErgDB::getList()
|
|
{
|
|
|
|
QEventLoop eventLoop; // holding pattern whilst waiting for a reply...
|
|
QNetworkAccessManager networkMgr; // for getting request
|
|
|
|
connect(&networkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(getListFinished(QNetworkReply*)));
|
|
connect(&networkMgr, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
|
|
QByteArray out;
|
|
|
|
// construct and make the call
|
|
QNetworkRequest request = QNetworkRequest(QUrl(ErgDBUrl + "api/list"));
|
|
networkMgr.get(request);
|
|
|
|
// holding pattern
|
|
eventLoop.exec();
|
|
}
|
|
|
|
void
|
|
ErgDB::getListFinished(QNetworkReply *reply)
|
|
{
|
|
_items.clear();
|
|
|
|
// we got something
|
|
QString line;
|
|
bool first=true;
|
|
while((line=reply->readLine().data()) != "") {
|
|
|
|
if (first == true) { // skip csv header line
|
|
first = false;
|
|
continue;
|
|
}
|
|
|
|
QStringList tokens = line.split(",");
|
|
if (tokens.count() == 6) {
|
|
ErgDBItem add;
|
|
add.id = tokens[0].toInt();
|
|
add.workoutType = tokens[1];
|
|
add.author = tokens[2];
|
|
add.name = tokens[3];
|
|
add.duration = tokens[4].toInt();
|
|
add.added = QDateTime::fromString(tokens[5].replace("\n",""), "yyyy-MM-dd hh:mm:ss");
|
|
_items << add;
|
|
}
|
|
}
|
|
}
|
|
|
|
// fetch a file from ErgDB
|
|
QString
|
|
ErgDB::getFile(int id, int ftp)
|
|
{
|
|
|
|
QEventLoop eventLoop; // holding pattern whilst waiting for a reply...
|
|
QNetworkAccessManager networkMgr; // for getting request
|
|
|
|
connect(&networkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(getFileFinished(QNetworkReply*)));
|
|
connect(&networkMgr, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
|
|
QByteArray out;
|
|
|
|
// construct and make the call
|
|
QNetworkRequest request = QNetworkRequest(QUrl(ErgDBUrl + QString("api/workout/%1/%2").arg(id).arg(ftp)));
|
|
networkMgr.get(request);
|
|
|
|
// holding pattern
|
|
eventLoop.exec();
|
|
|
|
// return the file
|
|
return fileContents;
|
|
}
|
|
|
|
void
|
|
ErgDB::getFileFinished(QNetworkReply *reply)
|
|
{
|
|
fileContents = reply->readAll().data();
|
|
}
|