mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 08:08:42 +00:00
API List Intervals
.. add an intervals=true|false to the fetch ride list URL to enable fetching of interval metrics as well as ride metrics. e.g. http://localhost:12021/athlete?intervals=true&metrics=Work,IF
This commit is contained in:
@@ -13,6 +13,7 @@ HttpResponse::HttpResponse(QTcpSocket* socket) {
|
||||
sentLastPart=false;
|
||||
buffersize=40960;
|
||||
barry.reserve(40960);
|
||||
userdata_=NULL;
|
||||
}
|
||||
|
||||
void HttpResponse::setHeader(QByteArray name, QByteArray value) {
|
||||
|
||||
@@ -90,6 +90,10 @@ public:
|
||||
void bwrite(QByteArray data);
|
||||
void flush();
|
||||
|
||||
// user data for response
|
||||
void setUserData(void *here) { userdata_ = here; }
|
||||
void *userData() { return userdata_; }
|
||||
|
||||
/**
|
||||
Indicates wheter the body has been sent completely. Used by the connection
|
||||
handler to terminate the body automatically when necessary.
|
||||
@@ -143,6 +147,8 @@ private:
|
||||
|
||||
int buffersize;
|
||||
QByteArray barry;
|
||||
|
||||
void *userdata_;
|
||||
};
|
||||
|
||||
#endif // HTTPRESPONSE_H
|
||||
|
||||
@@ -163,6 +163,48 @@ APIWebService::writeRideLine(QList<int> wanted, RideItem &item, HttpRequest *req
|
||||
if (item.dateTime.date() < since) return;
|
||||
if (item.dateTime.date() > before) return;
|
||||
|
||||
// are we doing rides or intervals?
|
||||
listRideSettings *settings = static_cast<listRideSettings *>(response->userData());
|
||||
|
||||
if (settings->intervals == true) {
|
||||
|
||||
// loop through all available intervals for this ride item
|
||||
foreach(IntervalItem *interval, item.intervals()){
|
||||
|
||||
// date, time, filename
|
||||
response->bwrite(item.dateTime.date().toString("yyyy/MM/dd").toLocal8Bit());
|
||||
response->bwrite(", ");
|
||||
response->bwrite(item.dateTime.time().toString("hh:mm:ss").toLocal8Bit());;
|
||||
response->bwrite(", ");
|
||||
response->bwrite(item.fileName.toLocal8Bit());
|
||||
|
||||
// now the interval name and type
|
||||
response->bwrite(", \"");
|
||||
response->bwrite(interval->name.toLocal8Bit());
|
||||
response->bwrite("\", ");
|
||||
response->bwrite(QString("%1").arg(static_cast<int>(interval->type)).toLocal8Bit());
|
||||
|
||||
// essentially the same as below .. cut and paste (refactor?XXX)
|
||||
if (wanted.count()) {
|
||||
// specific metrics
|
||||
foreach(int index, wanted) {
|
||||
double value = interval->metrics()[index];
|
||||
response->bwrite(",");
|
||||
response->bwrite(QString("%1").arg(value, 'f').simplified().toLocal8Bit());
|
||||
}
|
||||
} else {
|
||||
|
||||
// all metrics...
|
||||
foreach(double value, interval->metrics()) {
|
||||
response->bwrite(",");
|
||||
response->bwrite(QString("%1").arg(value, 'f').simplified().toLocal8Bit());
|
||||
}
|
||||
}
|
||||
response->bwrite("\n");
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// date, time, filename
|
||||
response->bwrite(item.dateTime.date().toString("yyyy/MM/dd").toLocal8Bit());
|
||||
response->bwrite(",");
|
||||
@@ -186,6 +228,7 @@ APIWebService::writeRideLine(QList<int> wanted, RideItem &item, HttpRequest *req
|
||||
}
|
||||
}
|
||||
response->bwrite("\n");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
#include "RideItem.h"
|
||||
#include <QDir>
|
||||
|
||||
struct listRideSettings {
|
||||
bool intervals;
|
||||
};
|
||||
|
||||
class APIWebService : public HttpRequestHandler
|
||||
{
|
||||
|
||||
|
||||
13
src/RideDB.y
13
src/RideDB.y
@@ -471,6 +471,8 @@ void RideCache::save()
|
||||
void
|
||||
APIWebService::listRides(QString athlete, HttpRequest &request, HttpResponse &response)
|
||||
{
|
||||
listRideSettings settings;
|
||||
|
||||
// the ride db
|
||||
QString ridedb = QString("%1/%2/cache/rideDB.json").arg(home.absolutePath()).arg(athlete);
|
||||
QFile rideDB(ridedb);
|
||||
@@ -485,6 +487,14 @@ APIWebService::listRides(QString athlete, HttpRequest &request, HttpResponse &re
|
||||
return;
|
||||
}
|
||||
|
||||
// intervals or rides?
|
||||
QString intervalsp = request.getParameter("intervals");
|
||||
if (intervalsp.toUpper() == "TRUE") settings.intervals = true;
|
||||
else settings.intervals = false;
|
||||
|
||||
// set user data
|
||||
response.setUserData(&settings);
|
||||
|
||||
// write headings
|
||||
const RideMetricFactory &factory = RideMetricFactory::instance();
|
||||
QVector<const RideMetric *> indexed(factory.metricCount());
|
||||
@@ -507,6 +517,9 @@ APIWebService::listRides(QString athlete, HttpRequest &request, HttpResponse &re
|
||||
// write headings
|
||||
response.bwrite("date, time, filename");
|
||||
|
||||
// if intervals, add interval name
|
||||
if (settings.intervals == true) response.bwrite(", interval name, interval type");
|
||||
|
||||
int i=0;
|
||||
foreach(const RideMetric *m, indexed) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user