add descriptions to RideFile types

...and use these to get rid of the explicit list of ride file type
descriptions in the import wizard.
This commit is contained in:
Sean Rhea
2009-10-31 15:00:37 -04:00
parent c66bf0b1c9
commit 5dc82a6c93
15 changed files with 51 additions and 37 deletions

View File

@@ -35,6 +35,7 @@ typedef unsigned char ubyte;
static int Computrainer3dpFileReaderRegistered =
RideFileFactory::instance().registerReader("3dp",
"Computrainer 3dp",
new
Computrainer3dpFileReader
());

View File

@@ -65,16 +65,6 @@ struct cpi_file_info {
QString file, inname, outname;
};
bool
is_ride_filename(const QString filename)
{
QStringList suffixList = RideFileFactory::instance().suffixes();
QString s("^([0-9][0-9][0-9][0-9])_([0-9][0-9])_([0-9][0-9])"
"_([0-9][0-9])_([0-9][0-9])_([0-9][0-9])\\.(%1)$");
QRegExp re(s.arg(suffixList.join("|")));
return (re.exactMatch(filename));
}
QString
ride_filename_to_cpi_filename(const QString filename)
{
@@ -88,7 +78,7 @@ cpi_files_to_update(const QDir &dir, QList<cpi_file_info> &result)
QListIterator<QString> i(filenames);
while (i.hasNext()) {
const QString &filename = i.next();
if (is_ride_filename(filename)) {
if (RideFileFactory::instance().rideFileRegExp().exactMatch(filename)) {
QString inname = dir.absoluteFilePath(filename);
QString outname =
dir.absoluteFilePath(ride_filename_to_cpi_filename(filename));

View File

@@ -28,7 +28,8 @@
#include "math.h"
static int csvFileReaderRegistered =
RideFileFactory::instance().registerReader("csv", new CsvFileReader());
RideFileFactory::instance().registerReader(
"csv","Comma Separated Variable", new CsvFileReader());
RideFile *CsvFileReader::openRideFile(QFile &file, QStringList &errors) const
{

View File

@@ -533,14 +533,18 @@ MainWindow::importFile()
QString lastDir = (lastDirVar != QVariant())
? lastDirVar.toString() : QDir::homePath();
QStringList suffixList = RideFileFactory::instance().suffixes();
const RideFileFactory &rff = RideFileFactory::instance();
QStringList suffixList = rff.suffixes();
suffixList.replaceInStrings(QRegExp("^"), "*.");
QString suffixes = suffixList.join(" ");
QStringList fileNames;
QStringList allFormats;
allFormats << QString("All Support Formats (%1)").arg(suffixList.join(" "));
foreach(QString suffix, rff.suffixes())
allFormats << QString("%1 (*.%2)").arg(rff.description(suffix)).arg(suffix);
allFormats << "All files (*.*)";
fileNames = QFileDialog::getOpenFileNames(
this, tr("Import from File"), lastDir,
tr("All Support Formats (%1);;Raw Powertap Files (*.raw);;Comma Separated Variable (*.csv);;SRM training files (*.srm);;Garmin Training Centre (*.tcx);;Polar Precision (*.hrm);;WKO+ Files (*.wko);;Computrainer 3dp (*.3dp);;Quarq ANT+ Files (*.qla);;All files (*.*)").arg(suffixes));
allFormats.join(";;"));
if (!fileNames.isEmpty()) {
lastDir = QFileInfo(fileNames.front()).absolutePath();
settings->setValue(GC_SETTINGS_LAST_IMPORT_PATH, lastDir);

View File

@@ -25,7 +25,7 @@
#include "math.h"
static int manualFileReaderRegistered =
RideFileFactory::instance().registerReader("man", new ManualFileReader());
RideFileFactory::instance().registerReader("man", "Manual Ride File", new ManualFileReader());
RideFile *ManualFileReader::openRideFile(QFile &file, QStringList &errors) const
{

View File

@@ -30,13 +30,6 @@
#include <math.h>
#include <QtXml/QtXml>
static QString rideFileRegExp()
{
QStringList suffixList = RideFileFactory::instance().suffixes();
QString result("^(\\d\\d\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)\\.(%1)$");
return result.arg(suffixList.join("|"));
}
MetricAggregator::MetricAggregator()
{
}
@@ -47,7 +40,7 @@ void MetricAggregator::aggregateRides(QDir home, Zones *zones)
DBAccess *dbaccess = new DBAccess(home);
dbaccess->dropMetricTable();
dbaccess->createDatabase();
QRegExp rx(rideFileRegExp());
QRegExp rx = RideFileFactory::instance().rideFileRegExp();
QStringList errors;
QStringListIterator i(RideFileFactory::instance().listRideFiles(home));
while (i.hasNext()) {
@@ -71,7 +64,7 @@ bool MetricAggregator::importRide(QDir path, Zones *zones, RideFile *ride, QStri
QFile file(path.absolutePath() + "/" + fileName);
int zone_range = -1;
QRegExp rx(rideFileRegExp());
QRegExp rx = RideFileFactory::instance().rideFileRegExp();
if (!rx.exactMatch(fileName)) {
fprintf(stderr, "bad name: %s\n", fileName.toAscii().constData());
assert(false);
@@ -147,7 +140,7 @@ void MetricAggregator::scanForMissing(QDir home, Zones *zones)
QStringList errors;
DBAccess *dbaccess = new DBAccess(home);
QStringList filenames = dbaccess->getAllFileNames();
QRegExp rx(rideFileRegExp());
QRegExp rx = RideFileFactory::instance().rideFileRegExp();
QStringListIterator i(RideFileFactory::instance().listRideFiles(home));
while (i.hasNext()) {
QString name = i.next();

View File

@@ -25,7 +25,8 @@
static int polarFileReaderRegistered =
RideFileFactory::instance().registerReader("hrm", new PolarFileReader());
RideFileFactory::instance().registerReader(
"hrm", "Polar Precision", new PolarFileReader());
RideFile *PolarFileReader::openRideFile(QFile &file, QStringList &errors) const
{

View File

@@ -102,8 +102,10 @@ bool quarqInterpreterInstalled( void ) {
return installed;
}
static int antFileReaderRegistered =
quarqInterpreterInstalled() ? RideFileFactory::instance().registerReader("qla", new QuarqFileReader()) : 0;
static int antFileReaderRegistered = quarqInterpreterInstalled()
? RideFileFactory::instance().registerReader(
"qla", "Quarq ANT+ Files", new QuarqFileReader())
: 0;
RideFile *QuarqFileReader::openRideFile(QFile &file, QStringList &errors) const
{

View File

@@ -23,7 +23,8 @@
#include <math.h>
static int rawFileReaderRegistered =
RideFileFactory::instance().registerReader("raw", new RawFileReader());
RideFileFactory::instance().registerReader(
"raw", "GoldenCheetah Raw PowerTap Format", new RawFileReader());
struct ReadState
{

View File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2007 Sean C. Rhea (srhea@srhea.net)
* 2009 Justin F. Knotzke (jknotzke@shampoo.ca)
*
* 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
@@ -162,11 +163,13 @@ RideFileFactory &RideFileFactory::instance()
return *instance_;
}
int RideFileFactory::registerReader(const QString &suffix,
int RideFileFactory::registerReader(const QString &suffix,
const QString &description,
RideFileReader *reader)
{
assert(!readFuncs_.contains(suffix));
readFuncs_.insert(suffix, reader);
descriptions_.insert(suffix, description);
return 1;
}
@@ -175,6 +178,14 @@ QStringList RideFileFactory::suffixes() const
return readFuncs_.keys();
}
QRegExp
RideFileFactory::rideFileRegExp() const
{
QStringList suffixList = RideFileFactory::instance().suffixes();
QString s("^(\\d\\d\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)\\.(%1)$");
return QRegExp(s.arg(suffixList.join("|")));
}
RideFile *RideFileFactory::openRideFile(QFile &file,
QStringList &errors) const
{

View File

@@ -115,6 +115,7 @@ class RideFileFactory {
static RideFileFactory *instance_;
QMap<QString,RideFileReader*> readFuncs_;
QMap<QString,QString> descriptions_;
RideFileFactory() {}
@@ -122,10 +123,15 @@ class RideFileFactory {
static RideFileFactory &instance();
int registerReader(const QString &suffix, RideFileReader *reader);
int registerReader(const QString &suffix, const QString &description,
RideFileReader *reader);
RideFile *openRideFile(QFile &file, QStringList &errors) const;
QStringList listRideFiles(const QDir &dir) const;
QStringList suffixes() const;
QString description(const QString &suffix) const {
return descriptions_[suffix];
}
QRegExp rideFileRegExp() const;
};
#endif // _RideFile_h

View File

@@ -23,7 +23,8 @@
#define PI M_PI
static int srmFileReaderRegistered =
RideFileFactory::instance().registerReader("srm", new SrmFileReader());
RideFileFactory::instance().registerReader(
"srm", "SRM training files", new SrmFileReader());
RideFile *SrmFileReader::openRideFile(QFile &file, QStringList &errors) const
{

View File

@@ -21,7 +21,8 @@
#include "TcxParser.h"
static int tcxFileReaderRegistered =
RideFileFactory::instance().registerReader("tcx", new TcxFileReader());
RideFileFactory::instance().registerReader(
"tcx", "Garmin Training Centre", new TcxFileReader());
RideFile *TcxFileReader::openRideFile(QFile &file, QStringList &errors) const
{

View File

@@ -69,7 +69,8 @@ static WKO_ULONG WKO_device; // Device ID used for this workou
static char WKO_GRAPHS[32]; // GRAPHS available in this workout
static int wkoFileReaderRegistered =
RideFileFactory::instance().registerReader("wko", new WkoFileReader());
RideFileFactory::instance().registerReader(
"wko", "WKO+ Files", new WkoFileReader());
//******************************************************************************

View File

@@ -24,7 +24,8 @@
#include <assert.h>
static int xmlFileReaderRegistered =
RideFileFactory::instance().registerReader("xml", new XmlFileReader());
RideFileFactory::instance().registerReader(
"xml", "XML Ride Files", new XmlFileReader());
struct Interval {
double from_secs, thru_secs;