Files
GoldenCheetah/src/ErgDB.cpp
Mark Liversedge 19b3ead80a Download from ErgDB
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.
2011-11-26 17:57:14 +00:00

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();
}