mirror of
https://github.com/ea4k/klog.git
synced 2024-09-21 10:28:06 +00:00
1553 lines
44 KiB
C++
1553 lines
44 KiB
C++
/***************************************************************************
|
|
world.cpp - description
|
|
-------------------
|
|
begin : sept 2011
|
|
copyright : (C) 2011 by Jaime Robles
|
|
email : jaime@robles.es
|
|
***************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
* This file is part of KLog. *
|
|
* *
|
|
* KLog 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 3 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* KLog 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 KLog. If not, see <http://www.gnu.org/licenses/>. *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
#include "world.h"
|
|
|
|
|
|
/*
|
|
QHash<QString, int> worldPrefixes;
|
|
To insert a (key, value) pair into the hash, you can use operator[]():
|
|
hash["EA"] = 130;
|
|
hash["EA6"] = 131;
|
|
hash["EA8"] = 132;
|
|
|
|
*/
|
|
World::World()
|
|
{
|
|
//qDebug() << "World::World(0)" << endl;
|
|
|
|
worldModel = new QSqlRelationalTableModel(this);
|
|
numberOfEntities = 0;
|
|
progressBarPosition = 0;
|
|
kontestDir = "";
|
|
kontestVersion = "";
|
|
locator = new Locator();
|
|
created = false;
|
|
dataProxy = new DataProxy_SQLite();
|
|
//awards = new Awards();
|
|
|
|
}
|
|
|
|
|
|
World::World(const QString _kontestDir)
|
|
{
|
|
//qDebug() << "World::World(1): Dir" << _kontestDir << endl;
|
|
kontestDir = _kontestDir;
|
|
kontestVersion = "";
|
|
worldModel = new QSqlRelationalTableModel(this);
|
|
numberOfEntities = 0;
|
|
progressBarPosition = 0;
|
|
created = false;
|
|
//flagsDir=":/flags/";
|
|
locator = new Locator();
|
|
dataProxy = new DataProxy_SQLite();
|
|
//identifyOS();
|
|
//awards = new Awards();
|
|
|
|
}
|
|
|
|
World::World(const QString _kontestDir, const QString _kontestVer)
|
|
{
|
|
//qDebug() << "World::World(2): Dir" << _kontestDir << endl;
|
|
kontestDir = _kontestDir;
|
|
kontestVersion = _kontestVer;
|
|
worldModel = new QSqlRelationalTableModel(this);
|
|
//qDebug() << "World::World(2): 1" << endl;
|
|
numberOfEntities = 0;
|
|
progressBarPosition = 0;
|
|
created = false;
|
|
//appDir = QString();
|
|
//flagsDir=":/flags/";
|
|
//qDebug() << "World::World(2): 2" << endl;
|
|
locator = new Locator();
|
|
//qDebug() << "World::World(2): 3" << endl;
|
|
dataProxy = new DataProxy_SQLite();
|
|
|
|
//qDebug() << "World::World(2): 4" << endl;
|
|
//identifyOS();
|
|
|
|
}
|
|
|
|
World::~World()
|
|
{
|
|
//qDebug() << "World::~World" << endl;
|
|
}
|
|
|
|
|
|
bool World::recreate(const QString _worldFile)
|
|
{
|
|
//qDebug() << "World::recreate: " << _worldFile << endl;
|
|
|
|
QSqlQuery query;
|
|
if (query.exec("DELETE FROM entity"))
|
|
{
|
|
//qDebug() << "World::recreate: EMPTY entity" << endl;
|
|
if (query.exec("DELETE FROM prefixesofentity"))
|
|
{
|
|
//qDebug() << "World::recreate: EMPTY prefixesofentity" << endl;
|
|
return create(_worldFile);
|
|
}
|
|
else
|
|
{//TODO: Manage the query error
|
|
//qDebug() << "World::recreate: FAILED TO EMPTY prefixesofentity" << endl;
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{//TODO: Manage the query error
|
|
//qDebug() << "World::recreate: FAILED TO EMPTY entity" << endl;
|
|
return false;
|
|
}
|
|
//qDebug() << "World::recreate: END..." << endl;
|
|
return false;
|
|
}
|
|
|
|
bool World::create(const QString _worldFile)
|
|
{
|
|
//qDebug() << "World::create: " << _worldFile << endl;
|
|
//kontestDir = _worldFile;
|
|
//qDebug() << "World::create: 2 " << kontestDir << endl;
|
|
|
|
|
|
if (readCTYCSV(_worldFile))
|
|
{
|
|
created = true;
|
|
//qDebug() << "World::create: TRUE" << endl;
|
|
|
|
}else
|
|
{
|
|
created = false;
|
|
//qDebug() << "World::create: FALSE" << endl;
|
|
|
|
}
|
|
if (created)
|
|
{
|
|
dataProxy->updateISONames();
|
|
}
|
|
|
|
//qDebug() << "World::create: END" << endl;
|
|
return created;
|
|
}
|
|
|
|
void World::createWorldModel()
|
|
{
|
|
worldModel->setTable("entity");
|
|
|
|
worldModel->setRelation(Entity_Continent, QSqlRelation("continent", "id", "shortname"));
|
|
worldModel->setSort(Entity_Name, Qt::AscendingOrder);
|
|
worldModel->setHeaderData(Entity_Name, Qt::Horizontal, tr("Entity"));
|
|
worldModel->setHeaderData(Entity_Continent, Qt::Horizontal, tr("Continent"));
|
|
|
|
worldModel->select();
|
|
|
|
}
|
|
|
|
QStringList World::processLine(const QString _line)
|
|
{
|
|
|
|
//qDebug() << "World::processLine: received: " << _line << endl;
|
|
//QString queryString;
|
|
QStringList aa;
|
|
QString line;
|
|
line = (_line).simplified();
|
|
if ((line).count('\'')) // Replaces ' by _
|
|
//The error comes from "Cote d'Ivoire" that breaks the SQL
|
|
{
|
|
line.replace(QChar('\''), QChar('_'));
|
|
}
|
|
//qDebug() << "World::processLine: Received: " << line << endl;
|
|
//QSqlQuery query1;
|
|
|
|
nullValue=-1;
|
|
|
|
|
|
if ( (line.count(':') == 8 ) ) // First line of an Entity
|
|
{ //United States: 05: 08: NA: 43.00: 87.90: 5.0: K:
|
|
//qDebug() << "World::processLine first: " << line << endl;
|
|
numberOfEntities++;
|
|
list.clear();
|
|
list << line.split(':');
|
|
entityName = list[0];
|
|
cqz = list[1].toInt();
|
|
ituz = list[2].toInt();
|
|
continentName = (list[3]).simplified();
|
|
|
|
continentId=-1;
|
|
lat = list[4].toDouble();
|
|
lon = list[5].toDouble();
|
|
utc = ((list[6]).simplified()).toDouble();
|
|
prefix = list[7];
|
|
currentPrefix = prefix;
|
|
|
|
continentId = dataProxy->getContinentIdFromContinentShortName(continentName);
|
|
|
|
//queryString = "SELECT id FROM continent WHERE shortname=='" + continentName + "'";
|
|
//query1.exec(queryString);
|
|
//query1.next();
|
|
//if (query1.isValid())
|
|
//{
|
|
// continentId = (query1.value(0)).toInt();
|
|
//}
|
|
//qDebug() << "World::processLine Query: " << queryString << endl;
|
|
|
|
|
|
//qDebug() << "World::processLine Query - Read/continenId: " << continentName << "/" << QString::number(continentId) << endl;
|
|
|
|
//queryString = QString("INSERT INTO entity (id, name, cqz, ituz, continent, latitude, longitude, utc, dxcc, mainprefix) VALUES (NULL,'%1','%2','%3','%4','%5','%6','%7','%8','%9');\n").arg(entityName).arg(cqz).arg(ituz).arg(QString::number(continentId)).arg(lat).arg(lon).arg(utc).arg(numberOfEntities).arg(prefix);
|
|
aa << entityName << QString::number(cqz) << QString::number(ituz) <<QString::number(continentId) << QString::number(lat) << QString::number(lon) << QString::number(utc) << QString::number(numberOfEntities) << prefix;
|
|
//qDebug() << "World::processLine Query: " << queryString << endl;
|
|
return aa;
|
|
//ret = query.exec(queryString);
|
|
|
|
progressBarPosition++;
|
|
}
|
|
aa.clear();
|
|
return aa;
|
|
}
|
|
|
|
|
|
|
|
|
|
QStringList World::processLineP(const QString _line, const int _processingEntity){
|
|
//Returns QStringList: prefix << dxcc << cqz << ituz OR CurrentEntity as a number
|
|
|
|
//qDebug() << "World::processLineP: Entity/received: " << QString::number(_processingEntity) << "/" << _line << endl;
|
|
//QString queryString;
|
|
QString line;
|
|
int currentEntity = _processingEntity;
|
|
int _cqz, _ituz;
|
|
_cqz = 0;
|
|
_ituz = 0;
|
|
line = (_line).simplified();
|
|
|
|
|
|
if ((line).count('\'')) // Replaces ' by _
|
|
//The error comes from "Cote d'Ivoire" that breaks the SQL
|
|
{
|
|
line.replace(QChar('\''), QChar('_'));
|
|
}
|
|
|
|
//qDebug() << "World::processLineP: Received: " << line << endl;
|
|
//QSqlQuery _queryp;
|
|
QStringList aa, _list;
|
|
aa.clear();
|
|
|
|
if ( (line.count(':') == 8 ) ) // First line of an Entity
|
|
{ //United States: 05: 08: NA: 43.00: 87.90: 5.0: K:
|
|
currentEntity++;
|
|
aa << QString::number(currentEntity);
|
|
return aa;
|
|
|
|
}
|
|
else if ( line.endsWith(';') ) // Last line of the Entity
|
|
{ // =WX4TM(4),=WX5S(3)[6],=WY5I(5)[8],=WY7I(4)[7],=WY7LL(4)[7],=WZ4F(4);
|
|
//qDebug() << "World::processLineP last line (; detected): " << line << endl;
|
|
_cqz = dataProxy->getCQzFromEntity(currentEntity);
|
|
_ituz = dataProxy->getITUzFromEntity(currentEntity);
|
|
|
|
line = line.remove(';');
|
|
|
|
if (line.count(',') == 0) // Only one prefix in the final line
|
|
{
|
|
prefixAndZones = readZones(line, _cqz, _ituz);
|
|
//aa.clear();
|
|
aa << prefixAndZones.at(0) << QString::number(currentEntity) << prefixAndZones.at(1) << prefixAndZones.at(2);
|
|
|
|
//qDebug() << "World::processLineP Query (only one final): " << queryString << endl;
|
|
//readZones returns a QStringList: prefix, CQz, ITUz
|
|
//Returns QStringList: prefix << dxcc << cqz << ituz OR CurrentEntity as a number
|
|
return aa;
|
|
}
|
|
else // More than just one prefix in the final line
|
|
{
|
|
//qDebug() << "World::processLineP Query (MORE one final)(line):" << line << endl;
|
|
_list.clear();
|
|
_list << line.split(',');
|
|
aa.clear();
|
|
//queryString.clear();
|
|
|
|
for (int i = 0; i < _list.size(); ++i)
|
|
{
|
|
// PROCESS THE LINE
|
|
//qDebug() << "World::processLineP LastLine prefixes" << _list.at(i) << endl;
|
|
//readZones returns a QStringList: prefix, CQz, ITUz
|
|
prefixAndZones = readZones(_list.at(i), _cqz, _ituz);
|
|
//aa.clear();
|
|
aa << prefixAndZones.at(0) << QString::number(currentEntity) << prefixAndZones.at(1) << prefixAndZones.at(2);
|
|
//return aa;
|
|
}
|
|
|
|
//qDebug() << "World::processLineP: END" <<endl;
|
|
return aa;
|
|
|
|
}
|
|
|
|
}
|
|
else // Lines of the middle...
|
|
{ // =W4KW(4),=W4LC(4),=W4LSC(3)[6],=W4LWW(4),=W4NBS(4),=W4NI(4),=W4NTI(4),
|
|
//qDebug() << "World::processLine middle (no ; detected): " << line << endl;
|
|
|
|
_cqz = dataProxy->getCQzFromEntity(currentEntity);
|
|
_ituz = dataProxy->getITUzFromEntity(currentEntity);
|
|
|
|
if (line.endsWith(','))
|
|
{
|
|
line.chop(1);
|
|
}
|
|
|
|
if ((line.split(',')).size() == 1) // Only one prefix in the middle line
|
|
{ // Not usual, added this check for sanity reasons only
|
|
//qDebug() << "World::processLine Query: (only one middle) " << endl;
|
|
line = line.remove(',');
|
|
prefixAndZones = readZones(line, _cqz, _ituz);
|
|
aa.clear();
|
|
aa << prefixAndZones.at(0) << QString::number(currentEntity) << prefixAndZones.at(1) << prefixAndZones.at(2);
|
|
//qDebug() << "World::processLine Query (only one final): " << queryString << endl;
|
|
|
|
return aa;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "World::processLine Query: (MORE than one middle) " << endl;
|
|
list.clear();
|
|
list << line.split(',');
|
|
|
|
//queryString.clear();
|
|
aa.clear();
|
|
for (int i = 0; i < list.size(); ++i)
|
|
{
|
|
// PROCESS THE LINE
|
|
prefixAndZones = readZones(list[i], _cqz, _ituz);
|
|
|
|
aa << prefixAndZones.at(0) << QString::number(currentEntity) << prefixAndZones.at(1) << prefixAndZones.at(2);
|
|
|
|
//ret = query.exec(queryString);
|
|
}
|
|
//qDebug() << "World::processLine Query: " << queryString << endl;
|
|
}
|
|
}
|
|
//aa.clear();
|
|
return aa;
|
|
}
|
|
|
|
|
|
QStringList World::readZones (const QString &pref, const int _cq, const int _itu)
|
|
{
|
|
//Returns a QStringList: prefix, CQz, ITUz
|
|
//qDebug() << "World::readZones: (" << pref << "/" << QString::number(_cq) <<"/" << QString::number(_itu)<< ")" << endl;
|
|
|
|
QStringList result;
|
|
int cq = _cq;
|
|
int itu = _itu;
|
|
QString azone;
|
|
QString aux = pref;
|
|
|
|
if (aux.startsWith("=")){
|
|
aux = aux.remove(0,1);
|
|
|
|
}
|
|
|
|
if(aux.count('[')==1) // Check if has special CQz
|
|
{
|
|
//qDebug() << "World::readZones DETECTED [ !!!!" << endl;
|
|
azone = (aux.midRef(aux.indexOf('[')+1)).toString();
|
|
//qDebug() << "World::readZones (ITU)-1: " << aux << " right of " << QString::number(aux.indexOf('[')) << " = " << azone << endl;
|
|
itu = (azone.left(azone.indexOf(']'))).toInt();
|
|
//qDebug() << "World::readZones (ITU)-2: " << azone.left(azone.indexOf(']')) << endl;
|
|
aux = aux.left(aux.indexOf('['));
|
|
//qDebug() << "World::readZones (ITU): " << pref << "/" << QString::number(itu) << "/" << aux << endl;
|
|
}
|
|
|
|
if(aux.count('(')==1) // Check if has special CQz
|
|
{
|
|
//qDebug() << "World::readZones DETECTED ( !!!!" << endl;
|
|
azone = (aux.midRef(aux.indexOf('(')+1)).toString();
|
|
cq = (azone.left(azone.indexOf(')'))).toInt();
|
|
aux = aux.left(aux.indexOf('('));
|
|
//qDebug() << "World::readZones (CQ): " << pref << "/" << QString::number(cq) << "/" << aux << endl;
|
|
}
|
|
//qDebug() << "World::readZones (Pref/CQ/ITU): " << pref << "= " << aux <<"/" << QString::number(cq) << "/" << QString::number(itu) << endl;
|
|
|
|
result << aux << QString::number(cq) << QString::number(itu);
|
|
//qDebug() << "World::readZones (Pref/CQ/ITU): " << result << endl;
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
int World::getPrefixId(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getPrefixId: -" << _qrz <<"-" << endl;
|
|
//TODO: Instead of going from long to short, identify prefixes from the begining:
|
|
// character(may be number) + number
|
|
|
|
//int errorCode;
|
|
|
|
if (_qrz.length() < 1)
|
|
{
|
|
return -1;
|
|
}
|
|
int entityID = 0;
|
|
//int iaux1, iaux2;
|
|
|
|
//QString prefixl, prefixr;
|
|
//QString queryString;
|
|
//QSqlQuery query;
|
|
|
|
QString aux = changeSlashAndFindPrefix((_qrz).toUpper());
|
|
|
|
//query.prepare("SELECT dxcc FROM prefixesofentity WHERE prefix==:prefix");
|
|
|
|
//QSqlDatabase::database().transaction();
|
|
|
|
while ((entityID <= 0) && (aux.length()>=1) )
|
|
{
|
|
entityID = dataProxy->getDXCCFromPrefix(aux);
|
|
|
|
//qDebug() << "World::getPrefixId: in the while" << aux << " = " << QString::number(entityID) << endl;
|
|
if (entityID<=0)
|
|
{
|
|
aux.chop(1);
|
|
}
|
|
|
|
}
|
|
|
|
//QSqlDatabase::database().commit();
|
|
//qDebug() << "World::getPrefixId: " << _qrz << QString::number(entityID) << endl;
|
|
return entityID;
|
|
}
|
|
|
|
QString World::getQRZEntityName(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getQRZEntityName: " << _qrz << endl;
|
|
if (_qrz.length() < 1 )
|
|
{
|
|
return "";
|
|
}
|
|
//QString queryString;
|
|
//QSqlQuery query;
|
|
int prefixIDNumber = getPrefixId(_qrz);
|
|
return getEntityName(prefixIDNumber);
|
|
/*
|
|
queryString = "SELECT dxcc FROM prefixesofentity WHERE id=='" + QString::number(prefixIDNumber) +"'";
|
|
//qDebug() << "World::getQRZEntityName: queryString-1: " << queryString << endl;
|
|
query.exec(queryString);
|
|
query.next();
|
|
if (query.isValid())
|
|
{
|
|
prefixIDNumber = (query.value(0)).toInt();
|
|
}
|
|
else
|
|
{
|
|
prefixIDNumber = -1;
|
|
}
|
|
|
|
//qDebug() << "World::getQRZEntityName: " <<_qrz << " = " << (query.value(0)).toString() << endl;
|
|
|
|
queryString = "SELECT name FROM entity WHERE dxcc=='" + QString::number(prefixIDNumber) +"'";
|
|
//qDebug() << "World::getQRZEntityName: queryString-2: " << queryString << endl;
|
|
query.exec(queryString);
|
|
query.next();
|
|
//qDebug() << "World::getQRZEntityName end: " << _qrz << " = " << (query.value(0)).toString() << endl;
|
|
|
|
if (query.isValid()){
|
|
return (query.value(0)).toString();
|
|
}else{
|
|
return "";
|
|
}
|
|
|
|
return "";
|
|
*/
|
|
}
|
|
|
|
QString World::getEntityName(const int _entityN)
|
|
{
|
|
int prefixIDNumber = _entityN;
|
|
if (prefixIDNumber<=0)
|
|
{
|
|
return "";
|
|
}
|
|
return dataProxy->getEntityNameFromId(prefixIDNumber);
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
|
|
queryString = QString("SELECT name FROM entity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(prefixIDNumber);
|
|
|
|
//queryString = "SELECT name FROM entity WHERE dxcc=='" + QString::number(prefixIDNumber) +"'";
|
|
//qDebug() << "World::getEntityName: queryString-2: " << queryString << endl;
|
|
query.exec(queryString);
|
|
query.next();
|
|
|
|
|
|
if (query.isValid()){
|
|
return (query.value(0)).toString();
|
|
}else{
|
|
return "";
|
|
}
|
|
|
|
return "";
|
|
*/
|
|
}
|
|
|
|
int World::getQRZCqz(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getQRZCqz: " << _qrz << endl;
|
|
|
|
if (_qrz.length() < 1 )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int i = -1;
|
|
QString aux = _qrz;
|
|
|
|
while ((i <= 0) && (aux.length()>=1) )
|
|
{
|
|
i = dataProxy->getCQzFromPrefix(aux);
|
|
if (i<=0)
|
|
{
|
|
aux.chop(1);
|
|
}
|
|
}
|
|
return i;
|
|
|
|
|
|
|
|
//int prefixIdNumber = getPrefixId(_qrz);
|
|
//return getEntityCqz(prefixIdNumber);
|
|
|
|
}
|
|
|
|
int World::getQRZItuz(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getQRZItuz: " << _qrz << endl;
|
|
if (_qrz.length() < 1 )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int i = -1;
|
|
QString aux = _qrz;
|
|
|
|
while ((i <= 0) && (aux.length()>=1) )
|
|
{
|
|
i = dataProxy->getITUzFromPrefix(aux);
|
|
if (i<=0)
|
|
{
|
|
aux.chop(1);
|
|
}
|
|
}
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
int World::getEntityCqz(const int _enti)
|
|
{
|
|
if (_enti < 1 )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
return dataProxy->getCQzFromEntity(_enti);
|
|
/*
|
|
QSqlQuery query;
|
|
QString queryString;
|
|
|
|
//queryString = QString("SELECT cqz FROM prefixesofentity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(prefixIDNumber);
|
|
queryString = "SELECT cqz FROM prefixesofentity WHERE dxcc=='" + QString::number(_enti) +"'";
|
|
query.exec(queryString);
|
|
query.next();
|
|
//qDebug() << "World::getEntityCqz: " << QString::number(_enti) << " = " << (query.value(0)).toInt() << endl;
|
|
|
|
if (query.isValid()){
|
|
return (query.value(0)).toInt();
|
|
}else{
|
|
return -1;
|
|
}
|
|
|
|
return -1;
|
|
*/
|
|
}
|
|
|
|
|
|
int World::getEntityItuz(const int _enti)
|
|
{
|
|
if (_enti < 1 )
|
|
{
|
|
return -1;
|
|
}
|
|
return dataProxy->getITUzFromEntity(_enti);
|
|
/*
|
|
QSqlQuery query;
|
|
QString queryString;
|
|
|
|
queryString = "SELECT ituz FROM prefixesofentity WHERE dxcc=='" + QString::number(_enti) +"'";
|
|
query.exec(queryString);
|
|
query.next();
|
|
//qDebug() << "World::getEntityItuz: " << QString::number(_enti) << " = " << (query.value(0)).toInt() << endl;
|
|
|
|
if (query.isValid()){
|
|
return (query.value(0)).toInt();
|
|
}else{
|
|
return -1;
|
|
}
|
|
|
|
return -1;
|
|
*/
|
|
}
|
|
|
|
int World::getQRZARRLId(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getQRZARRLId" << _qrz << endl;
|
|
|
|
if (_qrz.length() < 1 )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
//QSqlQuery query;
|
|
//QString queryString;
|
|
|
|
int prefixIdNumber = getPrefixId(_qrz);
|
|
return prefixIdNumber;
|
|
|
|
}
|
|
|
|
QString World::getQRZEntityMainPrefix(const QString _qrz)
|
|
{
|
|
if (_qrz.length() < 1 )
|
|
{
|
|
return "";
|
|
}
|
|
int i = getQRZARRLId(_qrz);
|
|
return getEntityMainPrefix(i);
|
|
|
|
//QString queryString;
|
|
//QSqlQuery query;
|
|
|
|
|
|
/*
|
|
queryString = "SELECT mainprefix FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return "";
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
//qDebug() << "World::getQRZEntityMainPrefix(id/qrz): " << QString::number(i) << "/" <<_qrz << " = " << (query.value(0)).toString() << endl;
|
|
if (query.isValid()){
|
|
|
|
return (query.value(0)).toString();
|
|
}
|
|
else
|
|
{
|
|
|
|
return "";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
return "";
|
|
*/
|
|
}
|
|
|
|
|
|
QString World::getEntityMainPrefix(const int _entityN)
|
|
{
|
|
if (_entityN <= 0 )
|
|
{
|
|
return "";
|
|
}
|
|
return dataProxy->getEntityMainPrefix(_entityN);
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
|
|
queryString = QString("SELECT mainprefix FROM entity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(_entityN);
|
|
|
|
//queryString = "SELECT mainprefix FROM entity WHERE dxcc=='" + QString::number(_entityN) +"'";
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return "";
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if (query.isValid()){
|
|
return (query.value(0)).toString();
|
|
}else{
|
|
return "";
|
|
}
|
|
}
|
|
return "";
|
|
*/
|
|
}
|
|
|
|
|
|
bool World::isNewCQz(const int _cqz)
|
|
{
|
|
return dataProxy->isNewCQz(_cqz);
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
queryString = "SELECT id FROM log WHERE cqz=='" + QString::number(_cqz) +"'";
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if (query.isValid()){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
*/
|
|
}
|
|
|
|
bool World::isNewEntity(const int _entityN)
|
|
{
|
|
if (_entityN <= 0)
|
|
{
|
|
return false;
|
|
}
|
|
return dataProxy->isNewEntity(_entityN);
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
queryString = "SELECT id FROM log WHERE dxcc=='" + QString::number(_entityN) +"'";
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if (query.isValid()){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
*/
|
|
}
|
|
|
|
QString World::getQRZContinentShortName(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getQRZContinentShortName: " << _qrz << endl;
|
|
//QString continentNumber = getQRZContinentNumber (_qrz);
|
|
return getContinentShortName (getQRZARRLId(_qrz));
|
|
|
|
}
|
|
|
|
|
|
QString World::getContinentShortName(const int _enti)
|
|
{
|
|
//qDebug() << "World::getQRZContinentShortName: " << QString::number(_enti) << endl;
|
|
|
|
//QString continentNumber = QString::number(_enti);
|
|
|
|
if ( _enti < 0 )
|
|
{
|
|
return "--";
|
|
}
|
|
QString a = dataProxy->getContinentShortNameFromEntity(_enti);
|
|
if (a.length()!=2)
|
|
{
|
|
return "--";
|
|
}
|
|
else
|
|
{
|
|
return a;
|
|
}
|
|
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
queryString = QString("SELECT continent FROM entity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(_enti);
|
|
//queryString = "SELECT continent FROM entity WHERE dxcc=='" + continentNumber +"'";
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return "--";
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if ( !(query.isValid()) ) {
|
|
//qDebug() << "World::getQRZContinentShortName: NO VALID" << endl;
|
|
return "--";
|
|
}else{
|
|
//qDebug() << "World::getQRZContinentShortName: VALID" << endl;
|
|
return (query.value(0)).toString();
|
|
}
|
|
}
|
|
|
|
return "--";
|
|
*/
|
|
}
|
|
|
|
QString World::getQRZContinentNumber(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::getQRZContinentNumber: " << _qrz << endl;
|
|
|
|
int i = getQRZARRLId(_qrz);
|
|
return QString::number(getContinentNumber(i));
|
|
/*
|
|
QString a;
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
|
|
queryString = QString("SELECT continent FROM entity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(i);
|
|
|
|
//queryString = "SELECT continent FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return "-1";
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
if ( !(query.isValid()) ) {
|
|
//qDebug() << "World::getQRZContinentNumber(qrz/i/Cont): NO VALID" << endl;
|
|
return "-1";
|
|
}else{
|
|
//qDebug() << "World::getQRZContinentNumber(qrz/i/Cont): VALID" << endl;
|
|
a = (query.value(0)).toString();
|
|
}
|
|
|
|
|
|
//qDebug() << "World::getQRZContinentNumber(qrz/i/Cont): " <<_qrz << "/" << QString::number(i) << "/" << a << endl;
|
|
return a;
|
|
}
|
|
return "-1";
|
|
*/
|
|
}
|
|
|
|
int World::getContinentNumber(const int _enti)
|
|
{
|
|
//qDebug() << "World::getQRZContinentNumber: " << QString::number(_enti) << endl;
|
|
if (_enti <= 0)
|
|
{
|
|
return -1;
|
|
}
|
|
return dataProxy->getContinentIdFromEntity(_enti);
|
|
/*
|
|
int a = -1;
|
|
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
int i = _enti;
|
|
queryString = QString("SELECT continent FROM entity WHERE (mainprefix NOT LIKE '*%') AND dxcc='%1'").arg(i);
|
|
//queryString = "SELECT continent FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
if ( !(query.isValid()) )
|
|
{
|
|
return -1;
|
|
}else{
|
|
a = (query.value(0)).toInt();
|
|
queryString = "SELECT id FROM continent where shortname=='" + query.value(0).toString() + "'";
|
|
if (query.exec(queryString))
|
|
{
|
|
query.next();
|
|
if(query.isValid())
|
|
{
|
|
return query.value(0).toInt();
|
|
}
|
|
else
|
|
{ // Value not valid
|
|
return -1;
|
|
}
|
|
}
|
|
else
|
|
{ // Error in the query
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
return a;
|
|
}
|
|
return -1;
|
|
*/
|
|
}
|
|
|
|
double World::getQRZLongitude(const QString _qrz)
|
|
{
|
|
|
|
int i = getQRZARRLId(_qrz);
|
|
return dataProxy->getLongitudeFromEntity(i);
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
queryString = "SELECT longitude FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return 0.0;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if ( !(query.isValid()) ) {
|
|
//qDebug() << "World::getQRZLongitude: NO VALID" << endl;
|
|
return 0.0;
|
|
}else{
|
|
//qDebug() << "World::getQRZLongitude: VALID" << endl;
|
|
return (query.value(0)).toDouble();
|
|
}
|
|
|
|
}
|
|
return 0.0;
|
|
*/
|
|
}
|
|
|
|
double World::getLongitude(const int _enti)
|
|
{
|
|
if (_enti <= 0)
|
|
{
|
|
return 0.0;
|
|
}
|
|
|
|
return dataProxy->getLongitudeFromEntity(_enti);
|
|
|
|
|
|
/*
|
|
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
|
|
int i = _enti;
|
|
queryString = "SELECT longitude FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return 0.0;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if ( !(query.isValid()) ) {
|
|
//qDebug() << "World::getQRZLongitude: NO VALID" << endl;
|
|
return 0.0;
|
|
}else{
|
|
//qDebug() << "World::getQRZLongitude: VALID" << endl;
|
|
return (query.value(0)).toDouble();
|
|
}
|
|
|
|
}
|
|
return 0.0;
|
|
*/
|
|
}
|
|
|
|
double World::getQRZLatitude(const QString _qrz)
|
|
{
|
|
|
|
int i = getQRZARRLId(_qrz);
|
|
return dataProxy->getLatitudeFromEntity(i);
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
queryString = "SELECT latitude FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return 0.0;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if ( !(query.isValid()) ) {
|
|
//qDebug() << "World::getQRZLatitud: NO VALID" << endl;
|
|
return 0.0;
|
|
}else{
|
|
//qDebug() << "World::getQRZLatitud: VALID" << endl;
|
|
return (query.value(0)).toDouble();
|
|
}
|
|
}
|
|
|
|
return 0.0;
|
|
*/
|
|
}
|
|
|
|
double World::getLatitude(const int _enti)
|
|
{
|
|
if (_enti <= 0)
|
|
{
|
|
return 0.0;
|
|
}
|
|
return dataProxy->getLatitudeFromEntity(_enti);
|
|
|
|
/*
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
int i = _enti;
|
|
queryString = "SELECT latitude FROM entity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return 0.0;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
if ( !(query.isValid()) ) {
|
|
//qDebug() << "World::getQRZLatitud: NO VALID" << endl;
|
|
return 0.0;
|
|
}else{
|
|
//qDebug() << "World::getQRZLatitud: VALID" << endl;
|
|
return (query.value(0)).toDouble();
|
|
}
|
|
}
|
|
|
|
return 0.0;
|
|
*/
|
|
}
|
|
|
|
QString World::getQRZLocator(const QString _qrz)
|
|
{
|
|
if (_qrz.length() < 1)
|
|
{
|
|
return "";
|
|
}
|
|
return locator->getLocator(getQRZLongitude(_qrz), getQRZLatitude(_qrz));
|
|
}
|
|
|
|
QString World::getLocator(const int _enti)
|
|
{
|
|
if (_enti <= 0)
|
|
{
|
|
return "";
|
|
}
|
|
return locator->getLocator(getLongitude(_enti), getLatitude(_enti));
|
|
}
|
|
|
|
/*
|
|
int World::getBandIdFromFreq(const QString fr)
|
|
{
|
|
//qDebug() << "World::getBandIdFromFreq: " << fr << endl;
|
|
//Freq should be in MHz
|
|
QSqlQuery query;
|
|
QString queryString = QString("SELECT id FROM band WHERE lower <= '%1' and upper >= '%2'").arg(fr).arg(fr);
|
|
//qDebug() << "World::getBandIdFromFreq query: " << queryString << endl;
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
query.next();
|
|
|
|
int b=-1;
|
|
if (query.isValid())
|
|
{
|
|
b = (query.value(0)).toInt();
|
|
//qDebug() << "World::getBandIdFromFreq value: " << QString::number(b) << endl;
|
|
//return (query.value(0)).toInt();
|
|
return b;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "World::getBandIdFromFreq value not valid!!" << endl;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
QString World::getQRZEntityPrefixes(const QString _qrz)
|
|
{
|
|
|
|
int i = getQRZARRLId(_qrz);
|
|
return dataProxy->getEntityMainPrefix(i);
|
|
/*
|
|
QString result;
|
|
result = "";
|
|
QString queryString;
|
|
QSqlQuery query;
|
|
queryString = "SELECT prefix FROM prefixesofentity WHERE dxcc=='" + QString::number(i) +"'";
|
|
|
|
|
|
if (!query.exec(queryString))
|
|
{
|
|
return "";
|
|
}
|
|
else
|
|
{
|
|
while ( (query.next())) {
|
|
if (query.isValid())
|
|
{
|
|
result = result + ", " + (query.value(0)).toString();
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
|
|
if (result.length() < 1)
|
|
{
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
result = result.remove(0,2);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
return "";
|
|
*/
|
|
}
|
|
|
|
bool World::readCTYCSV(const QString _worldFile)
|
|
{
|
|
//qDebug() << "World::readCTYCSV(): " << _worldFile << endl;
|
|
|
|
QString tq;
|
|
tq.clear();
|
|
QString entityNumber;
|
|
entityNumber = "-1";
|
|
QString fileName;
|
|
qint64 beginingOfFile;
|
|
int numberOfLines = 0;
|
|
int errorCode = -1;
|
|
//int ii = 0;
|
|
//bool ret;
|
|
|
|
|
|
QFile file( _worldFile );
|
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
|
{
|
|
//qDebug() << "World::readCTYCSV() File not found: END FALSE" << fileName << endl;
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
//qDebug() << "World::readCTYCSV() File found: " << fileName << endl;
|
|
}
|
|
beginingOfFile = file.pos();
|
|
|
|
|
|
|
|
while (!file.atEnd()) {
|
|
if ( (file.readLine()).contains(';') )
|
|
{
|
|
numberOfEntities++;
|
|
}
|
|
numberOfLines++;
|
|
}
|
|
//qDebug() << "World::readCTYCSV() - numberOfEntities: " << QString::number(numberOfEntities) << endl;
|
|
|
|
// The file is readed twice: 1: Main entity data; 2: prefixes.
|
|
|
|
|
|
// Starts with main data:
|
|
file.seek(beginingOfFile);
|
|
progressBarPosition = 0;
|
|
QProgressDialog progress(tr("Reading cty.csv..."), tr("Abort reading"), 0, numberOfLines, this);
|
|
progress.setWindowModality(Qt::ApplicationModal);
|
|
|
|
numberOfEntities = 0; // Reset this variable to reuse it and assign the "dxcc" to the entities (temp solution)
|
|
|
|
QSqlQuery query;
|
|
QSqlQuery queryP;
|
|
|
|
query.prepare("INSERT INTO entity (id, name, cqz, ituz, continent, latitude, longitude, utc, dxcc, mainprefix)"
|
|
"VALUES (?, ?,?, ?, ?, ?, ?, ?, ?, ?)");
|
|
queryP.prepare("INSERT INTO prefixesofentity (id, prefix, dxcc, cqz, ituz) VALUES (?, ?, ?, ?, ?)");
|
|
|
|
QSqlDatabase::database().transaction();
|
|
|
|
QStringList stringList, stringListPrefixes, stringListProcessedPrefix;
|
|
|
|
int entN;
|
|
entN = -1;
|
|
|
|
while (!file.atEnd()) {
|
|
progress.setValue(progressBarPosition);
|
|
progressBarPosition++;
|
|
if (progress.wasCanceled())
|
|
break;
|
|
stringList.clear();
|
|
stringListPrefixes.clear();
|
|
//
|
|
// 9Y,Trinidad & Tobago,90,SA,9,11,10.38,61.28,4.0,9Y 9Z;
|
|
// 5A,Libya,436,AF,34,38,27.20,-16.60,-2.0,5A;
|
|
// MainPref / Name / dxcc / Cont / CQ / ITU / LAT / LON / -UTC / prefixes
|
|
// 0 1 2 3 4 5 6 7 8 9
|
|
|
|
tq = file.readLine();
|
|
//qDebug() << "World::readCTYCSV(): Line: " << tq << endl;
|
|
tq = tq.simplified();
|
|
//qDebug() << "World::readCTYCSV(): Line simplified: " << tq << endl;
|
|
tq = tq.trimmed();
|
|
//qDebug() << "World::readCTYCSV(): Line trimmed: " << tq << endl;
|
|
tq.remove(QChar(';'), Qt::CaseInsensitive);
|
|
//qDebug() << "World::readCTYCSV(): Line without ;: " << tq << endl;
|
|
|
|
stringList << tq.split(',');
|
|
|
|
//qDebug() << "World::readCTYCSV(): Line stringList-0: " << stringList.at(0) << endl;
|
|
|
|
if (( stringList.at(0)).contains(QChar('*'), Qt::CaseInsensitive))
|
|
{
|
|
entN = -1;
|
|
entN = (stringList.at(2)).toInt() + 1000;
|
|
|
|
while ( (dataProxy->getEntityMainPrefix(entN)).size()>0 )
|
|
{
|
|
//qDebug() << "World::readCTYCSV() entN: " << QString::number(entN) << endl;
|
|
//qDebug() << "World::readCTYCSV() dataProxy->getEntityMainPrefix: " << QString::number(entN) << endl;
|
|
entN = entN + 1000;
|
|
}
|
|
|
|
|
|
entityNumber = QString::number(entN);
|
|
}
|
|
else
|
|
{
|
|
entityNumber = stringList.at(2);
|
|
}
|
|
|
|
|
|
if (stringList.size()>=8 )
|
|
{
|
|
|
|
//(id, name, cqz, ituz, continent, latitude, longitude, utc, dxcc, mainprefix)
|
|
|
|
query.addBindValue(QVariant(QVariant::Int));
|
|
query.addBindValue(stringList.at(1)); // name
|
|
query.addBindValue(stringList.at(4)); // CQ
|
|
query.addBindValue(stringList.at(5)); // ITU
|
|
query.addBindValue(stringList.at(3)); // Cont
|
|
query.addBindValue(stringList.at(6)); // Lat
|
|
query.addBindValue(stringList.at(7)); // Lon
|
|
query.addBindValue(stringList.at(8)); // UTC
|
|
//query.addBindValue(stringList.at(2)); // dxcc
|
|
query.addBindValue(entityNumber); // dxcc
|
|
query.addBindValue(stringList.at(0)); // Mainprefix
|
|
|
|
//qDebug() << "World::readCTYCSV(): Entity name: " << stringList.at(1) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity cqz: " << stringList.at(4) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity ituz: " << stringList.at(5) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity cont: " << stringList.at(3) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity lat: " << stringList.at(6) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity lon: " << stringList.at(7) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity UTC: " << stringList.at(8) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity ARRL: " << stringList.at(2) << endl;
|
|
//qDebug() << "World::readCTYCSV(): Entity Pref: " << stringList.at(0) << endl;
|
|
|
|
|
|
if (query.exec())
|
|
{
|
|
//qDebug() << "World::readCTYDAT(): Entity data added" << endl;
|
|
}
|
|
else if (errorCode == 19)
|
|
{}
|
|
else
|
|
{
|
|
errorCode = query.lastError().number();
|
|
|
|
|
|
//qDebug() << "World::readCTYCSV(): Entity data NOT added" << endl;
|
|
//qDebug() << "World::readCTYCSV(): LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "World::readCTYCSV(): LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "World::readCTYCSV(): LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "World::readCTYCSV(): LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
|
|
}
|
|
|
|
if (stringList.size()>8)
|
|
{
|
|
tq = stringList.at(9);
|
|
stringListPrefixes << tq.split(' ');
|
|
tq = stringListPrefixes.last();
|
|
QString prefAux = QString();
|
|
|
|
for (int i = 0; i < stringListPrefixes.size(); ++i)
|
|
{
|
|
prefAux = stringListPrefixes.at(i);
|
|
//queryP.prepare("INSERT INTO prefixesofentity (id, prefix, dxcc, cqz, ituz) VALUES (?, ?, ?, ?, ?)");
|
|
// 0 1 2 3 4
|
|
// (id, prefix, dxcc, cqz, ituz)
|
|
//qDebug() << "World::readCTYCSV(): Prefix: " << stringListPrefixes.at(i) << endl;
|
|
queryP.addBindValue(QVariant(QVariant::Int));
|
|
|
|
|
|
//readZones (const QString &pref, const int _cq, const int _itu)
|
|
//Returns a QStringList: prefix, CQz, ITUz
|
|
stringListProcessedPrefix.clear();
|
|
stringListProcessedPrefix << readZones(prefAux, (stringList.at(4)).toInt(), (stringList.at(5)).toInt());
|
|
|
|
if (prefAux.at(0)=='=')
|
|
{ //TODO: Maybe there is a better way to identify exact calls instead of prefixes , identified with a = before he call.
|
|
prefAux.remove(0,1);
|
|
}
|
|
|
|
//queryP.addBindValue(prefAux);
|
|
queryP.addBindValue(stringListProcessedPrefix.at(0));
|
|
//queryP.addBindValue(stringList.at(2));
|
|
//queryP.addBindValue(stringList.at(4));
|
|
//queryP.addBindValue(stringList.at(5));
|
|
|
|
//queryP.addBindValue(stringList.at(2));
|
|
queryP.addBindValue(entityNumber);
|
|
queryP.addBindValue(stringListProcessedPrefix.at(1));
|
|
queryP.addBindValue(stringListProcessedPrefix.at(2));
|
|
|
|
if (queryP.exec())
|
|
{
|
|
//qDebug() << "World::readCTYCSV(): Prefix added: " << stringListPrefixes.at(i) << endl;
|
|
}
|
|
else if (errorCode == 19)
|
|
{}
|
|
else
|
|
{
|
|
errorCode = query.lastError().number();
|
|
|
|
//qDebug() << "World::readCTYCSV(): Prefix data NOT added" << endl;
|
|
//qDebug() << "World::readCTYCSV(): Prefix LastQuery: " << query.lastQuery() << endl;
|
|
//qDebug() << "World::readCTYCSV(): Prefix LastError-data: " << query.lastError().databaseText() << endl;
|
|
//qDebug() << "World::readCTYCSV(): Prefix LastError-driver: " << query.lastError().driverText() << endl;
|
|
//qDebug() << "World::readCTYCSV(): Prefix LastError-n: " << QString::number(query.lastError().number() ) << endl;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//qDebug() << "World::readCTYCSV() tq: " << tq << endl;
|
|
progress.setLabelText("Reading cty.csv ... \nNow reading " + currentPrefix + " data");
|
|
//qDebug() << "World::readCTYCSV() - progressBarPosition: " << QString::number(progressBarPosition) << endl;
|
|
}
|
|
|
|
QSqlDatabase::database().commit();
|
|
|
|
progress.setValue(numberOfLines);
|
|
if (created)
|
|
{
|
|
dataProxy->updateISONames();
|
|
}
|
|
|
|
//qDebug() << "World::readCTYCSV() END TRUE " << endl;
|
|
return true;
|
|
|
|
}
|
|
|
|
QString World::changeSlashAndFindPrefix(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::changeSlashAndFindPrefix: -" << _qrz <<"-" << endl;
|
|
int iaux1, iaux2;
|
|
|
|
QString aux = _qrz.toUpper();
|
|
|
|
if ((aux).count('\\')) // Replaces \ by / to ease operation.
|
|
{
|
|
aux.replace(QChar('\\'), QChar('/'));
|
|
}
|
|
else
|
|
{
|
|
return aux;
|
|
}
|
|
|
|
if (aux.count('/')) // / found! Checking different options
|
|
{
|
|
|
|
if (aux.endsWith("/") )
|
|
{ // We look for calls ending in slash "/" or "\"
|
|
aux.remove(aux.length()-1,1);
|
|
}
|
|
iaux1 = aux.indexOf('/');
|
|
//qDebug() << "World::changeSlashAndFindPrefix: Slash found at: " << QString::number(iaux1) << endl;
|
|
|
|
iaux2 = (aux.length())- iaux1; // iaux2 is the length of the second part
|
|
if (iaux2 < 0){
|
|
iaux2 = -iaux2;
|
|
}
|
|
|
|
if ( iaux1 < iaux2 ) { //Like in F/EA4TV, we can simply take the first part as the prefix
|
|
aux = aux.left(iaux1);
|
|
}
|
|
else
|
|
{
|
|
aux = aux.right(iaux2 -1);
|
|
}
|
|
}
|
|
return aux;
|
|
}
|
|
|
|
|
|
bool World::checkQRZValidFormat(const QString _qrz)
|
|
{
|
|
//qDebug() << "World::checkQRZValidFormat: -" << _qrz <<"-" << endl;
|
|
|
|
QString aux = changeSlashAndFindPrefix(_qrz.toUpper());
|
|
|
|
if (aux.length()<3)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// The format of a Call is defined here:
|
|
// http://en.wikipedia.org/wiki/ITU_prefix_%28amateur_stations%29
|
|
//bool prefixEnded = false;
|
|
//int callLength = _qrz.length();
|
|
|
|
int sepPos = 0;
|
|
|
|
|
|
int barPos = aux.indexOf('/');
|
|
|
|
QString prefix = QString();
|
|
QString suffix = QString();
|
|
QString separator = QString();
|
|
// If barPos > 0 we have a complex call like F/EA4TV
|
|
|
|
QCharRef c = aux[aux.length()-1];
|
|
|
|
if ( c.isDigit() && (barPos<=0) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
prefix = prefix + aux.at(0);
|
|
|
|
if ( ( aux.at(1) ).isDigit() )
|
|
{ // W3 A6
|
|
if ((aux.at(2)).isDigit() )
|
|
{ // A60
|
|
prefix = prefix + aux.at(1);
|
|
separator = aux.at(2);
|
|
sepPos = 2;
|
|
}
|
|
else
|
|
{ // W3A
|
|
separator = aux.at(1);
|
|
sepPos = 1;
|
|
}
|
|
}
|
|
else
|
|
{ // EA 3D 2M
|
|
|
|
if ((aux.at(2)).isDigit() )
|
|
{ // EA0
|
|
|
|
prefix = prefix + aux.at(1);
|
|
separator = aux.at(2);
|
|
sepPos = 2;
|
|
|
|
}
|
|
else
|
|
{ // 3DA
|
|
if (aux.length() < 4)
|
|
{
|
|
prefix = prefix + aux.at(2);
|
|
return false;
|
|
}
|
|
|
|
if ((aux.at(3)).isDigit())
|
|
{ // 3DA0
|
|
prefix = prefix + aux.at(1);
|
|
prefix = prefix + aux.at(2);
|
|
separator = aux.at(3);
|
|
sepPos = 3;
|
|
if (aux.length() < 5)
|
|
{ // 3DA0
|
|
prefix = prefix + aux.at(3);
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = sepPos+1; i < aux.length(); i++)
|
|
{
|
|
suffix = suffix + aux.at(i);
|
|
}
|
|
//qDebug() << "World::checkQRZValidFormat: Prefix = " << prefix << endl;
|
|
//qDebug() << "World::checkQRZValidFormat: Separator = " << separator << endl;
|
|
//qDebug() << "World::checkQRZValidFormat: Suffix = " << suffix << endl;
|
|
//qDebug() << "World::checkQRZValidFormat: Call = " << prefix+separator+suffix << endl;
|
|
return true;
|
|
}
|
|
|
|
QStringList World::getEntitiesNames()
|
|
{
|
|
//qDebug() << "World::getEntitiesNames" << endl;
|
|
return dataProxy->getEntitiesNames();
|
|
}
|
|
|
|
int World::getHowManyEntities()
|
|
{
|
|
return dataProxy->getHowManyEntities();
|
|
}
|