diff options
Diffstat (limited to 'csv/csv.cpp')
| -rw-r--r-- | csv/csv.cpp | 79 |
1 files changed, 33 insertions, 46 deletions
diff --git a/csv/csv.cpp b/csv/csv.cpp index 0f9072a7..6b4d0bcd 100644 --- a/csv/csv.cpp +++ b/csv/csv.cpp @@ -10,19 +10,16 @@ */ #include "csv.h" -#include "opentrack-library-path.h" +#include "compat/library-path.hpp" #include <QTextDecoder> #include <QFile> -#include <QCoreApplication> #include <QString> #include <QDebug> #include <utility> #include <algorithm> -using std::move; - -const QTextCodec* CSV::m_codec = QTextCodec::codecForName("System"); +const QTextCodec* const CSV::m_codec = QTextCodec::codecForName("UTF-8"); const QRegExp CSV::m_rx = QRegExp(QString("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)?\\n?")); const QRegExp CSV::m_rx2 = QRegExp(QString("(?:\"([^\"]*)\";?)|(?:([^;]*);?)?")); @@ -48,7 +45,7 @@ QString CSV::readLine() } else { - static const QChar lf(QChar::LineFeed); + const QChar lf(QChar::LineFeed); while (m_pos < m_string.length()) if (m_string[m_pos++] == lf) @@ -79,7 +76,7 @@ bool CSV::parseLine(QStringList& ret) else if (m_rx2.cap(2).size() > 0) col = m_rx2.cap(2); - list << move(col); + list << col; if (col.size()) pos2 += m_rx2.matchedLength(); @@ -87,7 +84,7 @@ bool CSV::parseLine(QStringList& ret) pos2++; } } - ret = move(list); + ret = std::move(list); return true; } @@ -96,11 +93,13 @@ bool CSV::getGameData(int id, unsigned char* table, QString& gamename) for (int i = 0; i < 8; i++) table[i] = 0; + if (id != 0) + qDebug() << "csv: lookup game id" << id; + QString id_str(QString::number(id)); static const QString csv_path(OPENTRACK_BASE_PATH + - OPENTRACK_DOC_PATH + - QString("settings/facetracknoir supported games.csv")); + OPENTRACK_DOC_PATH "settings/facetracknoir supported games.csv"); QFile file(csv_path); @@ -112,13 +111,12 @@ bool CSV::getGameData(int id, unsigned char* table, QString& gamename) CSV csv(&file); - int lineno = 0; unsigned tmp[8]; unsigned fuzz[3]; QStringList gameLine; - while (lineno++, csv.parseLine(gameLine)) + for (int lineno = 0; csv.parseLine(gameLine); lineno++) { //qDebug() << "Column 0: " << gameLine.at(0); // No. //qDebug() << "Column 1: " << gameLine.at(1); // Game Name @@ -133,52 +131,41 @@ bool CSV::getGameData(int id, unsigned char* table, QString& gamename) { if (gameLine.at(6).compare(id_str, Qt::CaseInsensitive) == 0) { - const QString proto(move(gameLine.at(3))); - const QString name(move(gameLine.at(1))); - - const QByteArray id_cstr = gameLine.at(7).toLatin1(); - - if (proto == QString("V160")) - { - /* nothing */ - } - else if (id_cstr.length() != 22 || - sscanf(id_cstr.constData(), - "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - fuzz + 2, - fuzz + 0, - tmp + 3, - tmp + 2, - tmp + 1, - tmp + 0, - tmp + 7, - tmp + 6, - tmp + 5, - tmp + 4, - fuzz + 1) != 11) - { + const QString& proto = gameLine[3]; + QString& name = gameLine[1]; + + const QByteArray id_cstr = gameLine[7].toLatin1(); + + auto do_scanf = [&]() { + return sscanf(id_cstr.constData(), + "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + fuzz + 2, + fuzz + 0, + tmp + 3, tmp + 2, tmp + 1, tmp + 0, + tmp + 7, tmp + 6, tmp + 5, tmp + 4, + fuzz + 1); + }; + + if (proto == QStringLiteral("V160") || id_cstr.length() != 22) + (void)0; + else if (id_cstr.length() != 22 || do_scanf() != 11) qDebug() << "scanf failed" << lineno; - } else { + using uchar = unsigned char; for (int i = 0; i < 8; i++) - { - using t = unsigned char; - table[i] = t(tmp[i]); - } + table[i] = uchar(tmp[i]); } - //qDebug() << "csv: game-id" << id_str << "proto" << proto; - gamename = move(name); + gamename = std::move(name); return true; } } else - { qDebug() << "malformed csv line" << lineno; - } } - qDebug() << "unknown game connected" << id; + if (id) + qDebug() << "unknown game connected" << id; return false; } |
