Skip to content

Commit

Permalink
Callsign host prefix identification improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
ea4k committed Jan 2, 2025
1 parent 0d878d4 commit 1a86fc6
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 100 deletions.
1 change: 0 additions & 1 deletion src/Changelog
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@

TODO-Bug: CT9 is detected as Portugal but subdivision is properly detected
TODO-Bug: XE Mexico subdivisions are not properly detected

TODO: Review the KLog first start. Reading cty.dat is terribly slow.

Expand Down
27 changes: 17 additions & 10 deletions src/callsign.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,16 +230,23 @@ void Callsign::initialize(const QString &callsign)
//qDebug() << Q_FUNC_INFO << " - 399";
}

//qDebug() << Q_FUNC_INFO << " - @ hostFullPrefix : " << hostFullPrefix;
//qDebug() << Q_FUNC_INFO << " - @ hostPrefix : " << hostPrefix;
//qDebug() << Q_FUNC_INFO << " - @ hostAreaNumber : " << QString::number(hostAreaNumber);
//qDebug() << Q_FUNC_INFO << " - @ homeCallsign : " << homeCallsign;
//qDebug() << Q_FUNC_INFO << " - @ homeFullPrefix : " << homeFullPrefix;
//qDebug() << Q_FUNC_INFO << " - @ homePrefix : " << homePrefix;
//qDebug() << Q_FUNC_INFO << " - @ homeNormalPrefix : " << homeNormalPrefix;
//qDebug() << Q_FUNC_INFO << " - @ homeAreaNumber : " << QString::number(homeAreaNumber);
//qDebug() << Q_FUNC_INFO << " - @ homeSuffix : " << homeSuffix;
//qDebug() << Q_FUNC_INFO << " - @ suffix : " << generalSuffix;
if (hostFullPrefix.isEmpty() && (homeFullPrefix.length()>=0))
{
hostFullPrefix = homeFullPrefix;
hostPrefix = homePrefix;
hostAreaNumber = homeAreaNumber;
}

qDebug() << Q_FUNC_INFO << " - @ hostFullPrefix : " << hostFullPrefix;
qDebug() << Q_FUNC_INFO << " - @ hostPrefix : " << hostPrefix;
qDebug() << Q_FUNC_INFO << " - @ hostAreaNumber : " << QString::number(hostAreaNumber);
qDebug() << Q_FUNC_INFO << " - @ homeCallsign : " << homeCallsign;
qDebug() << Q_FUNC_INFO << " - @ homeFullPrefix : " << homeFullPrefix;
qDebug() << Q_FUNC_INFO << " - @ homePrefix : " << homePrefix;
qDebug() << Q_FUNC_INFO << " - @ homeNormalPrefix : " << homeNormalPrefix;
qDebug() << Q_FUNC_INFO << " - @ homeAreaNumber : " << QString::number(homeAreaNumber);
qDebug() << Q_FUNC_INFO << " - @ homeSuffix : " << homeSuffix;
qDebug() << Q_FUNC_INFO << " - @ suffix : " << generalSuffix;

}
else if ( matchPrefix.hasMatch() )
Expand Down
64 changes: 32 additions & 32 deletions src/database/db_adif_primary_subdvisions_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,38 +211,38 @@ bool DB_ADIF_Primary_Subdvisions_data::add_Mexico_50()
QStringList values;
values.clear();
values
<< "'50', 'Colima', 'COL', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Distrito Federal', 'DF', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Estado de Mexico', 'EMX', 'XE', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Guanajuato', 'GTO', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Hidalgo', 'HGO', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Jalisco', 'JAL', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Michoacan', 'MIC', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Morelos', 'MOR', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Nayarit', 'NAY', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Puebla', 'PUE', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Queretaro', 'QRO', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Tlaxcala', 'TLX', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Veracruz', 'VER', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Aguascalientes', 'AGS', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Baja California', 'BC', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Baja California Sur', 'BCS', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Chihuahua', 'CHH', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Coahuila', 'COA', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Durango', 'DGO', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Nuevo Leon', 'NL', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'San Luis Potosi', 'SLP', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Sinaloa', 'SIN', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Sonora', 'SON', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Tamaulipas', 'TMS', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Zacatecas', 'ZAC', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Campeche', 'CAM', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Chiapas', 'CHS', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Guerrero', 'GRO', 'XE', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Oaxaca', 'OAX', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Quintana Roo', 'QTR', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Tabasco', 'TAB', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Yucatan', 'YUC', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Colima', 'COL', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Distrito Federal', 'DF', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Estado de Mexico', 'EMX', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Guanajuato', 'GTO', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Hidalgo', 'HGO', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Jalisco', 'JAL', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Michoacan', 'MIC', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Morelos', 'MOR', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Nayarit', 'NAY', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Puebla', 'PUE', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Queretaro', 'QRO', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Tlaxcala', 'TLX', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Veracruz', 'VER', 'XE1', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Aguascalientes', 'AGS', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Baja California', 'BC', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Baja California Sur','BCS', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Chihuahua', 'CHH', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Coahuila', 'COA', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Durango', 'DGO', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Nuevo Leon', 'NL', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'San Luis Potosi', 'SLP', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Sinaloa', 'SIN', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Sonora', 'SON', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Tamaulipas', 'TMS', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Zacatecas', 'ZAC', 'XE2', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Campeche', 'CAM', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Chiapas', 'CHS', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Guerrero', 'GRO', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Oaxaca', 'OAX', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Quintana Roo', 'QTR', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Tabasco', 'TAB', 'XE3', '06', '10', '', '-1', '', '', 'N'"
<< "'50', 'Yucatan', 'YUC', 'XE3', '06', '10', '', '-1', '', '', 'N'"
;
return addValues(rows, values);
}
Expand Down
78 changes: 37 additions & 41 deletions src/inputwidgets/mainwindowinputothers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -744,27 +744,26 @@ void MainWindowInputOthers::updatePrimarySubdivisionsComboBox(QList<PrimarySubdi

void MainWindowInputOthers::setEntity(const int _entity)
{// Select the appropriate entity in the ComboBox
//qDebug() << Q_FUNC_INFO << ": " << QString::number(_entity);
qDebug() << Q_FUNC_INFO << ": " << QString::number(_entity);
logEvent (Q_FUNC_INFO, "Start", Debug);
//qDebug() << Q_FUNC_INFO << " - 10" ;
qDebug() << Q_FUNC_INFO << " - 10" ;

if (_entity<=0)
{
//qDebug() << Q_FUNC_INFO << " - 11" ;
qDebug() << Q_FUNC_INFO << " - 11" ;
entityNameComboBox->setCurrentIndex(0);
logEvent (Q_FUNC_INFO, "END-1", Debug);
return;
}

//qDebug() << Q_FUNC_INFO << " - 20" ;
qDebug() << Q_FUNC_INFO << " - 20" ;
currentInt = _entity;
QString aux = QString::number(_entity);
if (_entity > 1000)
{
//qDebug() << Q_FUNC_INFO << " - 30" ;
qDebug() << Q_FUNC_INFO << " - 30" ;
aux = (QString::number(_entity)).right(3);
}
//qDebug() << Q_FUNC_INFO << " - 40" ;
qDebug() << Q_FUNC_INFO << " - 40" ;

int indexC = entityNameComboBox->findText("(" + aux + ")", Qt::MatchEndsWith);
if (indexC != -1)
Expand All @@ -773,7 +772,7 @@ void MainWindowInputOthers::setEntity(const int _entity)
}
else
{
//qDebug() << Q_FUNC_INFO << " - Unable to find entity in the ComboBox";
qDebug() << Q_FUNC_INFO << " - Unable to find entity in the ComboBox";
}


Expand All @@ -784,74 +783,71 @@ void MainWindowInputOthers::setEntity(const int _entity)

void MainWindowInputOthers::setEntityAndPrefix(const int _entity, const QString &_qrz)
{
//qDebug() << Q_FUNC_INFO << " - Start: " << QString::number(_entity) << "/" << _qrz;
qDebug() << Q_FUNC_INFO << " - Start: " << QString::number(_entity) << "/" << _qrz;
if (_entity<=0)
{
//qDebug() << Q_FUNC_INFO << " - 10";
qDebug() << Q_FUNC_INFO << " - 10";
entityNameComboBox->setCurrentIndex(0);
logEvent (Q_FUNC_INFO, "END-1", Debug);
return;
}

//qDebug() << Q_FUNC_INFO << " - 15";
qDebug() << Q_FUNC_INFO << " - 15";
setEntity(_entity);

Callsign callsign(_qrz);
QString prefixFromEntityNumber = dataProxy->getEntityMainPrefix(_entity); // The main prefix of the entity.
QString hostFullPrefix = callsign.getHostFullPrefix(); // The default is that showAll is not checked. Main prefix+ the area
QString hostPrefix = callsign.getHostPrefix(); // The default is that showAll is not checked


Callsign entityCall(prefixFromEntityNumber); // To check if the prefixFromEntity is the main or not (EA->main, AM-> nor main, it should be EA)
QString prefixForSubdivision = prefixFromEntityNumber;

// TODO: This function must be improved and find what shoudl be used to identify the right data

QString hostFullPrefix = callsign.getHostFullPrefix(); // The default is that showAll is not checked. Main prefix+ the area
QString hostPrefix = callsign.getHostPrefix(); // The default is that showAll is not checked

// Construct hostFullPrefix if hostPrefix is not the main prefix.
if (hostPrefix != prefixFromEntityNumber)
{
hostFullPrefix = prefixFromEntityNumber + QString::number(callsign.getHostAreaNumber());
}

qDebug() << Q_FUNC_INFO << " - 20";
qDebug() << Q_FUNC_INFO << "hostFullPrefix: " << hostFullPrefix;
qDebug() << Q_FUNC_INFO << "hostPrefix: " << hostPrefix;
qDebug() << Q_FUNC_INFO << "prefixFromEntityNumber: " << prefixFromEntityNumber;

//qDebug() << Q_FUNC_INFO << " - 20";
//qDebug() << Q_FUNC_INFO << "hostFullPrefix: " << hostFullPrefix;
//qDebug() << Q_FUNC_INFO << "hostPrefix: " << hostPrefix;

if (showAllCheckBox->isChecked())
{ // The prefix without the number should be used.
// be careful with prefixes like EA8/EA/EA6 or E73 / E7
//qDebug() << Q_FUNC_INFO << " - 21";
hostFullPrefix = prefixFromEntityNumber;
hostPrefix = callsign.getHostPrefix();
}
//qDebug() << Q_FUNC_INFO << " - 30";
//qDebug() << Q_FUNC_INFO << "hostFullPrefix: " << hostFullPrefix;
//qDebug() << Q_FUNC_INFO << "prefixFromEntityNumber: " << prefixFromEntityNumber;
//qDebug() << Q_FUNC_INFO << "hostPrefix: " << hostPrefix;

if ((hostFullPrefix.isEmpty()) && (hostPrefix.isEmpty()))
return;

//qDebug() << Q_FUNC_INFO << " - 40";
qDebug() << Q_FUNC_INFO << " - 40";
QList<PrimarySubdivision> primarySubdivisions;
primarySubdivisions.clear();
primarySubdivisions.append(dataProxy->getPrimarySubDivisions(currentInt, hostPrefix));

if (primarySubdivisions.isEmpty())
if (showAllCheckBox->isChecked())
{
primarySubdivisions.append(dataProxy->getPrimarySubDivisions(currentInt, QString()));
}
else
{
//qDebug() << Q_FUNC_INFO << " - 50";
//qDebug() << Q_FUNC_INFO << " - primarySubdivisions is empty with hostPrefix, running for the main prefix";
primarySubdivisions.append(dataProxy->getPrimarySubDivisions(currentInt, hostFullPrefix));

if (primarySubdivisions.isEmpty())
{
//qDebug() << Q_FUNC_INFO << " - 55";
//qDebug() << Q_FUNC_INFO << " - primarySubdivisions is empty with mainprefix, running just with the entity";
primarySubdivisions.append(dataProxy->getPrimarySubDivisions(currentInt, QString()));
//qDebug() << Q_FUNC_INFO << " - 50";
//qDebug() << Q_FUNC_INFO << " - primarySubdivisions is empty with hostPrefix, running for the main prefix";
primarySubdivisions.append(dataProxy->getPrimarySubDivisions(currentInt, hostPrefix));
if (primarySubdivisions.isEmpty())
{
//qDebug() << Q_FUNC_INFO << " - 55";
//qDebug() << Q_FUNC_INFO << " - primarySubdivisions is empty with mainprefix, running just with the entity";
primarySubdivisions.append(dataProxy->getPrimarySubDivisions(currentInt, QString()));
}
//qDebug() << Q_FUNC_INFO << " - 59";
}
//qDebug() << Q_FUNC_INFO << " - 59";
}
//qDebug() << Q_FUNC_INFO << " - 60";


//qDebug() << Q_FUNC_INFO << " - 60";
//qDebug() << Q_FUNC_INFO << " - count: " << QString::number(primarySubdivisions.count());
if (primarySubdivisions.isEmpty())
return;
Expand Down
8 changes: 5 additions & 3 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2077,10 +2077,10 @@ void MainWindow::slotQRZTextChanged(QString _qrz)
int dx_ITUz = -1;
int dxE_ITUz = -1;
cleanQRZCOMreceivedDataFromUI();
//qDebug()<< Q_FUNC_INFO << ": currentQRZ: " <<_qrz ;
qDebug()<< Q_FUNC_INFO << ": currentQRZ: " <<_qrz ;

currentEntity = world->getQRZARRLId(_qrz);
//qDebug()<< Q_FUNC_INFO << " - 50 - currentEntity: " << QString::number(currentEntity) ;
qDebug()<< Q_FUNC_INFO << " - 50 - currentEntity: " << QString::number(currentEntity) ;

logEvent(Q_FUNC_INFO, QString("Entity: %1").arg(currentEntity), Devel);

Expand Down Expand Up @@ -2113,7 +2113,7 @@ void MainWindow::slotQRZTextChanged(QString _qrz)
_entityStatus.modeId = currentModeShown;
_entityStatus.log = currentLog;

//qDebug()<< Q_FUNC_INFO << ": 60 - currentEntity: " << QString::number(currentEntity) ;
qDebug()<< Q_FUNC_INFO << ": 60 - currentEntity: " << QString::number(currentEntity) ;
if ( locator->isValidLocator(QSOTabWidget->getDXLocator()))
{
dxLocator = QSOTabWidget->getDXLocator();
Expand All @@ -2124,6 +2124,8 @@ void MainWindow::slotQRZTextChanged(QString _qrz)
}
//TODO: Look for a way to prevent updating when not needed. i.e. if the prefix is already defined and only suffix is being sent
// Maybe a wat could be to send the hostprefix and not the callsign?
qDebug()<< Q_FUNC_INFO << " - currentEntity: " << QString::number(currentEntity);
qDebug()<< Q_FUNC_INFO << " - c_qrz : " << _qrz;
othersTabWidget->setEntityAndPrefix(currentEntity, _qrz);

//qDebug()<< Q_FUNC_INFO << ": Going to check the DXCC" ;
Expand Down
47 changes: 45 additions & 2 deletions src/utilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1074,12 +1074,55 @@ int Utilities::getAreaNumberFromCall(const QString &_c)

QString Utilities::getPrefixFromCall(const QString &_c, bool withAreaNumber)
{
//qDebug() << Q_FUNC_INFO << ": " << _c << " - WithAreaNumber=" << boolToQString(withAreaNumber);
qDebug() << Q_FUNC_INFO << ": " << _c << " - WithAreaNumber=" << boolToQString(withAreaNumber);
if (_c.isNull())
{
//qDebug() << Q_FUNC_INFO << " - END null";
qDebug() << Q_FUNC_INFO << " - END null";
return QString();
}
qDebug() << Q_FUNC_INFO << " - 010";
Callsign _callsign(_c);
if (!_callsign.isValid() && !_callsign.isValidPrefix())
{
qDebug() << Q_FUNC_INFO << " - 020";
return QString();
}
QString pref;

int areaNumber = _callsign.getHostAreaNumber();

qDebug() << Q_FUNC_INFO << " - 030" << " - AreaNumber: " << QString::number(areaNumber);
if (areaNumber>=0)
{
pref = _callsign.getHostFullPrefix();
qDebug() << Q_FUNC_INFO << " - 040" << " - pref: " << pref;
}
else
{
pref = _callsign.getHostPrefix();
qDebug() << Q_FUNC_INFO << " - 050" << " - pref: " << pref;
}
if (isAKnownPrefix(pref))
{
qDebug() << Q_FUNC_INFO << " - 060";
return pref;
}
else
{
qDebug() << Q_FUNC_INFO << " - 070";
pref = _callsign.getHostPrefix();
qDebug() << Q_FUNC_INFO << " - 071" << " - pref: " << pref;
if (isAKnownPrefix(pref))
{
qDebug() << Q_FUNC_INFO << " - 075";
return pref;
}
}
qDebug() << Q_FUNC_INFO << " - 0100";
return QString();



//qDebug() << Q_FUNC_INFO << " - 000";
QString call = _c;
int length = call.length();
Expand Down
6 changes: 3 additions & 3 deletions src/world.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ QStringList World::readZones (const QString &pref, const int _cq, const int _itu

int World::getPrefixId(const QString &_prefix)
{
//qDebug() << Q_FUNC_INFO << " - Start: " << _prefix << "/" << QString::number(worldPrefixes.value(_prefix, -2));
qDebug() << Q_FUNC_INFO << " - Start: " << _prefix << "/" << QString::number(worldPrefixes.value(_prefix, -2));
//This function receives the final prefix.

if (_prefix.length() < 1)
Expand Down Expand Up @@ -468,13 +468,13 @@ int World::getEntityItuz(const int _enti)

int World::getQRZARRLId(const QString &_qrz)
{
//qDebug() << Q_FUNC_INFO << ": " << _qrz;
qDebug() << Q_FUNC_INFO << ": " << _qrz;
if (_qrz.length() < 1 )
{
return -1;
}
QString pref = util->getPrefixFromCall(_qrz);
//qDebug() << Q_FUNC_INFO << ": prefix: " << pref;
qDebug() << Q_FUNC_INFO << ": prefix: " << pref;
return getPrefixId(pref);
}

Expand Down
Loading

0 comments on commit 1a86fc6

Please sign in to comment.