mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 11:45:53 +01:00
Code cleanup
This commit is contained in:
parent
17c791d753
commit
dd80d34e58
@ -3,9 +3,8 @@
|
|||||||
bool CSVParser::loadFile(QFile *file)
|
bool CSVParser::loadFile(QFile *file)
|
||||||
{
|
{
|
||||||
bool res;
|
bool res;
|
||||||
int ln = 1;
|
|
||||||
|
|
||||||
_errorLine = 0;
|
_errorLine = 1;
|
||||||
_errorString.clear();
|
_errorString.clear();
|
||||||
|
|
||||||
while (!file->atEnd()) {
|
while (!file->atEnd()) {
|
||||||
@ -13,20 +12,17 @@ bool CSVParser::loadFile(QFile *file)
|
|||||||
QList<QByteArray> list = line.split(',');
|
QList<QByteArray> list = line.split(',');
|
||||||
if (list.size() < 3) {
|
if (list.size() < 3) {
|
||||||
_errorString = "Parse error";
|
_errorString = "Parse error";
|
||||||
_errorLine = ln;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal lat = list[0].trimmed().toDouble(&res);
|
qreal lat = list[0].trimmed().toDouble(&res);
|
||||||
if (!res || (lat < -90.0 || lat > 90.0)) {
|
if (!res || (lat < -90.0 || lat > 90.0)) {
|
||||||
_errorString = "Invalid latitude";
|
_errorString = "Invalid latitude";
|
||||||
_errorLine = ln;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
qreal lon = list[1].trimmed().toDouble(&res);
|
qreal lon = list[1].trimmed().toDouble(&res);
|
||||||
if (!res || (lon < -180.0 || lon > 180.0)) {
|
if (!res || (lon < -180.0 || lon > 180.0)) {
|
||||||
_errorString = "Invalid longitude";
|
_errorString = "Invalid longitude";
|
||||||
_errorLine = ln;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Waypoint wp(Coordinates(lon, lat));
|
Waypoint wp(Coordinates(lon, lat));
|
||||||
@ -41,7 +37,7 @@ bool CSVParser::loadFile(QFile *file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_waypoints.append(wp);
|
_waypoints.append(wp);
|
||||||
ln++;
|
_errorLine++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -83,32 +83,48 @@ static bool readAltitude(const char *line, qreal &ele)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IGCParser::readDate(const char *line)
|
static bool readARecord(const char *line, qint64 len)
|
||||||
{
|
{
|
||||||
|
if (len < 9 || line[0] != 'A')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (int i = 1; i < 7; i++)
|
||||||
|
if (!::isprint(line[i]))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IGCParser::readHRecord(const char *line, qint64 len)
|
||||||
|
{
|
||||||
|
if (len < 10 || ::strncmp(line, "HFDTE", 5))
|
||||||
|
return true;
|
||||||
|
|
||||||
int d = str2int(line + 5, 2);
|
int d = str2int(line + 5, 2);
|
||||||
int m = str2int(line + 7, 2);
|
int m = str2int(line + 7, 2);
|
||||||
int y = str2int(line + 9, 2);
|
int y = str2int(line + 9, 2);
|
||||||
|
|
||||||
if (y < 0 || m < 0 || d < 0) {
|
if (y < 0 || m < 0 || d < 0) {
|
||||||
_errorString = "Invalid date";
|
_errorString = "Invalid date header format";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_date = QDate(2000 + y, m, d);
|
_date = QDate(2000 + y, m, d);
|
||||||
|
if (!_date.isValid()) {
|
||||||
|
_errorString = "Invalid date";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IGCParser::readRecord(const char *line)
|
bool IGCParser::readBRecord(const char *line, qint64 len)
|
||||||
{
|
{
|
||||||
qreal lat, lon, ele;
|
qreal lat, lon, ele;
|
||||||
QDateTime timestamp;
|
QDateTime timestamp;
|
||||||
|
|
||||||
|
|
||||||
if (_date.isNull()) {
|
if (len < 35)
|
||||||
_errorString = "Date header missing";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
int h = str2int(line + 1, 2);
|
int h = str2int(line + 1, 2);
|
||||||
int m = str2int(line + 3, 2);
|
int m = str2int(line + 3, 2);
|
||||||
@ -157,44 +173,33 @@ bool IGCParser::loadFile(QFile *file)
|
|||||||
_tracks.append(TrackData());
|
_tracks.append(TrackData());
|
||||||
_time = QTime(0, 0);
|
_time = QTime(0, 0);
|
||||||
|
|
||||||
// Read the initial A record
|
|
||||||
if ((len = file->readLine(line, sizeof(line))) < 0) {
|
|
||||||
_errorString = "I/O error";
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
if (len < 9 || len > (qint64)sizeof(line) - 1 || line[0] != 'A') {
|
|
||||||
_errorString = "Not a IGC file";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (int i = 1; i < 7; i++) {
|
|
||||||
if (!::isprint(line[i])) {
|
|
||||||
_errorString = "Not a IGC file";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_errorLine++;
|
|
||||||
|
|
||||||
// Read header (H) records and data (B) records
|
|
||||||
while ((len = file->readLine(line, sizeof(line))) > 0) {
|
while ((len = file->readLine(line, sizeof(line))) > 0) {
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
_errorString = "I/O error";
|
_errorString = "I/O error";
|
||||||
return false;
|
return false;
|
||||||
}
|
} else if (len > (qint64)sizeof(line) - 1) {
|
||||||
if (len > (qint64)sizeof(line) - 1) {
|
|
||||||
_errorString = "Line limit exceeded";
|
_errorString = "Line limit exceeded";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line[0] == 'B') {
|
if (_errorLine == 1) {
|
||||||
if (len > 35)
|
if (!readARecord(line, len)) {
|
||||||
if (!readRecord(line))
|
_errorString = "Invalid/missing A record";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (line[0] == 'H') {
|
||||||
|
if (!readHRecord(line, len))
|
||||||
return false;
|
return false;
|
||||||
} else if (line[0] == 'H') {
|
} else if (line[0] == 'B') {
|
||||||
if (len > 10 && !::strncmp(line + 1, "FDTE", 4))
|
if (_date.isNull()) {
|
||||||
if (!readDate(line))
|
_errorString = "Missing date header";
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
if (!readBRecord(line, len))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_errorLine++;
|
_errorLine++;
|
||||||
|
@ -18,8 +18,8 @@ public:
|
|||||||
int errorLine() const {return _errorLine;}
|
int errorLine() const {return _errorLine;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool readDate(const char *line);
|
bool readHRecord(const char *line, qint64 len);
|
||||||
bool readRecord(const char *line);
|
bool readBRecord(const char *line, qint64 len);
|
||||||
|
|
||||||
int _errorLine;
|
int _errorLine;
|
||||||
QString _errorString;
|
QString _errorString;
|
||||||
|
Loading…
Reference in New Issue
Block a user