klog-2.3.3/ 0000755 0000157 0000171 00000000000 14542412415 012335 5 ustar jenkins jenkins klog-2.3.3/utilities.cpp 0000644 0000157 0000171 00000233357 14542412415 015071 0 ustar jenkins jenkins /***************************************************************************
utilities.cpp - description
-------------------
begin : jun 2015
copyright : (C) 2015 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 . *
* *
*****************************************************************************/
#include "utilities.h"
//bool c;
Utilities::Utilities(const QString &_parentName)
{
parentName = _parentName;
//qDebug() << Q_FUNC_INFO << " (" << _parentName << ")";
init();
}
Utilities::~Utilities()
{
}
void Utilities::init()
{
//qDebug() << Q_FUNC_INFO << " - Start";
validateCalls = false;
softwareVersion = "0.0";
longPrefixes.clear();
specialCalls.clear();
//darkMode = false;
logLevel = None;
setARRLSect();
setContinent();
setSponsorsList();
logLevels.clear();
logLevels << "None" << "Info" << "Debug" << "Devel";
setLogColumnNames();
//qDebug() << Q_FUNC_INFO << " - END";
}
void Utilities::InitializeHash() {
ADIFHash = {
{"ADDRESS", "MultiLineString"},
{"AGE", "Number"},
{"ALTITUDE", "Number"},
{"ANT_AZ", "Number"},
{"ANT_EL", "Number"},
{"ANT_PATH", "Enumeration"},
{"ARRL_SECT", "Enumeration"},
{"AWARD_SUBMITTED", "SponsoredAwardList"},
{"AWARD_GRANTED", "SponsoredAwardList"},
{"A_INDEX", "Number"},
{"BAND", "Enumeration"},
{"BAND_RX", "Enumeration"},
{"CALL", "String"},
{"CHECK", "String"},
{"CLASS", "String"},
{"CLUBLOG_QSO_UPLOAD_DATE", "Date"},
{"CLUBLOG_QSO_UPLOAD_STATUS", "Enumeration"},
{"CNTY", "Enumeration"},
{"COMMENT", "String"},
{"CONT", "Enumeration"},
{"CONTACTED_OP", "String"},
{"CONTEST_ID", "String"},
{"COUNTRY", "String"},
{"CQZ", "PositiveInteger"},
{"CREDIT_SUBMITTED", "CreditList"},
{"CREDIT_GRANTED", "CreditList"},
{"DARC_DOK", "Enumeration"},
{"DISTANCE", "Number"},
{"DXCC", "Enumeration"},
{"EMAIL", "String"},
{"EQ_CALL", "String"},
{"EQSL_QSLRDATE", "Date"},
{"EQSL_QSLSDATE", "Date"},
{"EQSL_QSL_RCVD", "Enumeration"},
{"EQSL_QSL_SENT", "Enumeration"},
{"FISTS", "PositiveInteger"},
{"FISTS_CC", "PositiveInteger"},
{"FORCE_INIT", "Boolean"},
{"FREQ", "Number"},
{"FREQ_RX", "Number"},
{"GRIDSQUARE", "GridSquare"},
{"GRIDSQUARE_EXT", "GridSquareExt"},
{"GUEST_OP", "String"},
{"HAMLOGEU_QSO_UPLOAD_DATE", "Date"},
{"HAMLOGEU_UPLOAD_STATUS", "Enumeration"},
{"HAMQTH_QSO_UPLOAD_DATE", "Date"},
{"HAMQTH_UPLOAD_STATUS", "Enumeration"},
{"HRDLOG_QSO_UPLOAD_DATE", "Date"},
{"HRDLOG_QSO_UPLOAD_STATUS", "Enumeration"},
{"IOTA", "IOTARefNo"},
{"IOTA_ISLAND_ID", "PositiveInteger"},
{"ITUZ", "PositiveInteger"},
{"K_INDEX", "Integer"},
{"LAT", "Location"},
{"LON", "Location"},
{"LOTW_QSLRDATE", "Date"},
{"LOTW_QSLSDATE", "Date"},
{"LOTW_QSL_RCVD", "Enumeration"},
{"LOTW_QSL_SENT", "Enumeration"},
{"MAX_BURSTS", "Number"},
{"MODE", "Enumeration"},
{"MS_SHOWER", "String"},
{"MY_ALTITUDE", "Number"},
{"MY_ANTENNA", "String"},
{"MY_ARRL_SECT", "Enumeration"},
{"MY_CITY", "String"},
{"MY_CNTY", "Enumeration"},
{"MY_COUNTRY", "String"},
{"MY_CQ_ZONE", "PositiveInteger"},
{"MY_DXCC", "Enumeration"},
{"MY_FISTS", "PositiveInteger"},
{"MY_GRIDSQUARE", "GridSquare"},
{"MY_GRIDSQUARE_EXT", "GridSquareExt"},
{"MY_IOTA", "IOTARefNo"},
{"MY_IOTA_ISLAND_ID", "PositiveInteger"},
{"MY_ITU_ZONE", "PositiveInteger"},
{"MY_LAT", "Location"},
{"MY_LON", "Location"},
{"MY_NAME", "String"},
{"MY_POSTAL_CODE", "String"},
{"MY_POTA_REF", "POTARef"},
{"MY_RIG", "String"},
{"MY_SIG", "String"},
{"MY_SIG_INFO", "String"},
{"MY_SOTA_REF", "SOTARef"},
{"MY_STATE", "Enumeration"},
{"MY_STREET", "String"},
{"MY_USACA_COUNTIES", "SecondarySubdivisionList"},
{"MY_VUCC_GRIDS", "GridSquareList"},
{"MY_WWFF_REF", "WWFFRef"},
{"NAME", "String"},
{"NOTES", "MultilineString"},
{"NR_BURSTS", "Integer"},
{"NR_PINGS", "Integer"},
{"OPERATOR", "String"},
{"OWNER_CALLSIGN", "String"},
{"PFX", "String"},
{"POTA_REF", "POTARef"},
{"PRECEDENCE", "String"},
{"PROP_MODE", "Enumeration"},
{"PUBLIC_KEY", "String"},
{"QRZCOM_QSO_UPLOAD_DATE", "Date"},
{"QRZCOM_QSO_UPLOAD_STATUS", "Enumeration"},
{"QSLMSG", "MultilineString"},
{"QSLRDATE", "Date"},
{"QSLSDATE", "Date"},
{"QSL_RCVD", "Enumeration"},
{"QSL_RCVD_VIA", "Enumeration"},
{"QSL_SENT", "Enumeration"},
{"QSL_SENT_VIA", "Enumeration"},
{"QSL_VIA", "String"},
{"QSO_COMPLETE", "Enumeration"},
{"QSO_DATE", "Date"},
{"QSO_DATE_OFF", "Date"},
{"QSO_RANDOM", "Boolean"},
{"QTH", "String"},
{"REGION", "Enumeration"},
{"RIG", "MultilineString"},
{"RST_RCVD", "String"},
{"RST_SENT", "String"},
{"RX_PWR", "Number"},
{"SAT_MODE", "String"},
{"SAT_NAME", "String"},
{"SFI", "Integer"},
{"SIG", "String"},
{"SIG_INFO", "String"},
{"SILENT_KEY", "Boolean"},
{"SKCC", "String"},
{"SOTA_REF", "SOTARef"},
{"SRX", "Integer"},
{"SRX_STRING", "String"},
{"STATE", "Enumeration"},
{"STATION_CALLSIGN", "String"},
{"STX", "Integer"},
{"STX_STRING", "String"},
{"SUBMODE", "String"},
{"SWL", "Boolean"},
{"TEN_TEN", "PositiveInteger"},
{"TIME_OFF", "Time"},
{"TIME_ON", "Time"},
{"TX_PWR", "Number"},
{"UKSMG", "PositiveInteger"},
{"USACA_COUNTIES", "SecondarySubdivisionList"},
{"VE_PROV", "String"},
{"VUCC_GRIDS", "GridSquareList"},
{"WEB", "String"},
{"WWFF_REF", "WWFFRef"},
{"APP_LOTW_RXQSL", "Date"},
{"APP_LOTW_RXQSO", "Date"},
{"APP_LOTW_QSO_TIMESTAMP", "Date"}
};
return;
}
void Utilities::setLogLevel(DebugLogLevel _l)
{
logLevel = _l;
}
void Utilities::setARRLSect()
{
ARRL_sects.clear ();
//QStringList fonts = { "Arial", "Helvetica", "Times" }
QStringList preARRL_sects = {"AL", "AK", "AB", "AR", "AZ", "BC", "CO", "CT", "DE", "EB", "EMA", "ENY", "EPA", "EWA"
"GA", "GTA", "ID", "IL", "IN", "IA", "KS", "KY", "LAX", "LA",
"ME", "MB", "MAR", "MDC", "MI", "MN", "MS", "MO", "MT",
"NE", "NV", "NH", "NM", "NLI", "NL", "NC", "ND", "NTX",
"NFL", "NNJ", "NNY", "NT", "NWT", "OH", "OK", "ON",
"ONE", "ONN", "ONS", "ORG", "OR", "PAC", "PR", "QC",
"RI", "SV", "SDG", "SF", "SJV", "SB", "SCV", "SK", "SC", "SD",
"STX", "SFL", "SNJ", "TN", "VI", "UT", "VT", "VA",
"WCF", "WTX", "WV", "WMA", "WNY", "WPA", "WWA", "WI", "WY"};
ARRL_sects = preARRL_sects;
}
void Utilities::setContinent()
{
continent = QStringList();
QStringList continentList = {"NA", "SA", "EU", "AF", "OC", "AS", "AN"};
continent = continentList;
}
void Utilities::setSponsorsList()
{
sponsorsList.clear ();
QStringList preSponsorsList = {"ADIF_", "ARI_", "ARRL_", "CQ_", "DARC_", "EQSL_", "IARU_", "JARL_", "RSGB_", "TAG_", "WABAG_"};
sponsorsList = preSponsorsList;
}
void Utilities::setVersion(const QString &_v)
{
//qDebug() << "Utilities::setVersion: " << _v ;
softwareVersion = _v;
}
QString Utilities::getVersion()
{
return softwareVersion;
}
double Utilities::getVersionDouble()
{
//qDebug() << "Utilities::getVersionDouble: " << softwareVersion ;
if (softwareVersion.count('.')>1)
{
QString first = softwareVersion.section('.', 0, 0);
int pos = softwareVersion.indexOf('.');
QString decimals = softwareVersion.section('.', pos, -1);
decimals.remove('.');
first = first + "." + decimals;
//qDebug() << "Utilities::getVersionDouble - returning: " << first ;
return first.toDouble();
}
//qDebug() << "Utilities::getVersionDouble: no points detected" ;
return softwareVersion.toDouble();
}
int Utilities::getProgresStepForDialog(int totalSteps)
{
//qDebug() << "Utilities::getProgresStepForDialog";
if (totalSteps <=100)
return 1;
else if (totalSteps <=1000)
return 5;
else if (totalSteps <=4000)
return 10;
else if (totalSteps <=5000)
return 15;
else if (totalSteps <=7000)
return 20;
else if (totalSteps <=9999)
return 25;
else if (totalSteps <=20000)
return 100;
else
return 250;
}
bool Utilities::trueOrFalse(const QString &_s)
{// reads a String and return true if s.upper()== TRUE :-)
//qDebug() << "Utilities::trueOrFalse: " << _s ;
if ( (_s.toUpper()) == "TRUE")
{
return true;
}
else
{
return false;
}
//return false;
}
QChar Utilities::boolToCharToSQLite(const bool _b)
{
if (_b)
{
return 'Y';
}
else
{
return 'N';
}
}
QString Utilities::boolToQString(const bool _b)
{
if (_b)
{
return "True";
}
else
{
return "False";
}
}
bool Utilities::QStringToBool(const QString &_s)
{
if ( (_s.toUpper()) == "Y")
{
return true;
}
else
{
return false;
}
}
QString Utilities::checkAndFixASCIIinADIF(const QString &_data)
{
//qDebug() << "SetupDialog::checkAndFixASCIIinADIF " << _data ;
// This function is not really working with ASCII but with Unicode
ushort unicodeVal;
QString st = _data;
QString newString;
newString.clear();
for(int i=0; i < st.length(); i++)
{
// Get unicode VALUE into unicodeVal
unicodeVal = (st.at(i)).unicode();
if ((20 <= unicodeVal ) && (unicodeVal <= 126))
{
newString.append(st.at(i));
}
//qDebug() << "SetupDialog::checkAndFixunicodeinADIF: " << st.at(i) <<" = " << QString::number(unicodeVal) ;
}
// Show into another lineEdit
return newString;
}
void Utilities::printQString(const QStringList &_qs)
{
//qDebug() << "Utilities::printQString: COMMENT THIS CALL BEFORE RELEASING" ;
if (_qs.length()<1)
{
//qDebug() << "Utilities::printQString: EMPTY QStringList received!!" ;
return;
}
for (int i=0; i<_qs.length()-1;i++)
{
//qDebug() << _qs.at(i) << "/" ;
}
//qDebug() << _qs.at(_qs.length()-1) ;
}
QString Utilities::getGlobalAgent(const QString &_klogversion)
{
return QString("KLog-%1").arg(_klogversion);
}
QString Utilities::getAgent(const QString &_klogversion)
{
QString version;
QString ops;
version = _klogversion;
#if defined(Q_OS_WIN32)
ops = "KLog-Win32-";
#elif defined(Q_OS_WIN64)
ops = "KLog-Win64-";
#elif defined(Q_OS_LINUX)
ops = "KLog-Linux-";
#elif defined(Q_OS_WIN)
ops = "KLog-Win-"+ version;
#elif defined(Q_OS_MACOS)
ops = "KLog-macOS-";
#elif defined(Q_OS_OSX)
ops = "KLog-OSX-";
#elif defined(Q_OS_MAC)
ops = "KLog-MAC-";
#elif defined(Q_OS_DARWIN)
ops = "KLog-DARWIN-";
#elif defined(Q_OS_AIX)
ops = "KLog-aix-";
#elif defined(Q_OS_ANDROID)
ops = "KLog-android-";
//#elif defined(Q_OS_BSD4)
// ops = "KLog-bsd4-";
#elif defined(Q_OS_BSDI)
ops = "KLog-bsdi-";
#elif defined(Q_OS_CYGWIN)
ops = "KLog-cygwin-";
#elif defined(Q_OS_DARWIN)
ops = "KLog-darwin-";
#elif defined(Q_OS_DGUX)
ops = "KLog-dgux-";
#elif defined(Q_OS_DYNIX)
ops = "KLog-dynix-";
#elif defined(Q_OS_FREEBSD)
ops = "KLog-freebsd-";
#elif defined(Q_OS_HPUX)
ops = "KLog-hpux-";
#elif defined(Q_OS_IOS)
ops = "KLog-ios-";
#elif defined(Q_OS_IRIX)
ops = "KLog-irix-";
#elif defined(Q_OS_LYNX)
ops = "KLog-lynx-";
#elif defined(Q_OS_NETBSD)
ops = "KLog-netbsd-";
#elif defined(Q_OS_OPENBSD)
ops = "KLog-openbsd-";
#elif defined(Q_OS_OSF)
ops = "KLog-osf-";
#elif defined(Q_OS_QNX)
ops = "KLog-qnx-";
#elif defined(Q_OS_SCO)
ops = "KLog-sco-";
#elif defined(Q_OS_SOLARIS)
ops = "KLog-solaris-";
#elif defined(Q_OS_TVOS)
ops = "KLog-tvos-";
#elif defined(Q_OS_UNIX)
ops = "KLog-unix-";
#elif defined(Q_OS_UNIXWARE)
ops = "KLog-unixware-";
#elif defined(Q_OS_WHATCHOS)
ops = "KLog-whatchos-";
#elif defined(Q_OS_WINRT)
ops = "KLog-winrt-";
#else
ops = "KLog-Other-";
#endif
return ops+version;
//return "KLog-Unknown-" + version;
}
QString Utilities::getHomeDir()
{
//TODO: To be removed when the defaultDir is saved in the config file
#if defined(Q_OS_WIN)
//qDebug() << "WINDOWS DETECTED!: " << QDir::homePath() + "/klog" ;
return QDir::homePath()+"/klog"; // We create the \klog for the logs and data
#else
//qDebug() << "NO WINDOWS DETECTED!" ;
return QDir::homePath()+"/.klog"; // We create the ~/.klog for the logs and data
#endif
}
QString Utilities::getDefaultRST(const QString &_m)
{
//qDebug() << "Utilities::getDefaultRST: " << _m ;
if ((_m == "SSB") || (_m== "LSB") || (_m=="USB") )
{
//qDebug() << "MainWindow::setRSTToMode: Detected SSB/LSB/USB" ;
return "59";
}
else if ((_m == "CW") || (_m == "RTTY"))
{
return "599";
}
else if (_m == "PSK31")
{
return "599";
}
else if ( (_m.contains("FT", Qt::CaseInsensitive)) || (_m.contains("JT", Qt::CaseInsensitive)) || (_m.contains("QRA64", Qt::CaseInsensitive)) || (_m.contains("JS", Qt::CaseInsensitive)))
{
return "0";
}
else
{ // By default SSB RST is configured but anything could be added
return "59";
}
}
QStringList Utilities::getDefaultLogFields()
{
QStringList fields;
fields.clear();
fields << "qso_date" << "call" << "rst_sent" << "rst_rcvd" << "bandid" << "modeid" << "comment";
return fields;
}
QString Utilities::getKLogDefaultDatabaseFile()
{
//TODO: To be removed when the defaultDir is saved in the config file
return getHomeDir() ;
}
QString Utilities::getKLogDBFile()
{
//qDebug() << "Utilities::getKLogDBFile: start " ;
dbPath = getKLogDefaultDatabaseFile();
QFile file(getCfgFile());
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) /* Flawfinder: ignore */
{
//return dbPath;
//return getKLogDatabaseFile(dbPath);
}
else
{
while (!file.atEnd()) {
QByteArray line = file.readLine();
processConfigLine(line);
}
if (dbPath.length()<1)
{
dbPath = getKLogDefaultDatabaseFile();
}
}
//qDebug() << "Utilities::getKLogDBFile: path to use: " << dbPath ;
return dbPath + "/logbook.dat";
}
QString Utilities::getKLogDBBackupFile()
{
//qDebug() << "Utilities::getKLogDBFile: start " ;
dbPath = getKLogDefaultDatabaseFile();
QFile file(getCfgFile());
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) /* Flawfinder: ignore */
{
//return dbPath;
//return getKLogDatabaseFile(dbPath);
}
else
{
while (!file.atEnd()) {
QByteArray line = file.readLine();
processConfigLine(line);
}
if (dbPath.length()<1)
{
dbPath = getKLogDefaultDatabaseFile();
}
}
//qDebug() << "Utilities::getKLogDBFile: path to use: " << dbPath ;
return dbPath + "/" + QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss") + "-backup-logbook.dat" ;
}
bool Utilities::processConfigLine(const QString &_line)
{
//qDebug() << "Utilities::processConfigLine: " << _line ;
QString line = _line.simplified();
//line.simplified();
//QString aux;
QStringList values = line.split("=", QT_SKIP);
if (line.startsWith('#')){
//qDebug() << "Utilities::processConfigLine: notes Line!" ;
return true;
}
if (!( (line.contains('=')) && (line.contains(';')))){
//qDebug() << "Utilities::processConfigLine: Wrong Line!" ;
return false;
}
QString field = (values.at(0)).toUpper();
QString value = values.at(1);
int endValue = value.indexOf(';');
if (endValue>-1){
value = value.left(value.length() - (value.length() - endValue));
}
if (field == "DBPATH")
{
//qDebug() << "Utilities::processConfigLine: dbPATH found: " << value ;
dbPath = value;
}
return true;
}
/*
QString Utilities::getKLogDatabaseFile(const QString &_file)
{
//qDebug() << "Utilities::getKLogDatabaseFile:" << _file ;
if ( QFile::exists(_file + "/logbook.dat") )
{
//qDebug() << "Utilities::getKLogDatabaseFile:returning: " << _file + "/logbook.dat" ;
return _file + "/logbook.dat";
}
//qDebug() << "Utilities::getKLogDatabaseFile: Does not exist so default: " << getKLogDefaultDatabaseFile() ;
return getKLogDefaultDatabaseFile();
}
*/
QString Utilities::getCfgFile()
{
//TODO: To be removed when the defaultDir is saved in the config file
#if defined(Q_OS_WIN)
//qDebug() << "WINDOWS DETECTED!: " << getHomeDir() + "/klogrc.cfg" ;
return getHomeDir() + "/klogrc.cfg";
#else
//qDebug() << "NO WINDOWS DETECTED!: " << getHomeDir() + "/klogrc.cfg" ;
return getHomeDir() + "/klogrc";
#endif
}
QString Utilities::getDebugLogFile()
{
#if defined(Q_OS_WIN)
//qDebug() << "WINDOWS DETECTED!: " << getHomeDir() + "/klogrc.cfg" ;
return getHomeDir() + "/klogdebug.log";
#else
//qDebug() << "NO WINDOWS DETECTED!: " << getHomeDir() + "/klogrc.cfg" ;
return getHomeDir() + "/klogdebug.log";
#endif
}
QString Utilities::getSaveSpotsLogFile()
{
QString filename = "/" + (QDateTime::currentDateTime()).toString("yyyyMMdd") + "-klogdxcluster.txt";
return getHomeDir() + filename;
}
QString Utilities::getBackupADIFile()
{
return getHomeDir() + "/" + (QDateTime::currentDateTime()).toString("yyyyMMdd-hhmm") + "-klogbackup.adi";
}
QString Utilities::getClubLogFile()
{
return getHomeDir() + "/klog-clublog-upload.adi";
}
QString Utilities::getEQSLFile()
{
return getHomeDir() + "/klog-eqsl-upload.adi";
}
QString Utilities::getLoTWAdifFile()
{
return getHomeDir() + "/klog-lotw-upload.adi";
}
QString Utilities::getTQSLsFileName()
{
//qDebug() << "Utilities::getTQSLsFileName: " ;
#if defined(Q_OS_WIN)
//qDebug() << "WINDOWS DETECTED!: " ;
return "tqsl.exe";
#elif defined(Q_OS_MACOS)
//qDebug() << "macOS DETECTED!: " ;
return "tqsl.app";
#else
//qDebug() << "NO WINDOWS/macOS DETECTED!: " ;
return "tqsl";
#endif
}
QString Utilities::getTQSLsPath()
{
//qDebug() << "Utilities::getDefaultProgramsPath " ;
#if defined(Q_OS_WIN64)
//qDebug() << "WINDOWS DETECTED!: " ;
return "C:/Program Files/TrustedQSL/";
#elif defined(Q_OS_WIN32)
return "C:/Program Files (x86)/TrustedQSL/";
#elif defined(Q_OS_MACOS)
//qDebug() << "macOS DETECTED!: " ;
return "/Applications/TrustedQSL/";
#else
//qDebug() << "NO WINDOWS/macOS DETECTED!: " ;
return "/usr/bin/";
#endif
}
QString Utilities::getCTYFile()
{
return getHomeDir() + "/cty.csv";
}
int Utilities::getNormalizedDXCCValue(const int _dxcc)
{
if (_dxcc >1000)
{
return ((QString::number(_dxcc)).rightRef(3)).toInt();
}
else
{
return _dxcc;
}
}
QDate Utilities::getDefaultDate()
{
//return QDate::fromString("18000101", "yyyyMMdd");
return QDate::currentDate();
}
bool Utilities::isValidDate(const QDate _d)
{
//qDebug() << "Utilities::isValidDate: " << _d.toString("yyyyMMdd") ;
if (_d.isValid())
{
if ( _d > QDate::fromString("18000101", "yyyyMMdd") )
{
//qDebug() << "Utilities::isValidDate: OK" ;
return true;
}
}
//qDebug() << "Utilities::isValidDate: Error" ;
return false;
}
bool Utilities::isValidDateTime(const QString &_d)
{
//qDebug() << "Utilities::isValidDateTime: " << _d ;
QDateTime _dateTime = QDateTime::fromString(_d, "yyyyMMddhhmmss");
if ( _dateTime.isValid() )
{
//qDebug() << "Utilities::isValidDateTime: 1" ;
return isValidDate(_dateTime.date());
}
//qDebug() << "Utilities::isValidDateTime: Error" ;
return false;
}
bool Utilities::isValidSimpleCall(const QString &_c)
{
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Start: %1").arg(_c), Debug);
// This functions only checks simple calls like EA4K, not composed like EA4K/F of F/EA4K/QRP
//Rules: http://life.itu.int/radioclub/rr/art19.pdf
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << QString(" - 000 - %1").arg(_c);
if ((_c.contains('/')) || (_c.contains('\\')))
{
//qDebug() << Q_FUNC_INFO << " -001";
return false;
}
int length = _c.length();
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << " - 010";
if (length<3)
{
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Less than 3 chars - FALSE"), Debug);
//qDebug() << Q_FUNC_INFO << " - END2";
return false;
}
//qDebug() << Q_FUNC_INFO << " - 020";
QString call = _c;
if (isAKnownCall(call))
{
//qDebug() << Q_FUNC_INFO << " - 020.5";
return true;
}
//qDebug() << Q_FUNC_INFO << " - 021";
// Does it contain any digit?
bool hasDigit = false;
for (int i=0;i<=length-1;i++)
{
if (!_c.at(i).isLetterOrNumber ())
{
// Non valid chars
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Non valid chars - FALSE"), Debug);
//qDebug() << Q_FUNC_INFO << " - END3";
return false;
}
if ((_c.at(i)).isDigit())
hasDigit = true;
}
if (!hasDigit)
{
//qDebug() << Q_FUNC_INFO << " - END4";
return false;
}
//qDebug() << Q_FUNC_INFO << " - 030";
if (!(_c.at(length-1).isLetter ()))
{
logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Does not end with a char - FALSE"), Debug);
//qDebug() << Q_FUNC_INFO << " - END6";
return false;
}
//qDebug() << Q_FUNC_INFO << " - 040";
if (length<=5)
{ //This may fail with JY1 Special call or others special 4 or 5 letter callsigns listed in
//qDebug() << Q_FUNC_INFO << " - 031 - " << _c;
if (isAKnownPrefix(_c))
{
//qDebug() << Q_FUNC_INFO << " - END5";
return false;
}
}
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << " - 040";
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("prefixLength: %1").arg(prefixLength), Devel);
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Call: %1").arg(_c), Devel);
bool firstCharNumber = _c.at(0).isDigit();
bool secondCharNumber = _c.at(1).isDigit();
bool thirdCharNumber = _c.at(2).isDigit();
//EA4, 2E3, E33, K1A, 3DA, FB1K !2EE
if (firstCharNumber && secondCharNumber)
{ // 11, 22
//qDebug() << Q_FUNC_INFO << "END - 060 ";
return false;
}
else if(firstCharNumber && !secondCharNumber && !thirdCharNumber)
{ // 2EE
if (_c.left(3) != "3DA")
{
//qDebug() << Q_FUNC_INFO << "END - 070 ";
return false;
}
}
//qDebug() << Q_FUNC_INFO << "END";
logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - TRUE"), Debug);
return true;
}
bool Utilities::isAValidOperatingSuffix (const QString &_c)
{
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << _c;
QStringList validSuffixes = {"A", "P", "Q", "AM", "M", "MM", "LH", "R", "J", "FF", "QRP", "QRPP", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
return validSuffixes.contains (_c);
}
bool Utilities::isAPrefix (const QString &_c)
{
// Returns -1 if it is not a prefix or valid call.
// Returns an int with the lenght of the prefix:
// The length would be including the number, if possible EA4 or;
// including just the country prefix: EA if the number is not included.
// Prefixes are at least 1 chars (like in K), for K1K it should be 2 (K1)
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Start: %1").arg(_c), Debug);
//qDebug() << Q_FUNC_INFO << "Call/Pref" << _c;
QString aux = _c;
if (aux.length()<1)
{
return false;
}
//qDebug() << Q_FUNC_INFO << "Call/Pref" << _c << "/" << getPrefixFromCall(_c);
int length = (getPrefixFromCall(aux)).length();
return (length>0);
}
void Utilities::setLongPrefixes (const QStringList &_p)
{
//qDebug() << Q_FUNC_INFO << ": Start count: " << QString::number(_p.count());
longPrefixes.clear();
longPrefixes.append(_p);
//qDebug() << Q_FUNC_INFO << ": count: " << QString::number(longPrefixes.count());
}
void Utilities::setSpecialCalls (const QStringList &_p)
{
//qDebug() << Q_FUNC_INFO << ": Start count: " << QString::number(_p.count());
specialCalls.clear();
specialCalls.append(_p);
//qDebug() << Q_FUNC_INFO << ": count: " << QString::number(specialCalls.count());
}
bool Utilities::isAKnownPrefix(const QString &_c)
{// TODO: Complete with https://rsgb.org/main/operating/licensing-novs-visitors/international-prefixes/
//qDebug() << Q_FUNC_INFO << ": " << _c;
QString aux;
if (_c.isNull() )
{
//qDebug() << Q_FUNC_INFO << ": END - 1";
return false;
}
if (longPrefixes.count()<100)
{
//qDebug() << Q_FUNC_INFO << ": ********** END - FAIL";
}
//qDebug() << Q_FUNC_INFO << QString(": END - 2 - %1 - %2").arg(_c).arg(boolToQString(longPrefixes.contains(_c)));
return longPrefixes.contains(_c);
}
bool Utilities::isAKnownCall(const QString &_c)
{
//qDebug() << Q_FUNC_INFO << ": " << _c;
QString aux;
if (_c.isNull() )
{
//qDebug() << Q_FUNC_INFO << ": END - 1";
return false;
}
if (specialCalls.count()<100)
{
//qDebug() << Q_FUNC_INFO << ": ********** END - FAIL";
}
return specialCalls.contains(_c);
}
void Utilities::setCallValidation(const bool _b)
{
//g_callsignCheck = _b;
validateCalls = _b;
}
QString Utilities::getCheckedComplexCall(const QString &_c)
{ // Normalices calls
//qDebug() << Q_FUNC_INFO << " - Start: " << _c;
QString call = _c;
if (call.isNull())
return QString();
call.replace('\\', '/');
if (call=="/")
return QString();
QStringList parts;
parts.clear();
parts << call.split('/');
if (parts.count()<2)
{
return call;
}
if ((parts.at(0)).isNull())
{
call = parts.at(1);
}
else if ((parts.at(1)).isNull())
{
call = parts.at(0);
}
else
{
call = parts.at(0) + "/" + parts.at(1);
}
//qDebug() << Q_FUNC_INFO << " - END: " << call;
return call;
}
QString Utilities::getMainCallFromComplexCall(const QString &_complexCall)
{ // Return the part of the call that provides entity and prefix information:
// EA4K/F => F
// VK9/EA4K => VK9
// EA4K/MM => EA4K
// MM/EA4K => MM
QString call = _complexCall;
if (call.length() == 1)
{
if ((call.at(0)).isLetterOrNumber())
{
return call;
}
else
{
return QString();
}
}
//qDebug() << Q_FUNC_INFO << ": " << _complexCall;
if (call.count('/') >1)
{ //Things like F/EA4K/P will become F/EA4K
//logEvent (Q_FUNC_INFO, QString("With 2 /"), Debug);
call = call.section("/", 0,1);
}
//qDebug() << Q_FUNC_INFO << ": First cut: " << call;
call = getCheckedComplexCall(call);
//qDebug() << Q_FUNC_INFO << ": Second cut: " << call;
//qDebug() << Q_FUNC_INFO << " - 010" ;
if (call.count('/') == 1)
{// Complex calls (like F/EA4K - EA4K/F -EA4K/P - EA4K/1 - EA4K/qrp - VK9M/EA4K - EA4K/VK9M
// K1B/QRP - B1A/VK9M
QStringList parts;
parts.clear();
parts << call.split('/');
QString first = parts.at(0);
QString second = parts.at(1);
// First identify normal suffixes /P, /1, /QRP...
bool firstCountry = !isAValidOperatingSuffix(first);
bool secondCountry = !isAValidOperatingSuffix(second);
//qDebug() << QString("First = %1, Second = %2").arg(boolToQString(firstCountry)).arg(boolToQString(secondCountry));
if (!firstCountry)
{
if ((parts.at(0)) == "MM")
{ // Special case for Scotland EA4K/MM colliding as maritime movil
// Scotland requires the prefix first like in MM/EA4K
firstCountry=true;
}
}
//qDebug() << Q_FUNC_INFO << " - 020" ;
if (firstCountry && secondCountry)
{ // EA4K/VK9M
//qDebug() << Q_FUNC_INFO << " - 030" ;
bool firstIsPrefix = isAKnownPrefix(first);
bool secondIsPrefix = isAKnownPrefix(second);
if (firstIsPrefix && !secondIsPrefix)
{
//qDebug() << Q_FUNC_INFO << " END first - 033" ;
return first;
}
else if (!firstIsPrefix && secondIsPrefix)
{
//qDebug() << Q_FUNC_INFO << "END second - 034" ;
return second;
}
else
{
if (first.length()>second.length())
{
call = second;
}
else
{
call = first;
}
}
}
else if (isAValidOperatingSuffix(first))
{// 1/EA4K
// TODO: Here the perfect way should be to obtain the country and
// add the number, if area is requested
call = second;
}
else if (isAValidOperatingSuffix(second))
{// EA4K/2
call = first;
}
else
{ // None is a normal country prefix
return QString();
}
}
return call;
}
bool Utilities::isValidCall(const QString &_c, bool _force)
{// https://life.itu.int/radioclub/rr/art19.pdf
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Start = %1").arg(_c), Debug);
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << "Start: " << _c;
//qDebug() << Q_FUNC_INFO << ": " << _c;
// Prefixes are at least 2 chars
if ((!validateCalls) && (!_force))
{
//qDebug() << Q_FUNC_INFO << "001 - Not validating calls: " << _c;
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - 001 - true"), Debug);
return true;
}
//qDebug() << Q_FUNC_INFO << " - Long prefixes: " << QString::number(longPrefixes.count());
if (longPrefixes.count()<100)
{
//qDebug() << Q_FUNC_INFO << "Long prefixes < 100 " << _c;
return false;
}
QString call = _c;
//qDebug() << Q_FUNC_INFO << "000 " << _c;
if (isAKnownCall(call))
{
//qDebug() << Q_FUNC_INFO << "001 - Known call: " << _c;
return true;
}
//qDebug() << Q_FUNC_INFO << "- 002 " << call;
if (call.length()<3)
{
//qDebug() << Q_FUNC_INFO << "- 003 " << call;
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - 010 - False"), Debug);
return false;
}
//call = getMainCallFromComplexCall(call);
//qDebug() << Q_FUNC_INFO << "- 004 :" << call;
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - 010"), Devel);
if (call.count('\\')>0)
{
call.replace('\\', '/');
}
//qDebug() << Q_FUNC_INFO << " -005";
if (call.count('/')>2)
{
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - 015 - false"), Debug);
//qDebug() << Q_FUNC_INFO << " -005.5";
return false;
}
//qDebug() << Q_FUNC_INFO << " -006";
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - 020"), Devel);
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << " - 020";
if (call.count('/') == 2)
{ //Things like F/EA4K/P will become F/EA4K
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("Two /; Ignoring the last part: %1").arg(call), Devel);
QStringList parts;
parts.clear();
parts << call.split('/');
call = parts.at(0) + "/" + parts.at(1);
}
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString(" - 025: %1").arg(call), Devel);
//qDebug() << Q_FUNC_INFO << " -025";
if (call.count('/') == 1)
{ // Complex calls (like F/EA4K or EA4K/F OR /p OR /qrp
// We are just checking the call format not if it belongs to a country or whatever.
// It may return true for wrong calls like "ABC/EA4K"
// TODO: Add a check just for prefixes to fix the previous
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString(" - Call with one /: %1").arg(call), Devel);
QStringList parts;
parts.clear();
parts << call.split ('/');
//EA4K/P
bool result1 = ((isAPrefix (parts.at (0))) || (isValidSimpleCall (parts.at(0))));
//qDebug() << Q_FUNC_INFO << " -027";
bool result2 = ((isAPrefix (parts.at (1))) || (isValidSimpleCall (parts.at(1))) || isAValidOperatingSuffix(parts.at(1)) );
//qDebug() << Q_FUNC_INFO << parts.at(0) << "/" << parts.at(1);
//qDebug() << Q_FUNC_INFO << QString("Result1=%1").arg(boolToQString(result1));
//qDebug() << Q_FUNC_INFO << QString("Result2=%1").arg(boolToQString(result2));
//qDebug() << Q_FUNC_INFO << QString("Detailed=%1/%2/%3").arg(boolToQString((isAPrefix (parts.at (1))) )).arg(boolToQString((isValidSimpleCall (parts.at(1))))).arg(boolToQString(isAValidOperatingSuffix(parts.at(1))));
//qDebug() << Q_FUNC_INFO << "END1";
return (result1 && result2);
}
//logEvent (QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName), QString("END - %1").arg(isValidSimpleCall(call)), Debug);
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << " - END";
return isValidSimpleCall(call);
}
QString Utilities::getPrefixFromCall(const QString &_c, bool withAreaNumber)
{
//qDebug() << Q_FUNC_INFO << ": " << _c << " - WithAreaNumber=" << boolToQString(withAreaNumber);
if (_c.isNull())
{
return QString();
}
QString call = _c;
int length = call.length();
bool firstSpecial = isAOneLetterPrefix(call.at(0));
if (length==1)
{
if (firstSpecial)
{
return _c;
}
else
{
return QString();
}
}
//qDebug() << Q_FUNC_INFO << " - Going to calculate - length = " << QString::number(length);
if (length>2)
{
//qDebug() << Q_FUNC_INFO << " - Going to Look for a known call" ;
if (isAKnownCall(_c))
{
//qDebug() << Q_FUNC_INFO << " - Known CALL found!";
return _c;
}
//qDebug() << Q_FUNC_INFO << " - Call not found!" ;
}
//qDebug() << Q_FUNC_INFO << " - 010";
call = getMainCallFromComplexCall(call);
//qDebug() << Q_FUNC_INFO << " - 011: " << call;
QString call2 = call;
QString call3 = call;
int i = length;
while (i>0)
{
//qDebug() << Q_FUNC_INFO << QString(" While (i=%1) = ").arg(i) << call;
if (isAKnownPrefix(call))
{// EA, EA6, VK9N, VP2E, K, K1, KN1, 4U1I
//qDebug() << Q_FUNC_INFO << QString("- Known prefix found: %1").arg(call);
if (withAreaNumber)
{
//qDebug() << Q_FUNC_INFO << QString("- With Area number");
if ( (call2.back()).isDigit() )
{
//qDebug() << Q_FUNC_INFO << QString("- With Area number -call2- & last is a digit");
return call2;
}
else if((call3.back()).isDigit())
{
//qDebug() << Q_FUNC_INFO << QString("- With Area number -call3- & last is a digit");
return call3;
}
}
//qDebug() << Q_FUNC_INFO << QString("- With NO Area number");
return call;
}
//qDebug() << Q_FUNC_INFO << QString("- Known prefix NOT found: %1").arg(call);
call3 = call2;
call2 = call;
call.chop(1);
i--;
}
return QString();
/*
QString call2 = call;
QString call3 = call;
bool keepAnalyzing = true;
bool found = false;
bool secondCharIsNumber = false;
if ((call.at(1)).isDigit())
{
secondCharIsNumber = true;
}
//GW1A
while (keepAnalyzing)
{
//qDebug() << Q_FUNC_INFO << " - call: " << call;
//qDebug() << Q_FUNC_INFO << " - call2: " << call2;
//qDebug() << Q_FUNC_INFO << " - call3: " << call3;
if (isAKnownPrefix(call))
{
//qDebug() << Q_FUNC_INFO << ": Found!: " << call;
keepAnalyzing = false;
found = true;
}
else if (call.length()<=2)
{
//qDebug() << Q_FUNC_INFO << ": Not found & call<=2: " << call;
keepAnalyzing = false;
}
else
{
//qDebug() << Q_FUNC_INFO << ": else, chop: " << call;
call3 = call2;
call2 = call;
call.chop(1);
}
}
//qDebug() << Q_FUNC_INFO << ": **** Out of while: " << call << "/" << call2 << "/" << call3;
if (found)
{
//qDebug() << Q_FUNC_INFO << ": END-0 " << call;
return call;
}
else
{
if (firstSpecial)
{
call3 = call2;
call2 = call;
call.chop(1);
}
//qDebug() << Q_FUNC_INFO << ": **** Out of while Special 1-Letter: " << call << "/" << call2 << "/" << call3;
}
//qDebug() << Q_FUNC_INFO << ": **** To process: " << call << "/" << call2 << "/" << call3;
if (withAreaNumber)
{
//qDebug() << Q_FUNC_INFO << ": WithAreaNumber";
if (firstSpecial)
{
//qDebug() << Q_FUNC_INFO << ": FirstSpecial";
int last = call2.length();
//qDebug() << Q_FUNC_INFO << ": last="<< QString::number(last);
if (call.length()==1)
{
//qDebug() << Q_FUNC_INFO << ": END0: " << call;
return call;
}
else if (((call2.at(last-1)).isDigit()))
{//K1
//qDebug() << Q_FUNC_INFO << ": END1: " << call2;
return call2;
}
else if ((call3.at(call3.length()-1)).isDigit())
{//KB1
//qDebug() << Q_FUNC_INFO << ": END2: " << call3;
return call3;
}
else
{
//qDebug() << Q_FUNC_INFO << ": END3: " << call;
return call;
}
}
else
{
if (call == call2)
{
//qDebug() << Q_FUNC_INFO << ": END4: " << call;
return call;
}
int last = call2.length();
if (((call2.at(last-1)).isDigit()))
{
//qDebug() << Q_FUNC_INFO << ": END5: " << call2;
return call2;
}
//qDebug() << Q_FUNC_INFO << ": END6: " << call;
//return call;
}
}
//Si se pide el numero pero el prefijo no trae numero se devuelve sin numero.
if (firstSpecial)
{
//qDebug() << Q_FUNC_INFO << ": call2: " << call2;
if (isAKnownPrefix(call2))
{
//qDebug() << Q_FUNC_INFO << ": END7.1: " << call;
return call2;
}
else if (!secondCharIsNumber && (call.at(3)).isDigit())
{
//qDebug() << Q_FUNC_INFO << ": END7.2: " << call;
return call;
}
//qDebug() << Q_FUNC_INFO << ": END7.3: " << call;
//return call;
}
int last = call2.length();
if (!((call2.at(last-1)).isDigit()))
{
if (isAKnownPrefix(call))
{
//qDebug() << Q_FUNC_INFO << ": END7.5: " << call2;
return call;
}
//qDebug() << Q_FUNC_INFO << ": END8: " << call2;
return call2;
}
//qDebug() << Q_FUNC_INFO << ": END9: " << call;
return call;
*/
}
bool Utilities::isAOneLetterPrefix(const QChar &_c)
{
QList validFirstLettersOnly = {'B', 'F', 'G', 'I', 'K', 'M', 'N', 'R', 'W'};
return validFirstLettersOnly.contains (_c);
}
bool Utilities::isSameFreq(const double fr1, const double fr2)
{
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << ": " << QString::number(fr1) << "/" << QString::number(fr2) << " = " << QString::number(fabs(fr1 - fr2)) ;
if (fabs(fr1 - fr2) < 0.00001) // 10 Hz
{
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << " - true" ;
return true;
}
else
{
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << " - false" ;
return false;
}
//return fabs(fr1 - fr2) < 0.001;
}
bool Utilities::isValidBandId(const int _b)
{
if (_b>0)
{
return true;
}
else
{
return false;
}
//return false;
}
bool Utilities::isValidModeId(const int _m)
{
return (_m>0);
}
bool Utilities::isValidFreq(const QString &_b)
{
return (_b.toDouble()>0);
}
bool Utilities::isValidGrid(const QString &_b)
{
Locator locator;
return locator.isValidLocator(_b);
}
bool Utilities::isValidVUCCGrids(const QString &_b)
{
//qDebug() << Q_FUNC_INFO << ": " << _b;
if(_b.endsWith (','))
return false;
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << ": " << _b;
QStringList tmp;
//QString a = _b;
tmp.clear ();
tmp << _b.split (',', QT_SKIP);
//qDebug() << Q_FUNC_INFO << ": 10";
if ((tmp.length () !=2) && (tmp.length () !=4) )
{
//qDebug() << Q_FUNC_INFO << ": 11 - not valid lenght";
return false;
}
//qDebug() << Q_FUNC_INFO << ": 20";
QString aux;
foreach (aux, tmp) {
aux = aux.trimmed ();
//if ((!isValidGrid (aux)) || (aux.length ()!=4))
if (!isValidGrid (aux))
{
//qDebug() << Q_FUNC_INFO << ": 30 - non valid: " << aux;
return false;
}
else
{
//qDebug() << Q_FUNC_INFO << ": 31 - valid";
}
}
//qDebug() << Q_FUNC_INFO << ": 100 - VALID END";
return true;
}
bool Utilities::isValidRST(const QString &_b)
{
return (_b.length()>0);
}
bool Utilities::isValidPower(const QString &_b)
{
return (_b.toDouble()>0);
}
bool Utilities::isValidComment(const QString &_b)
{
return (_b.length()>0);
}
bool Utilities::isValidName(const QString &_b)
{
return (_b.length()>0);
}
bool Utilities::fileExists(const QString &_fileName)
{
//qDebug() << Q_FUNC_INFO << _file ;
return (QFile::exists(_fileName));
}
bool Utilities::isValidADIFField(const QString &_b)
{
//qDebug() << "Utilities::isValidADIFField: " << _b ;
/*
This functions checks if the ADIF field has the proper format.
Data
*/
if (!((_b.startsWith('<')) && (_b.count('>')) == 1 ))
{
//qDebug() << "Utilities::isValidADIFField: BAD FORMAT: No < or > delimiters: " << _b ;
return false;
}
if (_b.simplified() == "")
{
return true;
}
QStringList validDataTypes = {"B", "N", "D", "T", "S", "I", "M", "G", "E", "L"};
QStringList qs;
qs.clear();
qs.append(_b.split('>'));
if (qs.size()!= 2)
{
//qDebug() << "Utilities::isValidADIFField-0 (not two): " << QString::number(qs.size()) ;
return false;
}
QString field = (qs.at(0)).right((qs.at(0)).length() - 1);
QString data = (qs.at(1)).simplified();
//data = data.simplified();
QString dataType = QString();
//qDebug() << "Utilities::isValidADIFField-Field: " << field ;
//qDebug() << "Utilities::isValidADIFField_Data: " << data ;
int length = data.length();
int separatorPosition = 0;
int i = (field).count(":"); //Check how many ":" do we have, to see if we have a data type or not
if (i == 2) // We have data type
{ // DATE:8:D / 20141020
separatorPosition = (field.section(':', 1, 1)).toInt();
dataType = field.section(':', 2, 2);
if (!validDataTypes.contains(dataType.toUpper()))
{
//qDebug() << "Utilities::isValidADIFField - FORMAT ERROR: Wrong data type: " << dataType ;
return false;
}
}
else if (i == 1)
{ // DATE:8 / 20141020
separatorPosition = (field.section(':', 1, 1)).toInt();
}
else
{
//qDebug() << "Utilities::isValidADIFField - FORMAT ERROR, more than 2 \":\" - " << field ;
return false;
}
if ( length != separatorPosition)
{
//qDebug() << "Utilities::isValidADIFField: Data Length problem: " << (field) << "/" << data << " - " << QString::number(length) << "/" << QString::number(separatorPosition) ;
return false;
}
if (separatorPosition <= 0)
{
//qDebug() << "Utilities::isValidADIFField: Length problem <= 0" ;
return false;
}
//qDebug() << "FileManager::checkADIFValidFormat: Return true" ;
return true;
}
bool Utilities::isValidQSL_Rcvd(const QString &c)
{
return ((c == "Y") || (c == "N") || (c == "R") || (c == "I") || (c == "V"));
}
bool Utilities::isValidQSL_Sent(const QString &c)
{
return ((c == "Y") || (c == "N") || (c == "R") || (c == "Q") || (c == "I"));
}
bool Utilities::isValidUpload_Status(const QString &c)
{
return ((c == "Y") || (c == "N") || (c == "M"));
}
bool Utilities::isValidFISTS(const QString &c)
{
return (c.toInt ()>0);
}
QStringList Utilities::getValidADIFFieldAndData(const QString &_b)
{
//qDebug() << "Utilities::getValidADIFFieldAndData: " << _b ;
/*
This functions checks if the ADIF field has the proper format.
Data
*/
QStringList result;
result.clear();
if (!(_b.startsWith('<')))
{
//qDebug() << "Utilities::getValidADIFFieldAndData: BAD FORMAT: No < or > delimiters: " << _b ;
return QStringList();
}
if (_b.simplified() == "")
{
//qDebug() << "Utilities::getValidADIFFieldAndData: EOR" ;
result << "EOR" << "EOR";
return result;
}
QString aux = _b;
QStringList qs;
qs.clear();
if ((aux.contains("APP_LOTW_")) && aux.contains("//"))
{ // Trying to fix a LoTW ADIF bug
qs.append(aux.split("//"));
aux = qs.at(0);
}
//qDebug() << "Utilities::getValidADIFFieldAndData: -20" ;
QStringList validDataTypes = {"B", "N", "D", "T", "S", "I", "M", "G", "E", "L"};
qs.clear();
qs.append(aux.split('>'));
if (qs.size()!= 2)
{
//qDebug() << "Utilities::getValidADIFFieldAndData-0 (not two): " << QString::number(qs.size()) ;
return result;
}
//qDebug() << "Utilities::getValidADIFFieldAndData: -30" ;
//QString field = (qs.at(0)).right((qs.at(0)).length() - 1);
QString field = (qs.at(0)).right((qs.at(0)).length() - 1);
QString data = (qs.at(1)).simplified();
//data = data.simplified();
QString dataType = QString();
//qDebug() << "Utilities::getValidADIFFieldAndData-Field: " << field ;
//qDebug() << "Utilities::getValidADIFFieldAndData_Data: " << data ;
int length = data.length();
int separatorPosition = 0;
int i = (field).count(":"); //Check how many ":" do we have, to see if we have a data type or not
if (i == 2) // We have data type
{ // DATE:8:D / 20141020
separatorPosition = (field.section(':', 1, 1)).toInt();
dataType = field.section(':', 2, 2);
//qDebug() << "Utilities::getValidADIFFieldAndData - DataType: -" << dataType << "-" ;
if (!validDataTypes.contains(dataType.toUpper()))
{
//qDebug() << "Utilities::getValidADIFFieldAndData - FORMAT ERROR: Wrong data type: " << dataType ;
return result;
}
}
else if (i == 1)
{ // DATE:8 / 20141020
separatorPosition = (field.section(':', 1, 1)).toInt();
}
else
{
//qDebug() << "Utilities::getValidADIFFieldAndData - FORMAT ERROR, more than 2 \":\" - " << field ;
return result;
}
//qDebug() << "Utilities::getValidADIFFieldAndData: -60" ;
if ( length != separatorPosition)
{
//qDebug() << "Utilities::getValidADIFFieldAndData: Data Length problem: " << (field) << "/" << data << " - " << QString::number(length) << "/" << QString::number(separatorPosition) ;
return result;
}
if (separatorPosition <= 0)
{
//qDebug() << "Utilities::getValidADIFFieldAndData: Length problem <= 0" ;
return result;
}
//qDebug() << "Utilities::getValidADIFFieldAndData: -90: f: " << field ;
//qDebug() << "Utilities::getValidADIFFieldAndData: -90: d: " << data;ield = field.section(':', 0, 0);
result.clear();
result << field.section(':', 0, 0) << data;
//qDebug() << "Utilities::checkADIFValidFormat: Return true: " << result.at(0) << "/" << result.at(1) ;
return result;
}
QString Utilities::getAValidCall (const QString &_wrongCall)
{
//qDebug() << "Utilities::getAValidCall: " << _wrongCall ;
QString _confirmedCall;
_confirmedCall.clear();
bool ok;
if (_wrongCall.length() > 0)
{
//qDebug() << "Utilities::getAValidCall (Don't have VALID CALL): " << _wrongCall ;
_confirmedCall = QString(QObject::tr("A wrong callsign has been found: %1. Please enter a new callsign or confirm that the current one is a good callsign.")).arg(_wrongCall);
}
else
{
//qDebug() << "Utilities::getAValidCall (Don't have ANY CALL): " << _wrongCall ;
_confirmedCall = QString(QObject::tr("An empty callsign has been detected. If it is possible, please enter the right call."));
}
QString text = QInputDialog::getText(nullptr, QObject::tr("KLog - Not valid callsign found"),
_confirmedCall, QLineEdit::Normal, _wrongCall, &ok);
if (!(ok && isValidCall(text)))
{
_confirmedCall = text;
}
else
{
_confirmedCall = QString();
}
//qDebug() << "Utilities::getAValidCall: " << _confirmedCall ;
return _confirmedCall;
}
QString Utilities::getDateTimeSQLiteStringFromDateTime(const QDateTime &_d)
{
return QString(_d.toString("yyyy-MM-dd hh:mm:ss"));
}
QString Utilities::getDateSQLiteStringFromDate(const QDate &_d)
{
return QString(_d.toString("yyyy-MM-dd"));
}
bool Utilities::isValidDateFromString(const QString &_s)
{
return getDateFromSQliteString(_s).isValid();
}
bool Utilities::isValidTimeFromString(const QString &_s)
{
return getDateTimeFromSQLiteString(_s).time().isValid();
}
bool Utilities::isValidDateTimeFromString(const QString &_s)
{
return getDateTimeFromSQLiteString(_s).isValid();
}
bool Utilities::isValidDXCC(const int _d)
{//TODO: Look for a better way to check, taking into account how KLog is identifiying the DXCC
return (((_d > 0) && (_d < 523)) || (_d == 1206) || (_d == 1279) || (_d == 1248) || (_d == 2248) || (_d == 1259) || (_d == 1390));
}
bool Utilities::isValidAntPath(const QString &_s)
{
return ((_s == "G") || (_s == "O") || (_s == "S") || (_s == "L"));
}
bool Utilities::isValidARRLSect(const QString &_s)
{
return (ARRL_sects.contains (_s.toUpper ()));
}
QDateTime Utilities::getDateTimeFromSQLiteString(const QString &_s)
{
return QDateTime::fromString(_s, "yyyy-MM-dd hh:mm:ss");
}
QTime Utilities::getTimeFromSQLiteString(const QString &_s)
{
if (_s.length()==5)
{
return QTime::fromString(_s, "hh:mm");
}
else
{
return QTime::fromString(_s, "hh:mm:ss");
}
}
QDate Utilities::getDateFromSQliteString(const QString &_s)
{
//It may receive "just" a date or a "date time".
if (getDateTimeFromSQLiteString(_s).isValid()) // if we have received a full date time
{
return (getDateTimeFromSQLiteString(_s)).date();
}
else // If we have received "just a date" or an error
{
return QDate::fromString(_s, "yyyy-MM-dd");
}
}
QDate Utilities::getDateFromADIFDateString(const QString &_s)
{// Expects an ADIF DATE format string: "YYYYMMDD"
//qDebug() << "Utilities::getDateFromADIFDateString: " << _s ;
return QDate::fromString(_s, "yyyyMMdd");
}
QTime Utilities::getTimeFromADIFTimeString(const QString &_s)
{// Expects and ADIF TIME format String "HHMMSS" or "HHMM"
//qDebug() << "Utilities::getTimeFromADIFTimeString: " << _s ;
if (_s.length()==4)
{
return QTime::fromString(_s, "hhmm");
}
else
{
return QTime::fromString(_s, "hhmmss");
}
}
QDate Utilities::getDateFromLoTWQSLDateString(const QString &_s)
{
//qDebug() << "Utilities::getDateFromLoTWQSLDateString: " << _s ;
QStringList datet;
datet.clear();
if (_s.endsWith ('Z'))
{
datet << _s.split("T");
}
else
{
datet << _s.split(" ");
}
//qDebug() << "Utilities::getDateFromLoTWQSLDateString: " << datet.at(0) ;
return QDate::fromString(datet.at(0), "yyyy-MM-dd");
}
QString Utilities::getADIFDateFromQDateTime(const QDateTime &_d)
{
if (!_d.isValid())
{
return QString();
}
else
{
return _d.date().toString("yyyyMMdd");
}
}
QString Utilities::getADIFDateFromQDate(const QDate &_d)
{
if (!_d.isValid())
{
return QString();
}
else
{
return _d.toString("yyyyMMdd");
}
}
QString Utilities::getADIFTimeFromQDateTime(const QDateTime &_d)
{
if (!_d.isValid())
{
return QString();
}
else
{
return _d.time().toString("hhmmss");
}
}
QString Utilities::getCabrilloDateFromQDate(const QDate &_d)
{// Will produce the Cabrillo DATE format: "YYYY-MM-DD"
if (!_d.isValid())
{
return QString("0000-00-00");
}
else
{
return _d.toString("yyyy-MM-dd");
}
}
QString Utilities::getCabrilloTimeFromQDateTime(const QDateTime &_d)
{// Will produce the Cabrillo TIME format: "HHMM"
if (!_d.isValid())
{
return QString("0000");
}
else
{
return _d.time().toString("hhmm");
}
}
QString Utilities::getOnlineServiceName(OnLineProvider _service)
{//enum OnLineProvider {ClubLog, LoTW, eQSL, QRZ}; //, HamQTH, HRDLog
switch (_service)
{
case LoTW:
{
return "LoTW";
}
case ClubLog:
{
return "ClubLog";
}
case QRZ:
{
return "QRZ.com";
}
case eQSL:
{
return "eQSL.cc";
}
}
return QString();
}
QString Utilities::getClearSQLi(QString _s)
{
return _s.remove ('\'');
}
//void Utilities::setDarkMode(const QString &_dm)
//{
// darkMode = trueOrFalse(_dm);
//}
//bool Utilities::isDarkMode()
//{
// return darkMode;
//}
void Utilities::setLogColumnNames()
{
// QMap columnNames;
columnNames.insert("qso_date", QObject::tr("Date"));
columnNames.insert("call", QObject::tr("Call"));
columnNames.insert("rst_sent", QObject::tr("RSTtx"));
columnNames.insert("rst_rcvd", QObject::tr("RSTrx"));
columnNames.insert("bandid", QObject::tr("Band"));
columnNames.insert("comment", QObject::tr("Comment"));
columnNames.insert("modeid", QObject::tr("Mode"));
columnNames.insert("cqz", QObject::tr("CQz"));
columnNames.insert("ituz", QObject::tr("ITUz"));
columnNames.insert("dxcc", QObject::tr("DXCC"));
columnNames.insert("address", QObject::tr("Address"));
columnNames.insert("age", QObject::tr("Age"));
columnNames.insert("cnty", QObject::tr("County"));
columnNames.insert("a_index", QObject::tr("A_Index"));
columnNames.insert("ant_az", QObject::tr("Ant_Az"));
columnNames.insert("ant_el", QObject::tr("Ant_El"));
columnNames.insert("ant_path", QObject::tr("Ant_Path"));
columnNames.insert("arrl_sect", QObject::tr("ARRL_SECT"));
columnNames.insert("award_submitted", QObject::tr("Award_Submitted"));
columnNames.insert("award_granted", QObject::tr("Award_granted"));
columnNames.insert("band_rx", QObject::tr("Band_RX"));
columnNames.insert("checkcontest", QObject::tr("CheckContest"));
columnNames.insert("class", QObject::tr("Class"));
columnNames.insert("clublog_qso_upload_date", QObject::tr("ClubLog SDate"));
columnNames.insert("clublog_qso_upload_status", QObject::tr("ClubLog status"));
columnNames.insert("cont", QObject::tr("Continent"));
columnNames.insert("contacted_op", QObject::tr("Contacted_Op"));
columnNames.insert("contest_id", QObject::tr("Contest Id"));
columnNames.insert("country", QObject::tr("Country"));
columnNames.insert("credit_submitted", QObject::tr("Credit Submitted"));
columnNames.insert("credit_granted", QObject::tr("Credit granted"));
columnNames.insert("dark_dok", QObject::tr("Dark Dok", "Do not translate if unsure, common hamradio term."));
columnNames.insert("distance", QObject::tr("Distance"));
columnNames.insert("email", QObject::tr("Email"));
columnNames.insert("eq_call", QObject::tr("EQ_Call"));
columnNames.insert("eqsl_qslrdate", QObject::tr("eQSL RDate"));
columnNames.insert("eqsl_qslsdate", QObject::tr("eQSL SDate"));
columnNames.insert("eqsl_qsl_rcvd", QObject::tr("eQSL Rcvd"));
columnNames.insert("eqsl_qsl_sent", QObject::tr("eQSL Sent"));
columnNames.insert("fists", QObject::tr("Fists", "Do not translate if unsure, common hamradio term."));
columnNames.insert("fists_cc", QObject::tr("Fists CC", "Do not translate if unsure, common hamradio term."));
columnNames.insert("force_init", QObject::tr("Force Init"));
columnNames.insert("freq", QObject::tr("Freq"));
columnNames.insert("freq_rx", QObject::tr("Freq RX"));
columnNames.insert("gridsquare", QObject::tr("Gridsquare"));
columnNames.insert("hrdlog_qso_upload_date", QObject::tr("HRDLog SDate"));
columnNames.insert("hrdlog_qso_upload_status", QObject::tr("HRDLog status"));
columnNames.insert("iota", QObject::tr("IOTA"));
columnNames.insert("iota_island_id", QObject::tr("IOTA Island id"));
columnNames.insert("k_index", QObject::tr("K Index"));
columnNames.insert("lat", QObject::tr("Lat"));
columnNames.insert("lon", QObject::tr("Lon"));
columnNames.insert("lotw_qslrdate", QObject::tr("LoTW RDate"));
columnNames.insert("lotw_qslsdate", QObject::tr("LoTW SDate"));
columnNames.insert("lotw_qsl_rcvd", QObject::tr("LoTW Rcvd"));
columnNames.insert("lotw_qsl_sent", QObject::tr("LoTW Sent"));
columnNames.insert("max_bursts", QObject::tr("Max Bursts"));
columnNames.insert("ms_shower", QObject::tr("MS Shower"));
columnNames.insert("my_antenna", QObject::tr("My Antenna"));
columnNames.insert("my_city", QObject::tr("My City"));
columnNames.insert("my_cnty", QObject::tr("My Cnty"));
columnNames.insert("my_country", QObject::tr("My Country"));
columnNames.insert("my_cq_zone", QObject::tr("My CQz"));
columnNames.insert("my_dxcc", QObject::tr("My DXCC"));
columnNames.insert("my_fists", QObject::tr("My Fists", "Do not translate if unsure, common hamradio term."));
columnNames.insert("my_gridsquare", QObject::tr("My Gridsquare"));
columnNames.insert("my_iota", QObject::tr("My IOTA"));
columnNames.insert("my_iota_island_id", QObject::tr("My IOTA island id"));
columnNames.insert("my_itu_zone", QObject::tr("My ITUz"));
columnNames.insert("my_lat", QObject::tr("My Lat"));
columnNames.insert("my_lon", QObject::tr("My Lon"));
columnNames.insert("my_name", QObject::tr("My Name"));
columnNames.insert("my_postal_code", QObject::tr("My Postal code"));
columnNames.insert("my_rig", QObject::tr("My Rig"));
columnNames.insert("my_sig", QObject::tr("My Sig"));
columnNames.insert("my_sig_info", QObject::tr("My Sig Info"));
columnNames.insert("my_sota_ref", QObject::tr("My SOTA ref"));
columnNames.insert("my_state", QObject::tr("My State"));
columnNames.insert("my_street", QObject::tr("My Street"));
columnNames.insert("my_usaca_counties", QObject::tr("My USACA counties"));
columnNames.insert("my_vucc_grids", QObject::tr("My VUCC grids"));
columnNames.insert("name", QObject::tr("Name"));
columnNames.insert("notes", QObject::tr("Notes"));
columnNames.insert("nr_bursts", QObject::tr("Nr bursts", "Do not translate if unsure, common hamradio term."));
columnNames.insert("nr_pings", QObject::tr("Nr pings", "Do not translate if unsure, common hamradio term."));
columnNames.insert("operator", QObject::tr("Operator"));
columnNames.insert("owner_callsign", QObject::tr("Owner Callsign"));
columnNames.insert("pfx", QObject::tr("Pfx"));
columnNames.insert("precedence", QObject::tr("Precedence"));
columnNames.insert("prop_mode", QObject::tr("Prop Mode"));
columnNames.insert("public_key", QObject::tr("Public Key"));
columnNames.insert("qrzcom_qso_upload_date", QObject::tr("QRZcom SDate"));
columnNames.insert("qrzcom_qso_upload_status", QObject::tr("QRZcom status"));
columnNames.insert("qslmsg", QObject::tr("QSL msg"));
columnNames.insert("qslrdate", QObject::tr("QSL RDate"));
columnNames.insert("qslsdate", QObject::tr("QSL SDate"));
columnNames.insert("qsl_rcvd", QObject::tr("QSL Rcvd"));
columnNames.insert("qsl_sent", QObject::tr("QSL Sent"));
columnNames.insert("qsl_rcvd_via", QObject::tr("QSL rcvd via"));
columnNames.insert("qsl_sent_via", QObject::tr("QSL sent via"));
columnNames.insert("qsl_via", QObject::tr("QSL via"));
columnNames.insert("qso_complete", QObject::tr("QSO complete"));
columnNames.insert("qso_random", QObject::tr("QSO random"));
columnNames.insert("qth", QObject::tr("QTH"));
columnNames.insert("region", QObject::tr("Region"));
columnNames.insert("rig", QObject::tr("Rig"));
columnNames.insert("rx_pwr", QObject::tr("RX Pwr"));
columnNames.insert("sat_mode", QObject::tr("Sat mode"));
columnNames.insert("sat_name", QObject::tr("Sat name"));
columnNames.insert("sfi", QObject::tr("SFI"));
columnNames.insert("sig", QObject::tr("Sig"));
columnNames.insert("sig_info", QObject::tr("Sig Info"));
columnNames.insert("silent_key", QObject::tr("Silent key", "Do not translate if unsure, common hamradio term."));
columnNames.insert("skcc", QObject::tr("SKCC"));
columnNames.insert("sota_ref", QObject::tr("SOTA Ref"));
columnNames.insert("srx_string", QObject::tr("SRX String"));
columnNames.insert("srx", QObject::tr("SRX"));
columnNames.insert("stx_string", QObject::tr("STX String"));
columnNames.insert("state", QObject::tr("State"));
columnNames.insert("station_callsign", QObject::tr("Station Callsign"));
columnNames.insert("submode", QObject::tr("Submode"));
columnNames.insert("swl", QObject::tr("SWL", "Do not translate if unsure, common hamradio term."));
columnNames.insert("uksmg", QObject::tr("UKSMG"));
columnNames.insert("usaca_counties", QObject::tr("USACA counties"));
columnNames.insert("ve_prov", QObject::tr("VE prov"));
columnNames.insert("vucc_grids", QObject::tr("VUCC grids"));
columnNames.insert("ten_ten", QObject::tr("Ten-Ten", "Do not translate, it is a hamradio group name."));
columnNames.insert("tx_pwr", QObject::tr("TX Pwr"));
columnNames.insert("web", QObject::tr("Web"));
columnNames.insert("qso_date_off", QObject::tr("QSO Date off"));
columnNames.insert("lognumber", QObject::tr("Log number"));
}
QString Utilities::getLogColumnName(const QString &_column)
{
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << ": " << _column;
QString aux;
aux = columnNames.value(_column);
if (aux.length()>0)
{
return aux;
}
return _column;
/*
if (_column == "qso_date")
return QObject::tr("Date");
else if (_column == "call")
return QObject::tr("Call");
else if (_column == "rst_sent")
return QObject::tr("RSTtx");
else if (_column == "rst_rcvd")
return QObject::tr("RSTrx");
else if (_column == "bandid")
return QObject::tr("Band");
else if (_column == "comment")
return QObject::tr("Comment");
else if (_column == "modeid")
return QObject::tr("Mode");
else if (_column == "cqz")
return QObject::tr("CQz");
else if (_column == "ituz")
return QObject::tr("ITUz");
else if (_column == "dxcc")
return QObject::tr("DXCC");
else if (_column == "address")
return QObject::tr("Address");
else if (_column == "age")
return QObject::tr("Age");
else if (_column == "cnty")
return QObject::tr("County");
else if (_column == "a_index")
return QObject::tr("A_Index");
else if (_column == "ant_az")
return QObject::tr("Ant_Az");
else if (_column == "ant_el")
return QObject::tr("Ant_El");
else if (_column == "ant_path")
return QObject::tr("Ant_Path");
else if (_column == "arrl_sect")
return QObject::tr("ARRL_SECT");
else if (_column == "award_submitted")
return QObject::tr("Award_Submitted");
else if (_column == "award_granted")
return QObject::tr("Award_granted");
else if (_column == "band_rx")
return QObject::tr("Band_RX");
else if (_column == "checkcontest")
return QObject::tr("CheckContest");
else if (_column == "class")
return QObject::tr("Class");
else if (_column == "clublog_qso_upload_date")
return QObject::tr("ClubLog SDate");
else if (_column == "clublog_qso_upload_staus")
return QObject::tr("ClubLog status");
else if (_column == "cont")
return QObject::tr("Continent");
else if (_column == "contacted_op")
return QObject::tr("Contacted Op");
else if (_column == "contest_id")
return QObject::tr("Contest Id");
else if (_column == "country")
return QObject::tr("Country");
else if (_column == "credit_submitted")
return QObject::tr("Credit Submitted");
else if (_column == "credit_granted")
return QObject::tr("Credit granted");
else if (_column == "dark_dok")
return QObject::tr("Dark Dok", "Do not translate if unsure, common hamradio term.");
else if (_column == "distance")
return QObject::tr("Distance");
else if (_column == "email")
return QObject::tr("Email");
else if (_column == "eq_call")
return QObject::tr("EQ_Call");
else if (_column == "eqsl_qslrdate")
return QObject::tr("eQSL RDate");
else if (_column == "eqsl_qslsdate")
return QObject::tr("eQSL SDate");
else if (_column == "eqsl_qsl_rcvd")
return QObject::tr("eQSL Rcvd");
else if (_column == "eqsl_qsl_sent")
return QObject::tr("eQSL Sent");
else if (_column == "fists")
return QObject::tr("Fists", "Do not translate if unsure, common hamradio term.");
else if (_column == "fists_cc")
return QObject::tr("Fists CC", "Do not translate if unsure, common hamradio term.");
else if (_column == "force_init")
return QObject::tr("Force Init");
else if (_column == "freq")
return QObject::tr("Freq");
else if (_column == "freq_rx")
return QObject::tr("Freq RX");
else if (_column == "gridsquare")
return QObject::tr("Gridsquare");
else if (_column == "hrdlog_qso_upload_date")
return QObject::tr("HRDLog SDate");
else if (_column == "hrdlog_qso_upload_status")
return QObject::tr("HRDLog status");
else if (_column == "iota")
return QObject::tr("IOTA");
else if (_column == "iota_island_id")
return QObject::tr("IOTA Island id");
else if (_column == "k_index")
return QObject::tr("K Index");
else if (_column == "lat")
return QObject::tr("Lat");
else if (_column == "lon")
return QObject::tr("Lon");
else if (_column == "lotw_qslrdate")
return QObject::tr("LoTW RDate");
else if (_column == "lotw_qslsdate")
return QObject::tr("LoTW SDate");
else if (_column == "lotw_qsl_rcvd")
return QObject::tr("LoTW Rcvd");
else if (_column == "lotw_qsl_sent")
return QObject::tr("LoTW Sent");
else if (_column == "max_bursts")
return QObject::tr("Max Bursts");
else if (_column == "ms_shower")
return QObject::tr("MS Shower");
else if (_column == "my_antenna")
return QObject::tr("My Antenna");
else if (_column == "my_city")
return QObject::tr("My City");
else if (_column == "my_cnty")
return QObject::tr("My Cnty");
else if (_column == "my_country")
return QObject::tr("My Country");
else if (_column == "my_cq_zone")
return QObject::tr("My CQz");
else if (_column == "my_dxcc")
return QObject::tr("My DXCC");
else if (_column == "my_fists")
return QObject::tr("My Fists", "Do not translate if unsure, common hamradio term.");
else if (_column == "my_gridsquare")
return QObject::tr("My Gridsquare");
else if (_column == "my_iota")
return QObject::tr("My IOTA");
else if (_column == "my_iota_island_id")
return QObject::tr("My IOTA island id");
else if (_column == "my_itu_zone")
return QObject::tr("My ITUz");
else if (_column == "my_lat")
return QObject::tr("My Lat");
else if (_column == "my_lon")
return QObject::tr("My Lon");
else if (_column == "my_name")
return QObject::tr("My Name");
else if (_column == "my_postal_code")
return QObject::tr("My Postal code");
else if (_column == "my_rig")
return QObject::tr("My Rig");
else if (_column == "my_sig")
return QObject::tr("My Sig");
else if (_column == "my_sig_info")
return QObject::tr("My Sig Info");
else if (_column == "my_sota_ref")
return QObject::tr("My SOTA ref");
else if (_column == "my_state")
return QObject::tr("My State");
else if (_column == "my_street")
return QObject::tr("My Street");
else if (_column == "my_usaca_counties")
return QObject::tr("My USACA counties");
else if (_column == "my_vucc_grids")
return QObject::tr("My VUCC grids");
else if (_column == "name")
return QObject::tr("Name");
else if (_column == "notes")
return QObject::tr("Notes");
else if (_column == "nr_bursts")
return QObject::tr("Nr bursts", "Do not translate if unsure, common hamradio term.");
else if (_column == "nr_pings")
return QObject::tr("Nr pings", "Do not translate if unsure, common hamradio term.");
else if (_column == "operator")
return QObject::tr("Operator");
else if (_column == "owner_callsign")
return QObject::tr("Owner Callsign");
else if (_column == "pfx")
return QObject::tr("Pfx");
else if (_column == "precedence")
return QObject::tr("Precedence");
else if (_column == "prop_mode")
return QObject::tr("Prop Mode");
else if (_column == "public_key")
return QObject::tr("Public Key");
else if (_column == "qrzcom_qso_upload_date")
return QObject::tr("QRZcom SDate");
else if (_column == "qrzcom_qso_upload_status")
return QObject::tr("QRZcom status");
else if (_column == "qslmsg")
return QObject::tr("QSL msg");
else if (_column == "qslrdate")
return QObject::tr("QSL RDate");
else if (_column == "qslsdate")
return QObject::tr("QSL SDate");
else if (_column == "qsl_rcvd")
return QObject::tr("QSL Rcvd");
else if (_column == "qsl_sent")
return QObject::tr("QSL Sent");
else if (_column == "qsl_rcvd_via")
return QObject::tr("QSL rcvd via");
else if (_column == "qsl_sent_via")
return QObject::tr("QSL sent via");
else if (_column == "qsl_via")
return QObject::tr("QSL via");
else if (_column == "qso_complete")
return QObject::tr("QSO complete");
else if (_column == "qso_random")
return QObject::tr("QSO random");
else if (_column == "qth")
return QObject::tr("QTH");
else if (_column == "region")
return QObject::tr("Region");
else if (_column == "rig")
return QObject::tr("Rig");
else if (_column == "rx_pwr")
return QObject::tr("RX Pwr");
else if (_column == "sat_mode")
return QObject::tr("Sat mode");
else if (_column == "sat_name")
return QObject::tr("Sat name");
else if (_column == "sfi")
return QObject::tr("SFI");
else if (_column == "sig")
return QObject::tr("Sig");
else if (_column == "sig_info")
return QObject::tr("Sig Info");
else if (_column == "silent_key")
return QObject::tr("Silent key", "Do not translate if unsure, common hamradio term.");
else if (_column == "skcc")
return QObject::tr("SKCC");
else if (_column == "sota_ref")
return QObject::tr("SOTA Ref");
else if (_column == "srx_string")
return QObject::tr("SRX String");
else if (_column == "srx")
return QObject::tr("SRX");
else if (_column == "stx_string")
return QObject::tr("STX String");
else if (_column == "state")
return QObject::tr("State");
else if (_column == "station_callsign")
return QObject::tr("Station Callsign");
else if (_column == "submode")
return QObject::tr("Submode");
else if (_column == "swl")
return QObject::tr("SWL", "Do not translate if unsure, common hamradio term.");
else if (_column == "uksmg")
return QObject::tr("UKSMG");
else if (_column == "usaca_counties")
return QObject::tr("USACA counties");
else if (_column == "ve_prov")
return QObject::tr("VE prov");
else if (_column == "vucc_grids")
return QObject::tr("VUCC grids");
else if (_column == "ten_ten")
return QObject::tr("Ten-Ten", "Do not translate, it is a hamradio group name.");
else if (_column == "tx_pwr")
return QObject::tr("TX Pwr");
else if (_column == "web")
return QObject::tr("Web");
else if (_column == "qso_date_off")
return QObject::tr("QSO Date off");
else if (_column == "lognumber")
return QObject::tr("Log number");
else
{
return _column;
}
*/
}
bool Utilities::isValidContinent(const QString &_s)
{
return (continent.contains (_s.toUpper ()));
}
bool Utilities::isValidPropMode(const QString &_s)
{
QStringList propModes;
propModes.clear ();
propModes << "AS" << "AUE" << "AUR" << "BS" << "ECH" << "EME" << "ES"
<< "F2" << "FAI" << "GWAVE" << "INTERNET" << "ION" << "IRL"
<< "LOS" << "MS" << "RPT" << "RS" << "SAT" << "TEP" << "TR";
return propModes.contains (_s.toUpper ());
}
bool Utilities::isValidDistance(const double _d)
{
return (_d>=0);
}
bool Utilities::isValidSponsor(const QString &_s)
{
return (sponsorsList.contains (_s.toUpper ()));
}
void Utilities::openQrzcom(const QString _call)
{
QString url = "https://www.qrz.com/lookup/" + _call;
QDesktopServices::openUrl(QUrl(url));
}
void Utilities::printCommandHelp(){
cout << "Usage: klog [OPTION]...\n";
cout << "Options:\n";
cout << " -? Display this help\n";
cout << " -h Display this help\n";
cout << " -v Display program version\n";
}
QString Utilities::debugLevelToString(DebugLogLevel _l)
{
switch (_l) {
case None:
return "None";
break;
case Info:
return "Info";
break;
case Debug:
return "Debug";
break;
case Devel:
return "Devel";
break;
default:
return "Undefined";
break;
}
}
DebugLogLevel Utilities::stringToDebugLevel(const QString &_s)
{
QString aux;
aux = _s.toUpper();
if (aux == "INFO")
return Info;
else if (aux == "DEBUG")
return Debug;
else if (aux == "DEVEL")
return Devel;
else
return None;
}
bool Utilities::isValidLogLevel(const QString &_s)
{
return logLevels.contains (_s);
}
QStringList Utilities::getDebugLevels()
{
return logLevels;
}
void Utilities::logEvent(const QString &_func, const QString &_msg, DebugLogLevel _level)
{
emit debugLog (_func, _msg, _level);
/*
//qDebug() << QString("%1-%2").arg(Q_FUNC_INFO).arg(parentName) << _func << ": " << _level << ": " << _msg;
if (logLevel<=_level)
{
//qDebug() << _func << ": " << _level << ": " << _msg;
emit debugLog (_func, _msg, _level);
}
*/
}
klog-2.3.3/database.cpp 0000644 0000157 0000171 00001071256 14542412415 014621 0 ustar jenkins jenkins /***************************************************************************
database.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 . *
* *
*****************************************************************************/
#include "database.h"
//#include
DataBase::DataBase(const QString &_parentClass, const QString &_DBName)
{
Q_UNUSED(_parentClass);
//qDebug() << "DataBase::DataBase: PLAIN: " << _parentClass << " / Name = " << _DBName ;
logLevel = None;
constrid = 1;
created = false;
util = new Utilities(Q_FUNC_INFO);
softVersion = util->getVersion();
dbName = _DBName;
//connect(this, SIGNAL(debugLog(QString, QString, int)), this, SLOT(slotPrintErrors(QString, QString, int)) );
//qDebug() << "DataBase::DataBase1: dbName: " << dbName ;
//db = QSqlDatabase::database();
dbVersion = DBVersionf;
createConnection(QString(Q_FUNC_INFO)+"1");
//qDebug() << "DataBase::DataBase: PLAIN - connection Name: " << dbConnectionName ;
//qDebug() << "DataBase::DataBase: PLAIN - DB Name: " << db.databaseName() ;
insertPreparedQueries.clear();
insertQueryFields.clear();
//qDebug() << "DataBase::DataBase: PLAIN: - END" ;
}
DataBase::DataBase(const QString &_parentClass, const QString &_softVersion, const QString &_DBName)
{
Q_UNUSED(_parentClass);
//qDebug() << "DataBase::DataBase2: " << _parentClass << "/" << _softVersion << " / Name = " << _DBName ;
//TODO: Sometimes the DB is created without the proper calling (without passing softVersion)
logLevel = None;
constrid = 2;
created = false;
dbVersion = DBVersionf;
softVersion = _softVersion;
//inMemoryOnly = inmemoryonly;
latestReaded = 0.0f;
util = new Utilities(Q_FUNC_INFO);
util->setVersion(softVersion);
dbName = _DBName;
if (util->getVersionDouble()>0)
{
createConnection(QString(Q_FUNC_INFO)+"2");
}
//qDebug() << "DataBase::DataBase: - connection Name: " << dbConnectionName ;
//qDebug() << "DataBase::DataBase: - DB Name: " << db.databaseName() ;
insertPreparedQueries.clear();
insertQueryFields.clear();
//qDebug() << "DataBase::DataBase2: END" ;
}
DataBase::~DataBase()
{
logEvent(Q_FUNC_INFO, "Start", Debug);
delete(util);
logEvent(Q_FUNC_INFO, "END", Debug);
//qDebug() << "DataBase::~DataBase" ;
}
QString DataBase::getSoftVersion()
{
logEvent(Q_FUNC_INFO, "Start", Debug);
QSqlQuery query;
QString stringQuery ("SELECT MAX (softversion) FROM softwarecontrol");
bool sqlOK = query.exec(stringQuery);
if (sqlOK)
{
query.next();
if (query.isValid())
{
logEvent(Q_FUNC_INFO, "END-1", Debug);
return (query.value(0)).toString();
}
else
{
query.finish();
logEvent(Q_FUNC_INFO, "END-2", Debug);
return QString();
}
}
else
{ //ERROR in Query execution
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
logEvent(Q_FUNC_INFO, "END-3", Debug);
return QString();
}
}
QString DataBase::getDBVersion()
{
logEvent(Q_FUNC_INFO, "Start", Debug);
QSqlQuery query;
QString stringQuery ("SELECT MAX (dbversion) FROM softwarecontrol");
bool sqlOK = query.exec(stringQuery);
if (sqlOK)
{
query.next();
if (query.isValid())
{
logEvent(Q_FUNC_INFO, "END-1", Debug);
return QString::number((query.value(0)).toDouble(), 'f', 3);
}
else
{
query.finish();
logEvent(Q_FUNC_INFO, "END-2", Debug);
return QString();
}
}
else
{ //ERROR in Query execution
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
logEvent(Q_FUNC_INFO, "END-3", Debug);
return QString();
}
}
/*
bool DataBase::setDir(const QString &_dir)
{
dbDir = _dir;
return true;
}
*/
QString DataBase::getDBName()
{
logEvent(Q_FUNC_INFO, "Start-EndEND", Debug);
return db.databaseName();
}
QStringList DataBase::getColumnNamesFromTable(const QString &_tableName)
{
logEvent(Q_FUNC_INFO, "Start", Debug);
QSqlQuery query;
QString queryString = "PRAGMA table_info(:table)";
query.prepare(queryString);
query.bindValue(":table", _tableName);
bool sqlOK = query.exec();
QStringList list;
if (sqlOK)
{
while (query.next())
{
QString columnName = query.value(1).toString();
if (!columnName.isEmpty() && columnName.toUpper() != "ID")
{
list << columnName;
}
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
}
query.finish();
logEvent(Q_FUNC_INFO, "END", Debug);
return list;
}
void DataBase::compress()
{
logEvent(Q_FUNC_INFO, "Start", Debug);
//QSqlDatabase db = QSqlDatabase::database();
if (!db.open()) { /* Flawfinder: ignore */
QMessageBox::warning(nullptr, QObject::tr("Database Error"),
db.lastError().text());
}
else
{
db.exec("VACUUM;");
}
logEvent(Q_FUNC_INFO, "END", Debug);
}
bool DataBase::reConnect(const QString &_DBName)
{
logEvent(Q_FUNC_INFO, "Start", Debug);
db.close();
dbName = _DBName;
//qDebug() << "DataBase::reConnect: DB closed" ;
//qDebug() << "DataBase::reConnect: DB: " << dbDir ;
bool sqlOK = createConnection(Q_FUNC_INFO);
if (!sqlOK)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
}
logEvent(Q_FUNC_INFO, "END", Debug);
return sqlOK;
}
bool DataBase::createConnection(const QString &function, bool newDB)
{
//qDebug() << "DataBase::createConnection: " << function << "-" << QString::number(dbVersion) << "/" << softVersion ;
logEvent(Q_FUNC_INFO, "Start", Debug);
Q_UNUSED(function);
Q_UNUSED(newDB);
QString stringQuery;
QSqlQuery query;
if (!db.isOpen())
{
//qDebug() << "DataBase::createConnection: DB NOT Opened" ;
if (!db.isValid())
{
//qDebug() << "DataBase::createConnection: DB is not valid, let's call addDataBase" ;
if (!db.isOpen())
{
//qDebug() << "DataBase::createConnection: DB is NOT open, let's open: connection name" << db.connectionName();
QSqlDatabase::removeDatabase("qt_sql_default_connection");
db = QSqlDatabase::addDatabase("QSQLITE");
}
//qDebug() << "DataBase::createConnection: Now we call setDatabaseName" ;
db.setDatabaseName(dbName);
//qDebug() << "DataBase::createConnection: end of not valid" ;
}
//qDebug() << "DataBase::createConnection: end of valid check, let's try if it is open" ;
if (!db.open()) /* Flawfinder: ignore */
{
//qDebug() << "DataBase::createConnection:Not open " ;
QMessageBox::warning(nullptr, QObject::tr("Database Error"), db.lastError().text());
//qDebug() << "DataBase::createConnection: DB creation ERROR" ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
logEvent(Q_FUNC_INFO, "END-1", Debug);
return false;
}
else
{
//qDebug() << "DataBase::createConnection: created and opened after the creation" ;
if (!isTheDBCreated())
{
//qDebug() << "DataBase::createConnection: DB is still not created" ;
if (!createDataBase())
{
//qDebug() << "DataBase::createConnection: DB creation failed!!" ;
logEvent(Q_FUNC_INFO, "END-2", Debug);
return false;
}
//qDebug() << "DataBase::createConnection: After creation" ;
stringQuery ="PRAGMA main.page_size = 4096;";
query.exec(stringQuery);
stringQuery ="PRAGMA main.cache_size=10000;";
query.exec(stringQuery);
stringQuery ="PRAGMA main.locking_mode=EXCLUSIVE;";
query.exec(stringQuery);
stringQuery ="PRAGMA main.synchronous=NORMAL;";
query.exec(stringQuery);
stringQuery ="PRAGMA main.journal_mode=WAL;";
query.exec(stringQuery);
stringQuery ="PRAGMA main.cache_size=5000;";
query.exec(stringQuery);
stringQuery ="PRAGMA synchronous=OFF;";
query.exec(stringQuery);
stringQuery ="PRAGMA main.temp_store = MEMORY;";
query.exec(stringQuery);
//stringQuery="PRAGMA auto_vacuum = FULL;";
//query.exec(stringQuery);
stringQuery ="PRAGMA case_sensitive_like=OFF;";
query.exec(stringQuery);
}
}
}
else
{
//qDebug() << "DataBase::createConnection: No Error, DB is open";
}
//qDebug() << "DataBase::createConnection: Going to run - createBandModeMaps " ;
if (!createBandModeMaps())
{
//qDebug() << "DataBase::createConnection: createBandModeMaps false Stop";
logEvent(Q_FUNC_INFO, "END-3", Debug);
return false;
}
//qDebug() << "DataBase::createConnection -------------------------------------------- END" ;
logEvent(Q_FUNC_INFO, "END", Debug);
return unMarkAllQSO();
}
bool DataBase::isTheDBCreated()
{
//qDebug() << "DataBase::isTheDBCreated: Called from: " << QString::number(constrid) ;
logEvent(Q_FUNC_INFO, "Start", Debug);
QSqlQuery query;
int _num = 0;
//QString stringQuery ("SELECT name FROM sqlite_sequence WHERE name='softwarecontrol'");
QString stringQuery ("SELECT count(id) FROM softwarecontrol");
bool sqlOK = query.exec(stringQuery);
if (sqlOK)
{
//qDebug() << "DataBase::isTheDBCreated - SQL OK" ;
query.next();
if (query.isValid())
{
//qDebug() << "DataBase::isTheDBCreated - valid" ;
_num = (query.value(0)).toInt();
if (_num > 0)
{
//qDebug() << "DataBase::isTheDBCreated - DB Exists" ;
//qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END TRUE" ;
query.finish();
logEvent(Q_FUNC_INFO, "END-1", Debug);
return true;
}
else
{
//qDebug() << "DataBase::isTheDBCreated - DB does not Exist" ;
//qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END FALSE-1" ;
query.finish();
// emit debugLog(Q_FUNC_INFO, "1", 7);
logEvent(Q_FUNC_INFO, "END-2", Debug);
return false;
}
}
else
{
//qDebug() << "DataBase::isTheDBCreated - not valid" ;
//qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END FALSE-2" ;
query.finish();
logEvent(Q_FUNC_INFO, "END-3", Debug);
return false;
}
}
else
{ //ERROR in Query execution
//qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------ ERROR IN QUERY EXECUTION" ;
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
logEvent(Q_FUNC_INFO, "END-4", Debug);
return false;
}
}
bool DataBase::recreateTableLog()
{
logEvent(Q_FUNC_INFO, "Start", Debug);
if (!createTableLog(false)) // Create modetemp
{
//qDebug() << "DataBase::recreateTableLog: CreateTableLog returned false" ;
logEvent(Q_FUNC_INFO, "END-1", Debug);
return false;
}
QString queryString;
queryString.clear();
QStringList columns;
columns.clear();
columns << getColumnNamesFromTable("log");
queryString = columns.first();
for (int i=1;i TMP data table to operate and be deleted afterwards
//qDebug() << "DataBase::createTableSubdivisions" ;
QString stringQuery = QString();
QString table = QString();
if (NoTmp)
{
table = "primary_subdivisions" ;
}
else
{
table = "primary_subdivisionstemp" ;
}
stringQuery = "CREATE TABLE "+ table;
stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"dxcc INTEGER NOT NULL, "
"name VARCHAR NOT NULL, "
"shortname VARCHAR NOT NULL, "
"prefix VARCHAR, "
"cqz INTEGER NOT NULL, "
"ituz INTEGER NOT NULL, "
"regionalgroup VARCHAR, "
"regionalid INTEGER, "
"start_date DATETIME, "
"end_date DATETIME, "
"deleted VARCHAR, "
"UNIQUE (id, shortname, name), "
"FOREIGN KEY (cqz) REFERENCES entity, "
"FOREIGN KEY (ituz) REFERENCES entity, "
"FOREIGN KEY (dxcc) REFERENCES entity)");
QString delS = QString();
delS = "DROP TABLE IF exists " + table;
execQuery(Q_FUNC_INFO, delS);
//qDebug() << "DataBase::createTableSubdivision - END" ;
return execQuery(Q_FUNC_INFO, stringQuery);
//qDebug() << "DataBase::createTableSubdivision - END" ;
}
int DataBase::getBandIdFromName(const QString &b)
{
//qDebug() << "DataBase::getBandIdFromName: " << b ;
QString band = b.toUpper();
QSqlQuery query;
if (isValidBand(band))
{
QString queryString = QString("SELECT id FROM band WHERE name='%1'").arg(band);
bool sqlOK = query.exec(queryString);
if (sqlOK)
{
query.next();
if ( query.isValid() )
{
//qDebug() << "DataBase::getBandIdFromName: OK" << QString::number((query.value(0)).toInt()) ;
int v = (query.value(0)).toInt();
query.finish();
return v;
}
else
{
//qDebug() << "DataBase::getBandIdFromName: NOK 1" ;
query.finish();
return -1;
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
return -2;
}
//qDebug() << "DataBase::getBandIdFromName: NOK 3" ;
}
else
{
//qDebug() << "DataBase::getBandIdFromName: BAND NOT VALID: " << band ;
}
//qDebug() << "DataBase::getBandIdFromName: Will return -3 from: " << band ;
query.finish();
return -3;
}
int DataBase::getModeIdFromName(const QString &b)
{
//qDebug() << "DataBase::getModeIdFromName: " << b ;
QSqlQuery query;
if (isValidMode(b, false))
{
QString queryString = QString("SELECT id FROM mode WHERE name='%1'").arg(b);
//qDebug() << "DataBase::getModeIdFromName: queryString: " << queryString ;
bool sqlOK = query.exec(queryString);
if (sqlOK)
{
query.next();
if ( query.isValid() )
{
//qDebug() << "DataBase::getModeIdFromName: OK" << QString::number((query.value(0)).toInt()) ;
return (query.value(0)).toInt();
}
else
{
//qDebug() << "DataBase::getModeIdFromName: NOK 1" ;
query.finish();
return -1;
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
}
}
//qDebug() << "DataBase::getModeIdFromName: NOK 3" ;
query.finish();
return -1;
}
int DataBase::getModeIdFromSubMode(const QString &b)
{
//qDebug() << "DataBase::getModeIdFromSubMode: " << b ;
QSqlQuery query;
QString queryString = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
/*
if (_tmp)
{
queryString = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(b);
}
else
{
queryString = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
}
*/
bool sqlOK = query.exec(queryString);
if (sqlOK)
{
query.next();
if (query.isValid())
{
//qDebug() << "DataBase::getModeIdFromName: OK - Mode: " << b << " - " << (query.value(0)).toString() ;
return (query.value(0)).toInt();
}
else
{
//qDebug() << "DataBase::getModeIdFromName: NOK 1" << "-------- END";
query.finish();
return -1;
}
}
else
{
//qDebug() << "DataBase::getModeIdFromName: NOK 2" << "-------- END";
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
return -1;
}
//qDebug() << "DataBase::getModeIdFromName: NOK 3" << "-------- END";
//query.finish();
//return -1;
}
QString DataBase::getBandNameFromNumber(const int _n)
{
//qDebug() << "DataBase::getBandNameFromNumber: " << QString::number(_n) ;
QSqlQuery query;
QString queryString = QString("SELECT name FROM band WHERE id='%1'").arg(_n);
bool sqlOK = query.exec(queryString);
if (sqlOK)
{
query.next();
if ( query.isValid() )
{
if ( isValidBand((query.value(0)).toString()) )
{
//qDebug() << "DataBase::getBandNameFromNumber: " << (query.value(0)).toString() << "-------- END" ;
return (query.value(0)).toString();
}
else
{
//qDebug() << "DataBase::getBandNameFromNumber: " << "-------- END-1" ;
query.finish();
return QString();
}
}
else
{
//qDebug() << "DataBase::getBandNameFromNumber: " << "-------- END-2" ;
query.finish();
return QString();
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
}
query.finish();
return QString();
}
QString DataBase::getModeNameFromNumber(const int _n, bool _tmp)
{
//TODO May fail to identify the sumbode(mode/modetemp... (Review STEP-2 o 3)
//qDebug() << "DataBase::getModeNameFromNumber: " << QString::number(_n) ;
QSqlQuery query;
QString queryString;
if (_tmp)
{
queryString = QString("SELECT name FROM modetemp WHERE id='%1'").arg(_n);
}
else
{
queryString = QString("SELECT name FROM mode WHERE id='%1'").arg(_n);
}
bool sqlOK = query.exec(queryString);
if (!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
}
query.next();
//qDebug() << "DataBase::getModeNameFromNumber: " << QString::number(_n) <<" - " << isValidMode((query.value(0)).toString(), _tmp) ;
if ( query.isValid() )
{
//qDebug() << "DataBase::getModeNameFromNumber: ------ END-1" ;
return (query.value(0)).toString();
/* In a version when I change the mode table to include submode, this comparison may need to be checked in both versions
* at once, failing the query as old version was not having the column submode
*
if ( isValidMode((query.value(0)).toString(), _tmp))
{
//qDebug() << "DataBase::getModeNameFromNumber - Found: " << (query.value(0)).toString() ;
return (query.value(0)).toString();
}
else
{
//qDebug() << "DataBase::getModeNameFromNumber - Not Valid Mode: " << (query.value(0)).toString() ;
return QString();
}
*/
}
else
{
//qDebug() << "DataBase::getModeNameFromNumber - Not Valid record" ;
//qDebug() << "DataBase::getModeNameFromNumber: ------ END-2" ;
query.finish();
return QString();
}
}
QString DataBase::getSubModeNameFromNumber(const int _n, bool _tmp)
{
//qDebug() << "DataBase::getSubModeNameFromNumber: " << QString::number(_n) ;
QSqlQuery query;
QString queryString;
if (_tmp)
{
queryString = QString("SELECT submode FROM modetemp WHERE id='%1'").arg(_n);
}
else
{
queryString = QString("SELECT submode FROM mode WHERE id='%1'").arg(_n);
}
bool sqlOk = query.exec(queryString);
//qDebug() << "DataBase::getSubModeNameFromNumber - query: " << query.lastQuery() ;
if (sqlOk)
{
if (query.next())
{
if ( query.isValid() )
{
if ( isValidMode((query.value(0)).toString(), _tmp) )
{
//qDebug() << "DataBase::getSubModeNameFromNumber: RETURN: " << (query.value(0)).toString() ;
return (query.value(0)).toString();
}
else
{
//qDebug() << "DataBase::getSubModeNameFromNumber: NO valid mode - END" ;
query.finish();
return QString();
}
}
else
{
//qDebug() << "DataBase::getSubModeNameFromNumber: query not valid - END" ;
query.finish();
return QString();
}
}
else
{
//qDebug() << "DataBase::getSubModeNameFromNumber: query not next - END" ;
query.finish();
return QString();
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::getSubModeNameFromNumber: SQL FALSE - END" ;
query.finish();
return QString();
}
//qDebug() << "DataBase::getSubModeNameFromNumber: - END-X" ;
//query.finish();
//return QString();
}
bool DataBase::isValidBand (const QString &b)
{
//qDebug() << "DataBase::isValidBand: " << b ;
if (b.length()<1)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
QString _band = b.toUpper();
QSqlQuery query;
QString stringQuery = QString("SELECT id FROM band WHERE name='%1'").arg(_band);
bool sqlOK = query.exec(stringQuery);
if (sqlOK)
{
query.next();
if (query.isValid())
{
query.finish();
return true;
}
else
{
query.finish();
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
}
//emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
bool DataBase::isValidMode (const QString &b, const bool _tmp)
{
//qDebug() << "DataBase::isValidMode: " << b ;
QString stringQuery;
if (b.length()<2)
{
//qDebug() << "DataBase::isValidMode: (length<2) FALSE" ;
//emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
if (_tmp)
{
stringQuery = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(b);
}
else
{
stringQuery = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
}
//stringQuery = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
QSqlQuery query;
bool sqlOK = query.exec(stringQuery);
if (!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
}
query.next();
return query.isValid();
}
bool DataBase::isValidBandNumber (const int b)
{
//qDebug() << "DataBase::isValidBandNumber: " << QString::number(b);
return isValidBand(getBandNameFromNumber(b));
}
bool DataBase::isValidModeNumber (const int b)
{
//qDebug() << "DataBase::isValidModeNumber: " << QString::number(b);
return isValidMode(getModeNameFromNumber(b, false), false);
}
int DataBase::getBandIdFromFreq(const QString &fr)
{
//qDebug() << "DataBase::getBandIdFromFreq: " << fr ;
//Freq should be in MHz
QString queryString = QString("SELECT id FROM band WHERE lower <= '%1' and upper >= '%2'").arg(fr, fr);
QSqlQuery query;
bool sqlOK = query.exec(queryString);
//qDebug() << "DataBase::getBandIdFromFreq: Query: " << query.lastQuery() ;
if (sqlOK)
{
//qDebug() << "DataBase::getBandIdFromFreq: Query OK" ;
query.next();
if (query.isValid())
{
//qDebug() << "DataBase::getBandIdFromFreq: Query OK - END" ;
return (query.value(0)).toInt();
}
else
{
//qDebug() << "DataBase::getBandIdFromFreq: Valid NOK - END" ;
query.finish();
return -1;
}
}
else
{
//qDebug() << "DataBase::getBandIdFromFreq: Query NOK" ;
//qDebug() << "DataBase::getBandIdFromFreq: Query NOK: " << query.lastError().text() ;
//qDebug() << "DataBase::getBandIdFromFreq: Query NOK: " << query.lastError().nativeErrorCode() ;
if (query.lastError().isValid())
{
//qDebug() << "DataBase::getBandIdFromFreq: Query NOK - Error VALID" ;
}
else
{
//qDebug() << "DataBase::getBandIdFromFreq: Query NOK - Error NOT-VALID" ;
}
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
queryErrorManagement(Q_FUNC_INFO, query.lastError().text(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
return -2;
}
//qDebug() << "DataBase::getBandIdFromFreq: END-X" ;
//query.finish();
//return -3;
}
bool DataBase::isThisFreqInBand(const QString &b, const QString &fr)
{//Freq should be in MHz
//qDebug() << Q_FUNC_INFO << ": " << b << "/" << fr ;
if (b.length()<2)
{
//qDebug() << Q_FUNC_INFO << ": returning false" ;
return false;
}
int bandNf = getBandIdFromFreq(fr);
int bandN = getBandIDFromName2(b);
//qDebug() << Q_FUNC_INFO << ": (b/f)" << QString::number(bandN) << "/" << QString::number(bandNf) ;
if (bandNf == bandN)
{
//qDebug() << Q_FUNC_INFO << ": OK " << b << "/" << fr ;
return true;
}
else
{
//qDebug() << Q_FUNC_INFO << ": NOK " << b << "/" << fr ;
//emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
bool DataBase::unMarkAllQSO()
{
//qDebug() << "DataBase::unMarkAllQSO" ;
QString stringQuery = QString("UPDATE log SET marked = 'N' WHERE 1");
return execQuery(Q_FUNC_INFO, stringQuery);
}
bool DataBase::updateIfNeeded()
{
//qDebug() << "DataBase::updateIfNeeded - Version: " << QString::number(dbVersion) ;
/**************************************************************************************
* This function should call to bool updateToXXX () being XXX dbVersion and
*
*/
QSqlQuery query;
QString stringQuery = QString("SELECT MAX (dbversion) FROM softwarecontrol");
bool sqlOK = query.exec(stringQuery);
if (sqlOK)
{
query.next();
latestReaded = (query.value(0)).toFloat();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
query.finish();
//qDebug() << "DataBase::updateIfNeeded - LatestReaded: " << QString::number(latestReaded) ;
if (latestReaded >= dbVersion)
{ // DB is updated, no update is needed
//qDebug() << "DataBase::updateIfNeeded - DB updated (no need to update anything!) " ;
return true;
}
else
{ // DB is outdated. We need to update!!
//qDebug() << "DataBase::updateIfNeeded - DB outdated... upgrade starts now! " ;
QMessageBox msgBox;
msgBox.setWindowTitle("KLog");
msgBox.setText( QObject::tr("KLog DB needs to be upgraded."));
msgBox.setInformativeText( QObject::tr("Do you want to upgrade it now?") + "\n"+ QObject::tr("If DB is not upgraded KLog may not work properly."));
msgBox.setStandardButtons(QMessageBox::Apply | QMessageBox::Discard);
msgBox.setDefaultButton(QMessageBox::Apply);
msgBox.setIcon(QMessageBox::Warning);
msgBox.raise();
//this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Apply:
// Save was clicked
backupB4Update();
break;
case QMessageBox::Discard:
// Discard was clicked
break;
default:
// should never be reached
//qDebug() << "DataBase::updateIfNeeded - FALSE - CHECK IF SEEN, shoud not be here! - END " ;
//emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
//break;
}
}
// If the DB needs to be updated... we update it! :-)
//qDebug() << "DataBase::updateIfNeeded - END!" ;
return true;
}
void DataBase::backupB4Update()
{
//qDebug() << "DataBase::backupB4Update - Start" ;
QMessageBox msgBox;
msgBox.setWindowTitle("KLog backup");
msgBox.setText( QObject::tr("Upgrading software may potentially cause problems. Backing up your DB, before upgrading, is always a good idea."));
msgBox.setInformativeText( QObject::tr("Do you want to backup your DB now?") );
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
msgBox.setIcon(QMessageBox::Warning);
msgBox.raise();
//this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Yes:
// Save was clicked
logBackup();
break;
case QMessageBox::No:
// NO backup was selected
updateToLatest();
break;
}
//qDebug() << "DataBase::backupB4Update - END" ;
}
void DataBase::logBackup()
{
//qDebug() << "DataBase::logBackup - Start" ;
QFile DBFile(util->getKLogDBFile());
QString newFile = util->getKLogDBBackupFile();
bool copied = DBFile.copy(newFile);
//qDebug() << "DataBase::logBackup copy: " << newFile ;
QMessageBox msgBox;
msgBox.setWindowTitle("KLog DB backup");
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
if (copied)
{
//qDebug() << "DataBase::logBackup - DB backup was OK" ;
msgBox.setText( QObject::tr("The backup finished successfully."));
msgBox.setInformativeText( QObject::tr("You can find the backup in this file: %1").arg(newFile) );
msgBox.setIcon(QMessageBox::Information);
msgBox.raise();
msgBox.exec();
updateToLatest();
}
else
{
//qDebug() << "DataBase::logBackup - DB backup was NOK" ;
msgBox.setText( QObject::tr("The backup was not properly done."));
msgBox.setInformativeText( QObject::tr("You will be sent back to the starting point."));
msgBox.setIcon(QMessageBox::Warning);
msgBox.raise();
msgBox.exec();
updateIfNeeded();
}
/*
QMessageBox msgBox;
msgBox.setWindowTitle("KLog DB backup");
msgBox.setText( QObject::tr("KLog is backing up the DB to a file..."));
msgBox.setInformativeText( QObject::tr("Did the DB backup worked well?") );
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
msgBox.setIcon(QMessageBox::Information);
msgBox.raise();
//this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Yes:
// Save was clicked
updateToLatest();
break;
case QMessageBox::No:
// NO backup was DONE
msgBox.setWindowTitle("KLog DB backup not done.");
msgBox.setText( QObject::tr("KLog DB backup was not done."));
msgBox.setInformativeText( QObject::tr("You will be redirected to the first message.") );
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
msgBox.setIcon(QMessageBox::Warning);
msgBox.raise();
msgBox.exec();
updateIfNeeded();
break;
default:
// should never be reached
//qDebug() << "DataBase::backupB4Update - FALSE - CHECK IF SEEN, shoud not be here! - END " ;
//lse;
//break;
}
*/
//qDebug() << "DataBase::logBackup - END" ;
}
bool DataBase::createTheBandQuickReference()
{
/*
KEY Value
QHash bandIDHash;
QHash modeIDHash;
QHash IDBandHash;
QHash IDModeHash
QHash freqBandIdHash;
*/
//qDebug() << "DataBase::createTheBandQuickReference: " ;
QString st = "NULL";
int in = 0;
QString stringQuery = QString("SELECT id, name, lower FROM band");
QString fr = QString();
bandIDHash.clear();
IDBandHash.clear();
QSqlQuery query;
bool sqlOK = query.exec(stringQuery);
if (!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
while (query.next())
{
if (query.isValid())
{
st = (query.value(1)).toString();
in = (query.value(0)).toInt();
fr = (query.value(2)).toString();
bandIDHash.insert(st, in );
IDBandHash.insert(in, st);
freqBandIdHash.insert(in, fr);
//qDebug() << "DataBase::createTheBandQuickReference: " << st <<"/" << QString::number(in);
}
else
{
//qDebug() << "DataBase::createTheBandQuickReference: Query not valid -'RETURN FALSE - END" ;
// QMessageBox::warning(0, QObject::tr("Database Error (DataBase::createTheBandQuickReference)"),
// query.lastError().text());
query.finish();
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
//TODO: Manage this error, in case the query is NOK.
}
//qDebug() << "DataBase::createTheBandQuickReference: Go for the next one!" ;
}
query.finish();
//qDebug() << "DataBase::createTheBandQuickReference: END" ;
return true;
}
bool DataBase::createTheModeQuickReference()
{
/*
KEY Value
QHash modeIDHash;
QHash IDModeHash
*/
//qDebug() << "DataBase::createTheModeQuickReference: " ;
if (getDBVersion().toFloat()<0.01f)
{
// If the version is not updated we don't create the reference
return true;
}
QString st = QString();
QString sm = QString();
int in = 0;
modeIDHash.clear();
IDModeHash.clear();
subModeIDHash.clear();
IDSubModeHash.clear();
QString stringQuery = QString("SELECT id, name, submode FROM mode");
QSqlQuery query;
bool sqlOK = query.exec(stringQuery);
if (!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
while (query.next())
{
if (query.isValid())
{
in = (query.value(0)).toInt();
st = (query.value(1)).toString();
sm = (query.value(2)).toString();
modeIDHash.insert(st, in );
IDModeHash.insert(in, st);
subModeIDHash.insert(sm, in );
IDSubModeHash.insert(in, sm);
//qDebug() << "DataBase::createTheModeQuickReference: " << st <<"/" << QString::number(in);
}
else
{
//qDebug() << "DataBase::createTheModeQuickReference: Query not valid - END" ;
//QMessageBox::warning(0, QObject::tr("Database Error (DataBase::createTheModeQuickReference)"),
// query.lastError().text());
query.finish();
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
//TODO: Manage this error, in case the query is NOK.
}
}
query.finish();
//qDebug() << "DataBase::createTheModeQuickReference: END" ;
return true;
}
int DataBase::getBandIDFromName2(const QString &b)
{//KEY, value
//name, id
/*
KEY Value
QHash bandIDHash;
QHash modeIDHash;
QHash IDBandHash;
QHash IDModeHash
*/
//qDebug() << "DataBase::getBandIDFromName2: " << b ;
//qDebug() << "DataBase::getBandIDFromName2: This line should be the last one... " ;
return getBandIdFromName(b);
//qDebug() << "DataBase::getBandIDFromName2: CHECK IF THIS LINE IS SEEN" ;
/*
if (b.length()<1)
{
return -3;
}
if (bandIDHash.contains(b))
{
//qDebug() << "DataBase::getBandIDFromName2: " << b << ":" << bandIDHash.value(b) ;
return bandIDHash.value(b);
}
else
{
//qDebug() << "DataBase::getBandIDFromName2: Contains - False" ;
return -1;
}
//qDebug() << "DataBase::getBandIDFromName2: Safety exit" ;
*/
}
int DataBase::getModeIDFromName2(const QString &b)
{
//qDebug() << "DataBase::getModeIDFromName2: " << b ;
return getModeIdFromSubMode(b);
/*
if (b.length()<2)
{
//qDebug() << "DataBase::getModeIDFromName2: END -3" ;
return -3;
}
if (modeIDHash.contains(b))
{
//qDebug() << "DataBase::getModeIDFromName2: END - " << b << ":" << modeIDHash.value(b) ;
return modeIDHash.value(b);
}
else
{
//qDebug() << "DataBase::getModeIDFromName2: Contains - False - END" ;
return -1;
}
//qDebug() << "DataBase::getModeIDFromName2: Safety exit - END" ;
*/
}
int DataBase::getSubModeIDFromName2(const QString &b)
{
//qDebug() << "DataBase::getSubModeIDFromName2: " << b ;
return getModeIdFromSubMode(b);
}
QString DataBase::getBandNameFromID2(const int _i)
{
//qDebug() << "DataBase::getBandNameFromid2: " << QString::number(_i) ;
return getBandNameFromNumber(_i);
/*
if (IDBandHash.contains(_i))
{
//qDebug() << "DataBase::getBandNameFromid2: END OK" ;
return IDBandHash.value(_i);
}
else
{
//qDebug() << "DataBase::getBandNameFromid2: END-1" ;
return "-1";
}
*/
//qDebug() << "DataBase::getBandNameFromid2: END-2" ;
//return "-2";
}
QString DataBase::getModeNameFromID2(const int _i)
{
//qDebug() << "DataBase::getModeNameFromId2: " << QString::number(_i) ;
return getSubModeNameFromNumber(_i);
/*
if (IDModeHash.contains(_i))
{
//qDebug() << "DataBase::getModeNameFromId2: END OK - " << IDModeHash.value(_i) ;
return IDModeHash.value(_i);
}
else
{
//qDebug() << "DataBase::getModeNameFromId2: END-1" ;
return "-1";
}
*/
//qDebug() << "DataBase::getModeNameFromId2: END-2" ;
//return "-2";
}
QString DataBase::getSubModeNameFromID2(const int _i)
{
//qDebug() << "DataBase::getSubModeNameFromId2: " << QString::number(_i) ;
return getSubModeNameFromNumber(_i);
/*
if (IDSubModeHash.contains(_i))
{
//qDebug() << "DataBase::getSubModeNameFromId2: END OK - " << IDModeHash.value(_i) ;
return IDSubModeHash.value(_i);
}
else
{
//qDebug() << "DataBase::getSubModeNameFromId2: END-1" ;
return "-1";
}
//qDebug() << "DataBase::getSubModeNameFromId2: END-2" ;
*/
}
bool DataBase::createBandModeMaps()
{
//qDebug() << "DataBase::createBandModeMaps" ;
bool b = false;
bool m = false;
//return (b && m);
if (isTheDBCreated())
{
b = createTheBandQuickReference();
m = createTheModeQuickReference();
//qDebug() << "DataBase::createBandModeMaps - isTheDbCreated TRUE" ;
if (!b)
{
//emit debugLog(Q_FUNC_INFO, "1", 7);
}
if (!m)
{
//emit debugLog(Q_FUNC_INFO, "2", 7);
}
//qDebug() << "DataBase::createBandModeMaps END 1" ;
return (b && m);
}
else
{
//qDebug() << "DataBase::createBandModeMaps - isTheDbCreated FALSE" ;
//emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
//return false;
//qDebug() << "DataBase::createBandModeMaps END" ;
}
QString DataBase::getFreqFromBandId(const int _i)
{
//qDebug() << "DataBase::getFreqFromBandId" ;
if (freqBandIdHash.contains(_i))
{
//qDebug() << "DataBase::getFreqFromBandId OK END" ;
return freqBandIdHash.value(_i);
}
else
{
//qDebug() << "DataBase::getFreqFromBandId END-1" ;
return "-1.0";
}
//qDebug() << "DataBase::getFreqFromBandId END-2" ;
//return "-2.0";
}
/*
int DataBase::getLogTypeNumber(const QString &_logType)
{
//qDebug() << "DataBase::getLogTypeNumber: " << _logType ;
QSqlQuery query;
QString queryString = QString("SELECT id FROM supportedcontests WHERE name='%1'").arg(_logType);
bool sqlOK = query.exec(queryString);
if(!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
}
query.next();
if ( query.isValid() )
{
return (query.value(0)).toInt();
}
else
{
query.finish();
return -1;
}
//query.finish();
//return -2;
}
QString DataBase::getLogTypeName(const int _logType)
{
//qDebug() << "DataBase::getLogTypeName: " << QString::number(_logType) ;
QSqlQuery query;
QString queryString = QString("SELECT name FROM supportedcontests WHERE id='%1'").arg(_logType);
bool sqlOK = query.exec(queryString);
if(!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
}
query.next();
if ( query.isValid() )
{
return (query.value(0)).toString();
}
else
{
query.finish();
return QString();
}
//query.finish();
//return QString();
}
*/
bool DataBase::updateToLatest()
{
/*
* With the DB updates, the function that is called from here should be also updated.
* The updateXXX are recursive calls that calls the previous one.
*
*/
//qDebug() << "DataBase::updateToLatest " ;
if (requiresManualUpgrade())
{
//qDebug() << "DataBase::updateToLatest requires" ;
exit(1);
//return false;
}
return updateTo025();
}
bool DataBase::requiresManualUpgrade()
{
// If DB version <= 0.006, DB can't be upgraded automatically.
// Recomendation is to export to ADIF in an olf KLog version (before KLog 1.1);
// Install new KLog version
// import ADIF file
float ver = getDBVersion().toFloat();
//qDebug() << "DataBase::requiresManualUpgrade - ver: " << QString::number(ver) ;
if (ver >= 0.007f)
{
//qDebug() << "DataBase::requiresManualUpgrade false" ;
return false;
}
else
{
//qDebug() << "DataBase::requiresManualUpgrade true" ;
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setWindowTitle(QObject::tr("KLog - DB can't be updated automatically"));
QString aux = QObject::tr("You are upgrading from a too old KLog version and this upgrade can't be upgraded automatically from that version.");
QString aux2 = QObject::tr("The process to upgrade is:\n- Using an old KLog version export your log to ADIF.\n- Remove your logbook.dat file from your KLog folder.\n- Install the new KLog version.\n- Import your ADIF file.\n\nKLog will finish when you click on OK.");
msgBox.setText(aux);
msgBox.setDetailedText(aux2);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
msgBox.exec();
}
return true;
}
bool DataBase::updateTo003()
{// Updates the DB to 0.0.3
/*
* This function should be used as a template to create the all the update functions implementing the needed changes
* in the dB to update from one version to the following one.
*
* // dbVersion shows the DB version that is being deployed
* // latestReaded shows the DB version that is currently deployed.
*i.e.:
* QString stringQuery = QString ("ALTER TABLE award_enumeration ADD COLUMN dxcc INTEGER;");
*
*/
//qDebug() << "DataBase::updateTo003: latestRead: " << QString::number(latestReaded) ;
bool IAmIn003 = false;
bool IAmIn002 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.003f)
{
//IAmIn003 = true;
return true;
}
else
{
IAmIn003 = false;
}
while (!IAmIn003 && !ErrorUpdating)
{
while (!IAmIn002 && !ErrorUpdating)
{
//IAmIn002 = updateTo002();
IAmIn002 = true;
}
if (ErrorUpdating)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
//DO ALL THE TASKS TO BE IN 0.003 from 0.002 HERE and set ErrorUpdating if it is not possible.
IAmIn003 = true;
}
return IAmIn003;
}
bool DataBase::updateTo004()
{// Updates the DB to 0.0.41
//qDebug() << "DataBase::updateTo004: latestRead: " << getDBVersion() ;
//qDebug() << "DataBase::updateTo004: latestRead: " << QString::number(latestReaded) ;
bool IAmIn004 = false;
bool IAmIn003 = false;
QString stringQuery = QString();
QSqlQuery query;
bool sqlOk = false;
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.004f)
{
//qDebug() << "DataBase::updateTo004: - I am in 004" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTo004: - I am not in 004" ;
IAmIn004 = false;
}
while (!IAmIn004)
{
//qDebug() << "DataBase::updateTo004: - And I am not in 004 nor ErrorUpdating" ;
while (!IAmIn003)
{
//qDebug() << "DataBase::updateTo004: - And I am not in 003" ;
//IAmIn002 = updateTo002();
IAmIn003 = true;
}
//qDebug() << "DataBase::updateTo004: - And I am in 003" ;
sqlOk = updateDBVersion(softVersion, "0.004");
//qDebug() << "DataBase::updateTo004: - Update Version" ;
if (sqlOk)
{ // Version updated
//qDebug() << "DataBase::updateTo004: - Update OK" ;
sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE award_enumeration");
}
else
{ // Version not updated
//qDebug() << "DataBase::updateTo004: - Update NOK" ;
}
//DO ALL THE TASKS TO BE IN 0.004 from 0.003 HERE and set ErrorUpdating if it is not possible.
//qDebug() << "DataBase::updateTo004: - IAmIn004 = true" ;
IAmIn004 = true;
}
if (IAmIn004)
{
//qDebug() << "DataBase::updateTo004: - Return... TRUE" ;
}
else
{
//qDebug() << "DataBase::updateTo004: - Return... FALSE" ;
}
//qDebug() << "DataBase::updateTo004: UPDATED OK!" ;
return IAmIn004;
}
bool DataBase::updateTo005()
{// Updates the DB to 0.0.5
//qDebug() << "DataBase::updateTo005: latestRead: " << getDBVersion() ;
bool IAmIn005 = false;
bool IAmIn004 = false;
bool ErrorUpdating = false;
QString stringQuery = QString();
QSqlQuery query;
QMessageBox msgBox;
msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
msgBox.setIcon(QMessageBox::Information);
//int errorCode;
bool sqlOk = false;
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.005f)
{
//qDebug() << "DataBase::updateTo005 - Already in 005" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTo005 - 005 update false" ;
IAmIn005 = false;
}
while (!IAmIn005 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo005 - I am not in 005" ;
while (!IAmIn004 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo005 - I am not in 004" ;
IAmIn004 = updateTo004();
}
//qDebug() << "DataBase::updateTo005 - I am in 004" ;
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo005 - 005 update false2" ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
sqlOk = updateDBVersion(softVersion, "0.005");
if (sqlOk)
{ // Version updated
if (recreateContestData())
{
//qDebug() << "DataBase::updateTo005 - recreateContestData OK" ;
sqlOk = execQuery(Q_FUNC_INFO, "DROP table logs");
sqlOk = createTableLogs(true);
if (!sqlOk)
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateTo005 - logs table do not created" ;
}
if (howManyQSOsInLog(0)>0)
{ // If the user has QSOs that were added with previous versions...
// We need to create a new log and rename all QSOs to that QSO.
//stringQuery = QString("UPDATE log SET lognumber='1' WHERE lognumber='0'");
msgBox.setText(QObject::tr("KLog has detected a previous log in the DB. All data will be migrated to a newly created DX type log for you."));
msgBox.exec();
if (!execQuery(Q_FUNC_INFO, "UPDATE log SET lognumber='1' WHERE lognumber='0'"))
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//showError(QObject::tr("QSOs not updated to main log"));
//qDebug() << "DataBase::updateTo005 - QSOs not updated to main log" ;
}
QString dateString = (QDate::currentDate()).toString("yyyy-MM-dd");
QString callToUse = QString();
bool ok;
//QString text;
//text = QInputDialog::getText(this, QObject::tr("Station Callsign"), QObject::tr("Enter the Station Callsign you want to use in the imported log:"), QLineEdit::Normal, QObject::tr("N0CALL"), &ok);
QString text = (QInputDialog::getText(nullptr, QObject::tr("KLog: Enter Station callsign"),
QObject::tr("Enter the station callsign used in this log"), QLineEdit::Normal,
QObject::tr("Station Callsign"), &ok)).toUpper();
text = text.toUpper();
if (ok && !text.isEmpty())
{
callToUse = text;
}
else
{
callToUse = "N0CALL";
}
stringQuery = QString("INSERT INTO logs (logdate, stationcall, logtype, logtypen) values('%1','%2','DX', '1')").arg(dateString).arg(callToUse);
sqlOk = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOk)
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//showError(QObject::tr("New Log not created"));
//qDebug() << "DataBase::updateTo005 - New Log not created" ;
//qDebug() << "DataBase::clearLog: Log deleted FAILED" ;
}
}
IAmIn005 = true;
}
else
{
//qDebug() << "DataBase::updateTo005 - recreateContestData FAILED" ;
ErrorUpdating = true;
}
}
else
{ // Version not updated
//qDebug() << "DataBase::updateTo005 - 005 update false6" ;
ErrorUpdating = true;
}
}
//qDebug() << "DataBase::updateTo005 - 005 updated 3" ;
//TODO: Delete the table and recreate it
if (IAmIn005)
{
msgBox.setText(QObject::tr("All the data was migrated correctly. You should now go to Setup->Preferences->Logs to check that everything is okay."));
msgBox.exec();
}
else
{
// emit debugLog(Q_FUNC_INFO, "2", 7);
}
//qDebug() << "DataBase::updateTo005 - I am in 005 already!! " ;
//qDebug() << "DataBase::updateTo005: UPDATED OK!" ;
return IAmIn005;
}
bool DataBase::recreateSatelliteData()
{
//qDebug() << "DataBase::recreateSatelliteData" ;
QSqlQuery query;
if (isTheTableExisting("satellites"))
{
if (execQuery(Q_FUNC_INFO, "DROP TABLE satellites"))
{
if (createTableSatellites(true))
{
//qDebug() << "DataBase::recreateSatelliteData SAT table created" ;
return populateTableSatellites(true);
}
else
{
//qDebug() << "DataBase::recreateSatelliteData SAT table NOT created" ;
}
}
else
{
//qDebug() << "DataBase::recreateSatelliteData execQuery FAILED" ;
}
}
else
{
if (createTableSatellites(true))
{
//qDebug() << "DataBase::recreateSatelliteData SAT table created" ;
return populateTableSatellites(true);
}
else
{
//qDebug() << "DataBase::recreateSatelliteData SAT table NOT created" ;
}
}
//qDebug() << "DataBase::recreateSatelliteData END FALSE" ;
return false;
}
bool DataBase::recreateContestData()
{
//qDebug() << "DataBase::recreateContestData" ;
if (isTheTableExisting("contest"))
{
QSqlQuery query;
bool sqlOk = false;
sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE contest");
if (sqlOk)
{
if (createTableContest())
{
return populateContestData();
}
}
}
else
{
if (createTableContest())
{
return populateContestData();
}
}
return false;
}
bool DataBase::recreateSupportedContest()
{
//qDebug() << "DataBase::recreateSupportedContest" ;
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists supportedcontests");
if (isTheTableExisting("supportedcontests"))
{
QSqlQuery query;
bool sqlOk = false;
sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE supportedcontests");
if (sqlOk)
{
//qDebug() << "DataBase::recreateSupportedContest SQLOK" ;
if (createTableSupportedContest())
{
//qDebug() << "DataBase::recreateSupportedContest - createTable OK" ;
return populateTableSupportedContest();
}
else
{
//qDebug() << "DataBase::recreateSupportedContest createTableSupportContest FALSE" ;
return false;
}
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
}
}
else
{
if (createTableSupportedContest())
{
//qDebug() << "DataBase::recreateSupportedContest - createTable OK" ;
return populateTableSupportedContest();
}
else
{
//qDebug() << "DataBase::recreateSupportedContest createTableSupportContest FALSE" ;
return false;
}
}
//qDebug() << "DataBase::recreateSupportedContest - FALSE end" ;
return false;
}
bool DataBase::recreatePropModes()
{
//qDebug() << "DataBase::recreatePropModes" ;
if (isTheTableExisting("prop_mode_enumeration"))
{
//qDebug() << "DataBase::recreatePropModes: Table Exist" ;
bool sqlOk = false;
sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE prop_mode_enumeration");
if (sqlOk)
{
//qDebug() << "DataBase::recreatePropModes SQLOK" ;
if (createTablePropModes())
{
//qDebug() << "DataBase::recreatePropModes - createTable OK" ;
if (populatePropagationModes())
{
//qDebug() << "DataBase::recreatePropModes - populatePropModes OK" ;
return true;
}
else
{
//qDebug() << "DataBase::recreatePropModes - populatePropModes NOK" ;
return false;
}
}
else
{
//qDebug() << "DataBase::recreatePropModes createTableSupportContest FALSE-1" ;
return false;
}
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::recreatePropModes - prop_mode_enumeration table has not been dropped" ;
//qDebug() << "DataBase::recreatePropModes : Table creation FAILED" ;
}
}
else
{
//qDebug() << "DataBase::recreatePropModes: Table does NOT Exist" ;
if (createTablePropModes())
{
//qDebug() << "DataBase::recreatePropModes - createTable OK" ;
if (populatePropagationModes())
{
//qDebug() << "DataBase::recreatePropModes - populatePropModes OK" ;
return true;
}
else
{
//qDebug() << "DataBase::recreatePropModes - populatePropModes NOK" ;
return false;
}
}
else
{
//qDebug() << "DataBase::recreatePropModes createTableSupportContest FALSE-2" ;
}
}
//qDebug() << "DataBase::recreatePropModes - FALSE end" ;
return false;
}
bool DataBase::createTableLogs(const bool real)
{ // NoTmp = false => TMP data table to operate and be deleted afterwards
//Creating the Sats DB to be able to include satellites to the LOTW
//qDebug() << "DataBase::createTableLogs" ;
QString stringQuery = QString();
//QSqlQuery query;
if (real)
{
//qDebug() << "DataBase::createTableLogs - logs" ;
stringQuery = "CREATE TABLE logs" ;
}
else
{
//qDebug() << "DataBase::createTableLogs - logstemp" ;
stringQuery = "CREATE TABLE logstemp" ;
}
stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"logdate VARCHAR(10), "
"stationcall VARCHAR(15) NOT NULL, "
"operators VARCHAR, "
"comment VARCHAR, "
"logtype VARCHAR, "
"logtypen INTEGER, "
"FOREIGN KEY (logtypen) REFERENCES supportedcontests(id),"
"FOREIGN KEY (logtype) REFERENCES supportedcontests(name))");
//qDebug() << "DataBase::createTableLogs - END" ;
return execQuery(Q_FUNC_INFO, stringQuery);
}
bool DataBase::createTablePropModes()
{
//qDebug() << "DataBase::createTablePropModes" ;
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists prop_mode_enumeration");
return execQuery(Q_FUNC_INFO, "CREATE TABLE prop_mode_enumeration (id INTEGER PRIMARY KEY AUTOINCREMENT, shortname VARCHAR(8), name VARCHAR(55) )");
}
bool DataBase::createTableSupportedContest()
{
//qDebug() << "DataBase::createTableSupportedContest" ;
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists supportedcontests");
QString st = QString("CREATE TABLE supportedcontests ("
"id INTEGER PRIMARY KEY, "
"longname VARCHAR,"
"name VARCHAR)");
return execQuery(Q_FUNC_INFO, st);
}
bool DataBase::createTableContest()
{
//qDebug() << "DataBase::createTableContest" ;
//QSqlQuery query;
createTableSupportedContest();
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists contest");
execQuery(Q_FUNC_INFO, "CREATE TABLE contest ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"contest INTEGER NOT NULL,"
"catoperator INTEGER NOT NULL,"
"catassisted INTEGER NOT NULL,"
"catpower INTEGER NOT NULL,"
"catband INTEGER NOT NULL,"
"catoverlay INTEGER NOT NULL,"
"catmode INTEGER NOT NULL,"
"FOREIGN KEY (contest) REFERENCES supportedcontests(id), "
"FOREIGN KEY (catoperator) REFERENCES contestcatoperator(id), "
"FOREIGN KEY (catassisted) REFERENCES contestcatassisted(id), "
"FOREIGN KEY (catpower) REFERENCES contestcatpower(id), "
"FOREIGN KEY (catband) REFERENCES contestcatband(id), "
"FOREIGN KEY (catoverlay) REFERENCES contestcatoverlay(id), "
"FOREIGN KEY (catmode) REFERENCES contestcatmode(id))");
execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatoperator ("
"id INTEGER PRIMARY KEY, "
"name VARCHAR)");
execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatassisted ("
"id INTEGER PRIMARY KEY, "
"name VARCHAR)");
execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatpower ("
"id INTEGER PRIMARY KEY, "
"name VARCHAR)");
execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatband ("
"id INTEGER PRIMARY KEY, "
"name VARCHAR)");
execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatoverlay ("
"id INTEGER PRIMARY KEY, "
"name VARCHAR)");
execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatmode ("
"id INTEGER PRIMARY KEY, "
"name VARCHAR)");
populateTableSupportedContest();
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('0', 'N/A')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('1', 'Single-Operator')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('2', 'Multi-One')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('3', 'Multi-Two')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('4', 'Multi-Unlimited')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('5', 'CheckLog')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatassisted (id, name) VALUES ('0', 'N/A')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatassisted (id, name) VALUES ('1', 'Non-Assisted')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatassisted (id, name) VALUES ('2', 'Assisted')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('0', 'N/A')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('1', 'High-Power')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('2', 'Low-Power')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('3', 'QRP')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatband (id, name) VALUES ('0', 'N/A')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatband (id, name) VALUES ('1', 'All-Band')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatband (id, name) VALUES ('2', 'Single-Band')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoverlay (id, name) VALUES ('0', 'N/A')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoverlay (id, name) VALUES ('1', 'Classic')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoverlay (id, name) VALUES ('2', 'Rookie')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('0', 'N/A')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('1', 'SSB')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('2', 'CW')");
execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('3', 'MIXED')");
//qDebug() << "DataBase::createTableContest END" ;
return true;
}
bool DataBase::populateTableSupportedContest()
{
//qDebug() << "DataBase::populateTableSupportedContest" ;
// ADDING ALL THE CATEGORIES OPTIONS
return execQuery(Q_FUNC_INFO, "INSERT INTO supportedcontests (id, longname, name) VALUES ('0', 'Normal log', 'DX')");
}
bool DataBase::createTableQSL_Via_enumeration()
{
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists qsl_via_enumeration");
QString st = QString("CREATE TABLE qsl_via_enumeration ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"shortname VARCHAR(1) NOT NULL, "
"name VARCHAR(15) NOT NULL)");
return execQuery(Q_FUNC_INFO, st);
}
bool DataBase::populateTableQSL_Via_enumeration()
{
execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('B', 'Bureau')");
execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('D', 'Direct')");
execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('E', 'Electronic')");
execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('M', 'Manager')");
return true;
}
bool DataBase::createTableMode(const bool NoTmp)
{ // NoTmp = false => TMP data table to operate and be deleted afterwards
//qDebug() << "DataBase::createTableMode" ;
QString stringQuery = QString();
QSqlQuery query;
if (NoTmp)
{
stringQuery = "CREATE TABLE mode" ;
}
else
{
stringQuery = "CREATE TABLE modetemp" ;
}
stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"cabrillo VARCHAR(2) NOT NULL, "
"name VARCHAR(40) NOT NULL, "
"submode VARCHAR(40) NOT NULL, "
"deprecated VARCHAR(1) NOT NULL)");
//qDebug() << "DataBase::createTableMode END" ;
return execQuery(Q_FUNC_INFO, stringQuery);
}
bool DataBase::populateTableMode(const bool NoTmp)
{
//qDebug() << "DataBase::populateTableMode" ;
//QSqlQuery query;
QString tableName = QString();
QString squery = QString();
if (NoTmp)
{
tableName = "mode";
}
else
{
tableName = "modetemp";
}
bool sqlOK = execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('AM', 'AM', 'PH', '0')").arg(tableName));
//int errorCode = -1;
if (!sqlOK)
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::populateTableMode: Mode table population FAILED" ;
//errorCode = query.lastError().nativeErrorCode();
}
else
{
//qDebug() << "DataBase::populateTableMode: Mode table population OK" ;
}
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ARDOP', 'ARDOP', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('AMTORFEC', 'TOR', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ASCI', 'RTTY', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ATV', 'ATV', 'NO', '0')").arg(tableName));
//execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('C4FM', 'C4FM', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CHIP', 'CHIP', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CHIP64', 'CHIP', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CHIP128', 'CHIP', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CLO', 'CLO', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CONTESTI', 'CONTESTI', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CW', 'CW', 'CW', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DIGITALVOICE', 'DIGITALVOICE', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('C4FM', 'DIGITALVOICE', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DMR', 'DIGITALVOICE', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DSTAR', 'DIGITALVOICE', 'NO', '0')").arg(tableName));
//execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DSTAR', 'DSTAR', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('VARA HF', 'DYNAMIC', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('VARA SATELLITE', 'DYNAMIC', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('VARA FM 1200', 'DYNAMIC', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('VARA FM 9600', 'DYNAMIC', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DOMINO', 'DOMINO', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DOMINOEX', 'DOMINO', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DOMINOF', 'DOMINO', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FAX', 'FAX', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FM', 'FM', 'PH', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FMHELL', 'HELL', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FT4', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FST4', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FST4W', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FT8', 'FT8', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSK31', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSK441', 'FSK441', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSKHELL', 'HELL', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSQCALL', 'MFSK', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('GTOR', 'TOR', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('HELL', 'HELL', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('HELL80', 'HELL', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('HFSK', 'HELL', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ISCAT', 'ISCAT', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ISCAT-A', 'ISCAT', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ISCAT-B', 'ISCAT', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JS8', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4', 'JT4', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4A', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4B', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4C', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4D', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4E', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4F', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4G', 'JT4', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT6M', 'JT6M', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-1', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-2', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-5', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-10', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-30', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9A', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9B', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9C', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9D', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9E', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9E FAST', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9F', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9F FAST', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9G', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9G FAST', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9H', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9H FAST', 'JT9', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT44', 'JT44', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65', 'JT65', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65A', 'JT65', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65B', 'JT65', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65B2', 'JT65', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65C', 'JT65', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65C2', 'JT65', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK4', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK8', 'MFSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK11', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK16', 'MFSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK22', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK31', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK32', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK64', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK128', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MSK144', 'MSK144', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MT63', 'MT63', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 4/125', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 4/250', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 8/250', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 8/500', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 16/500', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 16/1000', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 32/1000', 'OLIVIA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OPERA', 'OPERA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OPERA-BEACON', 'OPERA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OPERA-QSO', 'OPERA', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC', 'PAC', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC2', 'PAC', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC3', 'PAC', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC4', 'PAC', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAX', 'PAX', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAX2', 'PAX', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PCW', 'CW', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PKT', 'PKT', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK', 'PSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK10', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK31', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK63', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK63F', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK125', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK250', 'PSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK500', 'PSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK1000', 'PSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKAM10', 'PSK', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKAM31', 'PSK', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKAM50', 'PSK', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKFEC31', 'PSK', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK2K', 'PSK2K', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKHELL', 'HELL', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('Q15', 'Q15', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('Q65', 'MFSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK31', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK63', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK125', 'PSK', 'DG', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK250', 'PSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK500', 'PSK', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64', 'QRA64', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64A', 'QRA64', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64B', 'QRA64', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64C', 'QRA64', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64D', 'QRA64', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64E', 'QRA64', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS', 'ROS', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS-EME', 'ROS', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS-HF', 'ROS', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS-MF', 'ROS', 'DG', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('RTTY', 'RTTY', 'RY', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('RTTYM', 'RTTYM', 'RY', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('SSB', 'SSB', 'PH', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('LSB', 'SSB', 'PH', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('USB', 'SSB', 'PH', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('SIM31', 'PSK', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('SSTV', 'SSTV', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('T10', 'T10', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('THRB', 'THRB', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('THRBX', 'THRB', 'NO', '1')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('THOR', 'THOR', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('TOR', 'TOR', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('V4', 'V4', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('VOI', 'VOI', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('WINMOR', 'WINMOR', 'NO', '0')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('WSPR', 'WSPR', 'NO', '0')").arg(tableName));
createTheModeQuickReference();
//qDebug() << "DataBase::populateTableMode END" ;
return true;
}
bool DataBase::createTableSatellites(const bool NoTmp)
{ // NoTmp = false => TMP data table to operate and be deleted afterwards
//Creating the Sats DB to be able to include satellites to the LOTW
//qDebug() << "DataBase::createTableSatellites" ;
// The satmode column has the following format: {Up/down-mode;Up/down-mode}
// this way we can implement several freqs/modes per sat
// Initially I will implement Up/Down only but KLog should be prepared to work with "-mode" also
// being mode "SSB, CW, ... and other ADIF modes
QString stringQuery = QString();
QString table = QString();
if (NoTmp)
{
table = "satellites" ;
}
else
{
table = "satellitestemp" ;
}
stringQuery = "CREATE TABLE "+ table;
stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"satarrlid VARCHAR, "
"satname VARCHAR, "
"uplink VARCHAR,"
"downlink VARCHAR,"
"satmode VARCHAR, "
"UNIQUE (satarrlid) )");
/*
*
* uplink/downlink format is the following:
* Single frecuency: 145.950
* Segment: 145.950-145.975
* Several freqs: 145.950,435.950
* Several segments: 145.950-145.975,435.950-435.975
*
* satmode format:
* Single mode: FM
* Modes complex Up/Downlink: USB/LSB
* Several modes (one per uplink/downlink pair): FM,SSB
* Several complex modes (one per uplink/downlink pair): USB/LSB,LSB/USB,FM
*
*/
QString delS = QString();
delS = "DROP TABLE IF exists " + table;
execQuery(Q_FUNC_INFO, delS);
return execQuery(Q_FUNC_INFO, stringQuery);
}
bool DataBase::populateTableSatellites(const bool NoTmp)
{
// Data must come from:
// https://lotw.arrl.org/lotw-help/frequently-asked-questions/#sats
//qDebug() << "DataBase::populateTableSatellites" ;
//QSqlQuery query;
QString tableName = QString();
QString squery = QString();
if (NoTmp)
{
tableName = "satellites";
}
else
{
tableName = "satellitestemp";
}
// The satmode column has the following format: {Up/down-mode;Up/down-mode}
// this way we can implement several freqs/modes per sat
// Initially I will implement Up/Down only but KLog should be prepared to work with "-mode" also
// being mode "SSB, CW, ... and other ADIF modes
//To add a band, just create another line:
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-10', 'AMSAT-OSCAR 10', '435.030,146.180', '145.81', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-13', 'AMSAT-OSCAR 13', '435.423-435.573', '145.975-145.825', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-16', 'AMSAT-OSCAR 16', '145.92', '437.026', 'FM/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-21', 'OSCAR 21/RS-14', '', '145.8', 'CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-24', 'Arsene-OSCAR 24', '', '145.975', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-27', 'AMRAD-OSCAR 27', '145.85', '436.795', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-3', 'AMSAT-OSCAR 3', '145.975-146.025', '144.325-144.375', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-4', 'AMSAT-OSCAR 4', '432.145-432.155', '144.300-144.310', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-40', 'AMSAT-OSCAR 40','145.840-145.990,435.790-435.520', '2401.2225-2401.475', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-51', 'AMSAT-OSCAR 51', '145.92', '435.3', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-6', 'AMSAT-OSCAR 6', '145.900-146.000', '29.450-29.550', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-7', 'AMSAT-OSCAR 7', '145.850-145.950,432.180-432.120', '29.400-29.500,145.920-145.980', 'USB,LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-73', 'AMSAT-OSCAR 73', '435.150-435.130', '145.950-145.970', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-8', 'AMSAT-OSCAR 8', '145.850-145.900,145.900-146.000', '29.400-29.500,435.200-435.100', 'SSB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-85', 'AMSAT-OSCAR 85 (Fox-1A)', '435.170', '145.980', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('ARISS', 'ARISS', '145.200,144.490', '145.800,145.800', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('BIRD-BT', 'BHUTAN-1', '145.825', ',145.825', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('BIRD-MY', 'UiTMSat-1', '145.825', ',145.825', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('BIRD-PH', 'MAYA-1', '145.825', ',145.825', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('BY70-1', 'Bayi Kepu Weixing 1', '145.92', '436.2', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('CAS-3H', 'LilacSat 2', '144.350,144.390', '437.225,144.390', 'FM,PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('CAS-4A', 'CAMSAT 4A', '435.210-435.230', '145.880-145.860', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('CAS-4B', 'CAMSAT 4B', '435.270-435.290', '145.935-145.915', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('DO-64', 'Delfi OSCAR-64', '', '145.870', 'CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('EO-79', 'FUNcube-3', '435.047-435.077', '145.935-145.965', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('EO-88', 'Emirates OSCAR 88 (Nayif-1)', '435.045-435.015', '145.960-145.990', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('FO-12', 'Fuji-OSCAR 12', '145.900-146.000,145.85', '435.900-435.800,435.91', 'SSB,PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('FO-20', 'Fuji-OSCAR 20', '145.900-146.000', '435.900-435.800', 'SSB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('FO-29', 'Fuji-OSCAR 29', '145.900-145.999', '435.900-435.800', 'LSB/USB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('HO-68', 'Hope OSCAR 68', '145.925-145.975,145.825', '435.765-435.715,435.675', 'LSB/USB,FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('IO-86', 'Indonesia OSCAR 86 (LAPAN-ORARI)', '435.880', '145.880', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('LO-19', 'Lusat-OSCAR 19', '145.840-145.900', '437.125-437.150', 'CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('LO-78', 'LituanicaSAT-1', '145.95,145.85', '435.1755,437.543', 'FM,PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('LO-87', 'LUSEX-OSCAR 87', '435.935-435.965', '145.935-145.965', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('MIREX', 'Mir packet digipeater', '145.985', '145.985', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('NO-44', 'Navy-OSCAR 44', '145.827', '145.827', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('NO-83', 'BRICsat','145.825,28.120', '145.825,435.975','PKT,PSK31')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('NO-84', 'PSAT', '145.825,28.120', '435.350', 'PKT,PSK31')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-1', 'Radio Sputnik 1', '145', '29', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-10', 'Radio Sputnik 10', '','29.357,29.403', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-11', 'Radio Sputnik 11', '','29.357,29.403', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-12', 'Radio Sputnik 12', '21.210-21.250', '29.410-29.450', 'SSB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-13', 'Radio Sputnik 13', '21.260-21.300', '145.860-145.900', 'SSB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-15', 'Radio Sputnik 15', '', '29.3525-29.3987', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-2', 'Radio Sputnik 2', '145', '29', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-44', 'DOSAAF-85', '145.935-145.995', '435.610-435.670', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-5', 'Radio Sputnik 5', 'CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-6', 'Radio Sputnik 6', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-7', 'Radio Sputnik 7', 'CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-8', 'Radio Sputnik 8', '')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('SAREX', 'Shuttle Amateur Radio Experiment packet digipeater', '144.80,144.49', '144.55', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('SO-35', 'Sunsat-OSCAR 35', '436.291', '145.825', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('SO-41', 'Saudi-OSCAR 41', '145.850', '436.775', 'CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('SO-50', 'Saudi-OSCAR 50', '145.850', '436.795', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('SO-67', 'Sumbandila OSCAR 67', '145.875', '435.345', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('UKUBE1', 'UKube-1 (FUNcube-2)', '435.080-435.060', '145.930-145.950,2401.0', 'LSB/USB,CW')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('UO-14', 'UOSAT-OSCAR 14', '145.975', '435.07', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('VO-52', 'VUsat-OSCAR 52', '435.220-435.280,435.225-435.275', '145.930-145.870,145.925-145.875', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('XW-2A', 'Hope 2A (CAS-3A)', '435.030-435.050', '145.665-145.685', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('XW-2B', 'Hope 2B (CAS-3B)', '435.090-435.110', '145.730-145.750', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('XW-2C', 'Hope 2C (CAS-3C)', '435.150-435.170', '145.795-145.815', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('XW-2D', 'Hope 2D (CAS-3D)', '435.210-435.230', '145.860-145.880', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('XW-2E', 'Hope 2E (CAS-3E)', '435.270-435.290', '145.915-145.935', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('XW-2F', 'Hope 2F (CAS-3F)', '435.330-435.350', '145.980-145.999', 'LSB/USB')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('LO-90', 'LilacSat-OSCAR 90 (LilacSat-1)', '145.985', '436.510', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-91', 'RadFxSat (Fox-1B)', '435.250', '145.960', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-92', 'Fox-1D', '435.350,1267.35', '145.880', 'FM')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('FS-3', 'FalconSat-3', '435.103', '145.840', 'PKT')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('QO-100', 'Es''hail-2', '2400.050-2409.500', '10489.550-10499.000', 'SSB,CW')").arg(tableName));
//qDebug() << "DataBase::populateTableSatellites - END" ;
return true;
}
bool DataBase::createTableEntity(const bool NoTmp)
{ // NoTmp = false => TMP data table to operate and be deleted afterwards
//qDebug() << "DataBase::createTableEntity" ;
QString stringQuery = QString();
//QSqlQuery query;
if (NoTmp)
{
stringQuery = "CREATE TABLE entity" ;
}
else
{
stringQuery = "CREATE TABLE entitytemp" ;
}
stringQuery = stringQuery + QString( " (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(40) NOT NULL,"
"cqz INTEGER NOT NULL, "
"ituz INTEGER NOT NULL, "
"continent INTEGER NOT NULL, "
"latitude REAL NOT NULL, "
"longitude REAL NOT NULL, "
"utc INTEGER NOT NULL, "
"dxcc INTEGER NOT NULL, "
"mainprefix VARCHAR(15) NOT NULL, "
"deleted INTEGER, "
"sincedate VARCHAR(10), "
"todate VARCHAR(10), "
"isoname VARCHAR(10), "
"UNIQUE (dxcc, mainprefix), "
"FOREIGN KEY (continent) REFERENCES continent(shortname) )");
//qDebug() << "DataBase::createTableEntity END" ;
return execQuery(Q_FUNC_INFO, stringQuery);
//TODO: To add some columns in this the table to mark if worked/confirmed/band/Mode
}
bool DataBase::createTableBand(const bool NoTmp)
{ // NoTmp = false => TMP data table to operate and be deleted afterwards
//qDebug() << "DataBase::createTableBand" ;
QString stringQuery = QString();
//QSqlQuery query;
if (NoTmp)
{
stringQuery = "CREATE TABLE band" ;
}
else
{
stringQuery = "CREATE TABLE bandtemp" ;
}
stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"lower REAL NOT NULL, "
"upper REAL NOT NULL, "
"cabrillo VARCHAR(6) NOT NULL, "
"name VARCHAR(40) NOT NULL, "
"UNIQUE (lower, upper, cabrillo, name) )");
//qDebug() << "DataBase::createTableBand END" ;
return execQuery(Q_FUNC_INFO, stringQuery);
}
bool DataBase::syncLogQSOsOnBandTableChange()
{
//qDebug() << Q_FUNC_INFO ;
QString stringQuery;
QSqlQuery query;
stringQuery = "SELECT DISTINCT log.bandid FROM log ORDER BY bandid DESC";
if (!query.exec(stringQuery))
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
return false;
}
QList bandIDs;
bandIDs.clear();
int bandid = -1;
while(query.next())
{
if (!query.isValid())
{
query.finish();
return false;
}
bandid = (query.value(0)).toInt();
if (bandid>0)
{
bandIDs.append (bandid);
bandid = -1;
}
}
if (bandIDs.length ()>0)
{
foreach(int i, bandIDs)
{
stringQuery = QString("UPDATE log SET bandid = (SELECT DISTINCT bandtemp.id FROM bandtemp INNER JOIN band ON band.name = bandtemp.name WHERE band.id='%1') WHERE log.bandid='%1'").arg(i);
//qDebug() << Q_FUNC_INFO << ": " << stringQuery ;
if (!query.exec(stringQuery))
{
query.finish();
return false;
}
}
}
query.finish ();
//qDebug() << Q_FUNC_INFO << " - END" ;
return true;
}
bool DataBase::populateTableBand(const bool NoTmp)
{
// Cabrillo definition: http://wwrof.org/cabrillo/cabrillo-specification-v3/
//qDebug() << "DataBase::populateTableBand" ;
QString tableName = QString();
QString squery = QString();
if (NoTmp)
{
tableName = "band";
}
else
{
tableName = "bandtemp";
}
//To add a band, just create another line:
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('0', '0', '0', 'Light')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('1mm', '241000', '250000', '241G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2mm', '142000', '149000', '142G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2.5mm', '119980', '120020', '119G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('4mm', '75500', '81000', '75G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('6mm', '47000', '47200', '47G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('1.25CM', '24000', '24250', '24G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('3CM', '10000', '10500', '10G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('6CM', '5650', '5925', '5.7G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('9CM', '3300', '3500', '3.4G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('13CM', '2340', '2450', '2.3G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('23CM', '1240', '1300', '1.2G')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('33CM', '902', '928', '902')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('70CM', '420', '450', '432')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('1.25M', '222', '225', '222')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2M', '144', '148', '144')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('4M', '70', '71', '70')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('5M', '54.000001', '69.9', '5M')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('6M', '50', '54', '50')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('8M', '40', '45', '40')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('10M', '28.0', '29.7', '28000')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('12M', '24.89', '24.99', '24900')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('15M', '21.0', '21.45', '21000')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('17M', '18.068', '18.168', '18100')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('20M', '14.0', '14.35', '14000')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('30M', '10.0', '10.15', '10000')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('40M', '7.0', '7.3', '7000')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('60M', '5.102', '5.404', '60M')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('80M', '3.5', '4.0', '3500')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('160M', '1.8', '2.0', '1800')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('560M', '0.501', '0.504', '560M')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('630M', '0.472', '0.479', '630M')").arg(tableName));
execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2190M', '0.1357', '0.1378', '2190M')").arg(tableName));
createTheBandQuickReference();
//qDebug() << "DataBase::populateTableBand END" ;
return true;
}
bool DataBase::populatePropagationModes()
{
//qDebug() << "DataBase::populatePropagationModes" ;
//QSqlQuery query;
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AS', 'Aircraft Scatter')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AUR', 'Aurora')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AUE', 'Aurora-E')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('BS', 'Back scatter')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('ECH', 'EchoLink')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('EME', 'Earth-Moon-Earth')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('ES', 'Sporadic E')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('FAI', 'Field Aligned Irregularities')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('F2', 'F2 Reflection')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('GWAVE', 'Ground Wave')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('INTERNET', 'Internet-assisted')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('ION', 'Ionoscatter')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('IRL', 'IRLP')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('LOS', 'Line of Sight')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('MS', 'Meteor scatter')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('RPT', 'Terrestrial or atmospheric repeater or transponder')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('RS', 'Rain scatter')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('SAT', 'Satellite')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('TEP', 'Trans-equatorial')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('TR', 'Tropospheric ducting')"));
//qDebug() << "DataBase::populatePropagationModes END" ;
return true;
}
bool DataBase::populateContestData()
{
//qDebug() << "DataBase::populateContestData" ;
// CONTEST DEFINITIONS START HERE
// DX
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (0, 0, 0, 0, 0, 0, 0)");
// DX START
/*
// CQ WW DX SSB START
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 2, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 2, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 2, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 2, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 2, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 2, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 1, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 2, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 1, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 2, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 1, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 2, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 1, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 2, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 1, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 2, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 1, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 2, 1, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 1, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 2, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 1, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 2, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 1, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 2, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 1, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 2, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 1, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 2, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 1, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 2, 2, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 2, 0, 1, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 2, 0, 2, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 3, 0, 1, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 3, 0, 2, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 4, 0, 1, 1, 0, 1)");
execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 5, 0, 0, 0, 0, 1)");
// CQ WW DX SSB END
*/
//qDebug() << "DataBase::populateContestData END" ;
return true;
}
bool DataBase::howManyQSOsInLog(const int i)
{
//qDebug() << "DataBase::howManyQSOsInLog" ;
QSqlQuery query;
QString sqlQueryString = QString("SELECT COUNT(id) from log WHERE lognumber='%1'").arg(i);
bool sqlOK = query.exec(sqlQueryString);
if (sqlOK)
{
query.next();
if (query.isValid())
{
//qDebug() << "DataBase::howManyQSOsInLog OK END" ;
return (query.value(0)).toInt();
}
else
{
//qDebug() << "DataBase::howManyQSOsInLog END-1" ;
query.finish();
return false;
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
//qDebug() << "DataBase::howManyQSOsInLog END-2" ;
return false;
}
//query.finish();
//return -2;
}
bool DataBase::updateTo006()
{// Updates the DB to 0.0.6
//qDebug() << "DataBase::updateTo006: latestRead: " << getDBVersion() ;
bool IAmIn006 = false;
bool IAmIn005 = false;
bool ErrorUpdating = false;
QString stringQuery = QString();
bool sqlOk = false;
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.006f)
{
return true;
}
else
{
IAmIn006 = false;
}
while (!IAmIn006 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo006: - Still not in 006" ;
while (!IAmIn005 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo006: - And still not in 005" ;
IAmIn005 = updateTo005();
}
//qDebug() << "DataBase::updateTo006: - Already in 005" ;
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(0)" ;
return false;
}
sqlOk = updateDBVersion(softVersion, "0.006");
if(sqlOk)
{
//qDebug() << "DataBase::updateTo006: - DB Updated" ;
sqlOk = recreatePropModes();
if(sqlOk)
{
//qDebug() << "DataBase::updateTo006: - recreatePropModes OK" ;
sqlOk = updateTableLog(6); // We copy the log into logtemp
}
else
{
//qDebug() << "DataBase::updateTo006: - recreatePropModes NOK" ;
ErrorUpdating = true;
IAmIn006 = false;
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(1)" ;
return false;
}
sqlOk = createTableBand(false); // We create the bandTemp
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - createTableBand OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(2)" ;
ErrorUpdating = true;
//return false;
}
sqlOk = populateTableBand(false); // Populate the bandTemp
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - populateTableBand OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(3)" ;
ErrorUpdating = true;
}
sqlOk = updateBandIdTableLogToNewOnes();
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - updateBandIdTableLogToNewOnes OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(4)" ;
ErrorUpdating = true;
}
sqlOk = updateBandIdTableAward(1); // DXCC
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - updateBandIdTableAward 1 OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(5)" ;
ErrorUpdating = true;
}
sqlOk = updateBandIdTableAward(2); // WAZ
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - updateBandIdTableAward 2 OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(6)" ;
ErrorUpdating = true;
}
if (execQuery(Q_FUNC_INFO, "DROP TABLE band"))
{
if (execQuery(Q_FUNC_INFO, "ALTER TABLE bandtemp RENAME TO band"))
{
//qDebug() << "DataBase::updateTo006 - bandtemp renamed" ;
}
else
{
//qDebug() << "DataBase::updateTo006 - ERROR - bandtemp not renamed" ;
ErrorUpdating = true;
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(7)" ;
}
}
else
{
//qDebug() << "DataBase::updateTo006 - ERROR - bandtemp not dropped" ;
ErrorUpdating = true;
IAmIn006 = false;
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(8)" ;
ErrorUpdating = true;
}
sqlOk = updateTheModeTableAndSyncLog();
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - updateTheModeTableAndSyncLog OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(9)" ;
ErrorUpdating = true;
}
sqlOk = createTableClubLogStatus();
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - createTableClubLogStatus OK" ;
sqlOk = populateTableClubLogStatus();
if (sqlOk)
{
//qDebug() << "DataBase::updateTo006: - populateTableClubLogStatus OK" ;
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(10)" ;
ErrorUpdating = true;
}
}
else
{
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(11)" ;
ErrorUpdating = true;
}
}
else
{// Version not updated
//qDebug() << "DataBase::updateTo006: - DB NOT Updated" ;
ErrorUpdating = true;
IAmIn006 = false;
//qDebug() << "DataBase::updateTo006: UPDATED NOK!(12)" ;
ErrorUpdating = true;
}
//qDebug() << "DataBase::updateTo006: - IAmIn006 = TRUE" ;
IAmIn006 = true;
}
//DO ALL THE TASKS TO BE IN 0.006 from 0.005 HERE and set ErrorUpdating if it is not possible.
//qDebug() << "DataBase::updateTo006 - I am in 006 " ;
//qDebug() << "DataBase::updateTo006 - END " ;
//qDebug() << "DataBase::updateTo006: UPDATED OK!" ;
if (!IAmIn006)
{
// emit debugLog(Q_FUNC_INFO, "2", 7);
}
return IAmIn006;
}
bool DataBase::updateTableLog(const int _v)
{
//qDebug() << "DataBase::updateTableLog " ;
createTableLog(false);
QString queryString;
switch (_v)
{
case 6: // If 6, we copy in logtemp the full data coming from the old log. This way, the structure of
// the log table is updated without any data loss.
queryString = QString ("INSERT INTO logtemp (qso_date, call, rst_sent, rst_rcvd, bandid, modeid, srx, stx, cqz, ituz, dxcc, address, age, cnty, comment, a_index, ant_az, ant_el, ant_path, arrl_sect, band_rx, checkcontest, class, contacted_op, contest_id, country, credit_submitted, credit_granted, distance, email, eq_call, eqsl_qslrdate, eqsl_qslsdate, eqsl_qsl_rcvd, eqsl_qsl_sent, force_init, freq, freq_rx, gridsquare, iota, iota_island_id, k_index, lat, lon, lotw_qslrdate, lotw_qslsdate, lotw_qsl_rcvd, lotw_qsl_sent, max_bursts, ms_shower, my_city, my_cnty, my_country, my_cq_zone, my_gridsquare, my_iota, my_iota_island_id, my_lat, my_lon, my_name, my_rig, my_sig, my_sig_info, my_state, my_street, name, notes, nr_bursts, nr_pings, operator, owner_callsign, pfx, precedence, prop_mode, public_key, qslmsg, qslrdate, qslsdate, qsl_rcvd, qsl_sent, qsl_rcvd_via, qsl_sent_via, qsl_via, qso_complete, qso_random, qth, rx_pwr, sat_mode, sat_name, sfi, sig, sig_info, srx_string, stx_string, state, station_callsign, swl, ten_ten, tx_pwr, web, qso_date_off, marked, lognumber) SELECT qso_date, call, rst_sent, rst_rcvd, bandid, modeid, srx, stx, cqz, ituz, dxcc, address, age, cnty, comment, a_index, ant_az, ant_el, ant_path, arrl_sect, band_rx, checkcontest, class, contacted_op, contest_id, country, credit_submitted, credit_granted, distance, email, eq_call, eqsl_qslrdate, eqsl_qslsdate, eqsl_qsl_rcvd, eqsl_qsl_sent, force_init, freq, freq_rx, gridsquare, iota, iota_island_id, k_index, lat, lon, lotw_qslrdate, lotw_qslsdate, lotw_qsl_rcvd, lotw_qsl_sent, max_bursts, ms_shower, my_city, my_cnty, my_country, my_cq_zone, my_gridsquare, my_iota, my_iota_island_id, my_lat, my_lon, my_name, my_rig, my_sig, my_sig_info, my_state, my_street, name, notes, nr_bursts, nr_pings, operator, owner_callsign, pfx, precedence, prop_mode, public_key, qslmsg, qslrdate, qslsdate, qsl_rcvd, qsl_sent, qsl_rcvd_via, qsl_sent_via, qsl_via, qso_complete, qso_random, qth, rx_pwr, sat_mode, sat_name, sfi, sig, sig_info, srx_string, stx_string, state, station_callsign, swl, ten_ten, tx_pwr, web, qso_date_off, marked, lognumber FROM log");
break;
default:
//qDebug() << "DataBase::updateTableLog FALSE END" ;
return false;
//break;
}
if (execQuery(Q_FUNC_INFO, queryString))
{
//qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Query executed" ;
queryString = "DROP TABLE log";
if (execQuery(Q_FUNC_INFO, queryString))
{
//qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Table log dropped" ;
queryString = "ALTER TABLE logtemp RENAME TO log" ;
if (execQuery(Q_FUNC_INFO, queryString))
{
//qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - tmp renamed - END" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Renaming failed" ;
}
}
else
{
//qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Table log Not dropped" ;
}
}
else
{
//qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - query failed" ;
}
//qDebug() << "DataBase::updateTableLog END" ;
return false;
}
bool DataBase::createTableClubLogStatus()
{
//qDebug() << "createTableClubLogStatus" ;
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists clublog_status");
QString queryString = QString("CREATE TABLE clublog_status ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"shortname VARCHAR(1) NOT NULL, "
"name VARCHAR(15) NOT NULL)");
return execQuery(Q_FUNC_INFO, queryString);
}
bool DataBase::populateTableClubLogStatus()
{
//qDebug() << "populateTableClubLogStatus" ;
QString queryString = "INSERT INTO clublog_status (shortname, name) VALUES ('Y', 'Uploaded')";
if (execQuery(Q_FUNC_INFO, queryString))
{
queryString = "INSERT INTO clublog_status (shortname, name) VALUES ('N', 'Do not upload')";
if (execQuery(Q_FUNC_INFO, queryString))
{
queryString = "INSERT INTO clublog_status (shortname, name) VALUES ('M', 'Modified')";
//qDebug() << "populateTableClubLogStatus END" ;
return execQuery(Q_FUNC_INFO, queryString);
}
}
//qDebug() << "populateTableClubLogStatus FALSE END" ;
return false;
}
bool DataBase::updateTableEntity()
{
//qDebug() << "DataBase::updateTableEntity" ;
bool result = false;
QString stringQuery;
bool sqlOk;
result = createTableEntity(false); // Now we have a temp entity table with the correct format
if (result)
{
//qDebug() << "DataBase::updateTableEntity: Table entitytemp created!" ;
// Now we need to move all the data from the old to the temp entity table.
stringQuery = QString("INSERT INTO entitytemp (name, cqz, ituz, continent, latitude, longitude, utc, dxcc, mainprefix, deleted, sincedate, todate) SELECT name, cqz, ituz, continent, latitude, longitude, utc, dxcc, mainprefix, deleted, sincedate, todate FROM entity");
sqlOk = execQuery(Q_FUNC_INFO, stringQuery);
if (sqlOk)
{
//qDebug() << "DataBase::updateTableEntity: Data copied from entity to entitytemp!" ;
stringQuery = "DROP TABLE entity";
if (execQuery(Q_FUNC_INFO, stringQuery))
{
//qDebug() << "DataBase::updateTableEntity: Table entity DELETED" ;
stringQuery = "ALTER TABLE entitytemp RENAME TO entity";
return execQuery(Q_FUNC_INFO, stringQuery);
}
else
{
return false;
}
}
else
{
//qDebug() << "DataBase::updateTableEntity: Data NOT copied from entity to entitytemp!" ;
//TODO: If it fails, we should manage errors...
return false;
}
}
else
{
//qDebug() << "DataBase::updateTableEntity: Table entitytemp NOT created!" ;
return false;
}
//return false;
}
bool DataBase::updateTableLogs()
{
//qDebug() << "DataBase::updateTableLogs" ;
bool result = false;
QString stringQuery;
bool sqlOk;
result = createTableLogs(false); // Now we have a temp entity table with the correct format
if (result)
{
//qDebug() << "DataBase::updateTableLogs: Table logstemp created!" ;
// Now we need to move all the data from the old to the temp logs table.
stringQuery = QString("INSERT INTO logstemp (logdate, stationcall, comment, logtype, logtypen) SELECT logdate, stationcall, comment, logtype, logtypen FROM logs");
sqlOk = execQuery(Q_FUNC_INFO, stringQuery);
if (sqlOk)
{
//qDebug() << "DataBase::updateTableLogs: data copied" ;
stringQuery = "DROP TABLE logs";
if (execQuery(Q_FUNC_INFO, stringQuery))
{
//qDebug() << "DataBase::updateTableLogs: Table logs DELETED" ;
stringQuery = "ALTER TABLE logstemp RENAME TO logs";
return execQuery(Q_FUNC_INFO, stringQuery);
}
else
{
//qDebug() << "DataBase::updateTableLogs: Table logs NOT DELETED" ;
return false;
}
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateTableLogs: data NOT copied" ;
//TODO: If it fails, we should manage errors...
return false;
}
}
else
{
//qDebug() << "DataBase::updateTableLogs: Table logstemp NOT created!" ;
return false;
}
//qDebug() << "DataBase::updateTableLogs: END" ;
//return false;
}
bool DataBase::updateModeIdFromSubModeId()
{// Updates the log with the new mode IDs in each QSO:
// STEP-1: Get the modeid and QSOid from the log
// STEP-2: uses the modeid to get the name of the mode in the mode table (the old one)
// STEP-3: uses the name of the mode in the modetemp table (the new one) to get the new ID
// STEP-4: Updates the new ID in the QSO in the log
//TODO: Optimize this function
//qDebug() << "DataBase::updateModeIdFromSubModeId: " ;
bool cancel = false;
bool alreadyCancelled = false;
QString modetxt = QString();
QString sq = QString();
bool sqlOk2 = false;
bool sqlOk3 = false;
int modeFound = -1;
int id = -1;
int qsos;
int i = 0;
QString aux;
QSqlQuery query, query2;
bool sqlOk = query.exec("SELECT COUNT (*) FROM log");
if (sqlOk)
{
//QSqlDatabase::database().commit();
query.next();
qsos = (query.value(0)).toInt();
query.finish();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
//qDebug() << "DataBase::updateModeIdFromSubModeId: FALSE END" ;
return false;
}
int step = util->getProgresStepForDialog(qsos);
QProgressDialog progress(QObject::tr("Updating mode information..."), QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
sqlOk = query.exec("SELECT modeid, id FROM log ORDER BY modeid"); // STEP-1
if (sqlOk)
{
while (query.next())
{
modetxt = QString();
modeFound = -1;
if (query.isValid())
{
i++;
if (( (i % step )== 0) )
{ // To update the speed I will only show the progress once each X QSOs
aux = QObject::tr("Updating mode information...") + "\n" + QObject::tr("QSO: ") + QString::number(i) + "/" + QString::number(qsos);
progress.setLabelText(aux);
progress.setValue(i);
}
modeFound = (query.value(0)).toInt();
id = (query.value(1)).toInt();
//qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-1) modeFound (numb): " << QString::number(modeFound) ;
modetxt = getModeNameFromNumber(modeFound, false); //STEP-2
//qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-2) mode found (txt): " << modetxt ;
//TODO The following query can be executed in: getModeIdFromSubMode()
sq = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(modetxt); // STEP-3
sqlOk2 = query2.exec(sq);
if (sqlOk2)
{
//qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-3) sqlOK2 TRUE" ;
if (query2.next())
{
if (query2.isValid())
{
modeFound = query2.value(0).toInt();
query2.finish();
sq = QString ("UPDATE log SET modeid='%1' WHERE id='%2'").arg(modeFound).arg(id); // STEP-4
sqlOk3 = execQuery(Q_FUNC_INFO, sq);
if (sqlOk3)
{
//qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-4) ID: " << QString::number(id) << " updated to: " << QString::number(modeFound) <<"/"<< modetxt ;
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
//qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-4) ID: " << QString::number(id) << " NOT updated-2" ;
}
}
else
{
query2.finish();
//qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-3) query2 not valid " ;
}
}
else
{
//qDebug() << "DataBase::updateModeIdFromSubModeId: query2 not next " ;
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
query2.finish();
//qDebug() << "DataBase::updateModeIdFromSubModeId: ID: " << QString::number(id) << " NOT updated-1" ;
}
}
if ( progress.wasCanceled() )
{
if (!alreadyCancelled)
{
alreadyCancelled = true;
QMessageBox msgBox;
msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
msgBox.setText(aux);
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Yes:
// Yes was clicked
cancel = true;
break;
case QMessageBox::No:
// No Save was clicked
cancel = false;
progress.setCancelButton(nullptr);
break;
default:
// should never be reached
cancel = false;
break;
}
}
}
}
query.finish();
if (cancel && (!alreadyCancelled))
{
//qDebug() << "DataBase::updateModeIdFromSubModeId: FALSE END 2" ;
query.finish();
return false;
}
//qDebug() << "DataBase::updateModeIdFromSubModeId: END" ;
query.finish();
return true;
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateModeIdFromSubModeId: FALSE END 3" ;
query.finish();
return false;
}
//qDebug() << "DataBase::updateModeIdFromSubModeId: CHECK IF this is seen - END" ;
//query.finish();
//return false;
}
bool DataBase::updateBandIdTableLogToNewOnes()
{
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: " ;
QString bandtxt = QString();
bool cancel = false;
bool alreadyCancelled = false;
//int errorCode = -1;
QString sq = QString();
bool sqlOk2 = false;
bool sqlOk3 = false;
int bandFound = -1;
int id = -1;
int qsos;
int i = 0;
QString aux;
QSqlQuery query, query2;
bool sqlOk = query.exec("SELECT COUNT (*) FROM log");
if (sqlOk)
{
query.next();
qsos = (query.value(0)).toInt();
query.finish();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: FALSE END" ;
query.finish();
return false;
}
int step = util->getProgresStepForDialog(qsos);
QProgressDialog progress(QObject::tr("Updating bands information..."), QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
sqlOk = query.exec("SELECT bandid, id FROM log ORDER BY bandid DESC");
if (sqlOk)
{
while (query.next() && (!cancel) )
{
bandtxt = QString();
bandFound = -1;
if (query.isValid())
{
i++;
if (( (i % step )== 0) )
{ // To update the speed I will only show the progress once each X QSOs
aux = QObject::tr("Updating bands information...") + "\n" + QObject::tr("QSO: ") + QString::number(i) + "/" + QString::number(qsos);
progress.setLabelText(aux);
progress.setValue(i);
}
bandFound = (query.value(0)).toInt();
id = (query.value(1)).toInt();
bandtxt = getBandNameFromNumber(bandFound);
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: band found: " << bandtxt ;
sq = QString("SELECT id FROM bandtemp WHERE name='%1'").arg(bandtxt);
sqlOk2 = query2.exec(sq);
if (sqlOk2)
{
if (query2.next())
{
if (query2.isValid())
{
bandFound = query2.value(0).toInt();
sq = QString ("UPDATE log SET bandid='%1' WHERE id='%2'").arg(bandFound).arg(id);
query.finish();
sqlOk3 = execQuery(Q_FUNC_INFO, sq);
if (sqlOk3)
{
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt ;
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-2" ;
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes - QSOs not updated to main log" ;
}
}
else
{
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: query2 not valid " ;
}
}
else
{
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: query2 not next " ;
}
query2.finish();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
query2.finish();
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-1" ;
}
}
if ( progress.wasCanceled() )
{
if (!alreadyCancelled)
{
alreadyCancelled = true;
QMessageBox msgBox;
msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
msgBox.setText(aux);
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Yes:
// Yes was clicked
cancel = true;
break;
case QMessageBox::No:
// No Save was clicked
cancel = false;
progress.setCancelButton(nullptr);
break;
default:
// should never be reached
cancel = false;
break;
}
}
}
}
query.finish();
if (cancel && (!alreadyCancelled))
{
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: FALSE END 2" ;
return false;
}
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: END OK" ;
return true;
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
//qDebug() << "DataBase::updateBandIdTableLogToNewOnes: FALSE END 3" ;
return false;
}
}
bool DataBase::updateBandIdTableAward(const int _db)
{
//qDebug() << "DataBase::updateBandIdTableAward: " ;
QString table = QString();
QString field = QString();
QString awardSelected = QString();
switch (_db) {
case 1: //
table = "awarddxcc";
field = "band";
awardSelected = "DXCC";
break;
case 2:
table = "awardwaz";
field = "band";
awardSelected = "WAZ";
break;
default:
//qDebug() << "DataBase::updateBandIdTableAward: FALSE END" ;
return false;
//break;
}
QString bandtxt = QString();
bool cancel = false;
bool alreadyCancelled = false;
QString sq = QString();
bool sqlOk2 = false;
bool sqlOk3 = false;
int bandFound = -1;
int id = -1;
int qsos;
int i = 0;
QString aux;
QSqlQuery query, query2;
sq = QString("SELECT COUNT (*) FROM %1").arg(table);
bool sqlOk = query.exec(sq);
if (sqlOk)
{
query.next();
qsos = (query.value(0)).toInt();
query.finish();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
//qDebug() << "DataBase::updateBandIdTableAward: FALSE END-2" ;
return false;
}
int step = util->getProgresStepForDialog(qsos);
QString progressmsg = QString(QObject::tr("Updating bands information in %1 status...")).arg(awardSelected);
QProgressDialog progress(progressmsg, QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
sq = QString("SELECT %1, id FROM %2 ORDER BY %3 DESC").arg(field).arg(table).arg(field);
sqlOk = query.exec(sq);
if (sqlOk)
{
while (query.next() && (!cancel) )
{
bandtxt = QString();
bandFound = -1;
if (query.isValid())
{
i++;
if (( (i % step )== 0) )
{ // To update the speed I will only show the progress once each X QSOs
aux = QObject::tr("Updating bands information...") + "\n" + QObject::tr("Progress: ") + QString::number(i) + "/" + QString::number(qsos);
progress.setLabelText(aux);
progress.setValue(i);
}
bandFound = (query.value(0)).toInt();
id = (query.value(1)).toInt();
bandtxt = getBandNameFromNumber(bandFound);
//qDebug() << "DataBase::updateBandIdTableAward: band found: " << bandtxt ;
sq = QString("SELECT id FROM bandtemp WHERE name='%1'").arg(bandtxt);
sqlOk2 = query2.exec(sq);
if (sqlOk2)
{
if (query2.next())
{
if (query2.isValid())
{
bandFound = query2.value(0).toInt();
query2.finish();
sq = QString ("UPDATE %1 SET %2='%3' WHERE id='%4'").arg(table).arg(field).arg(bandFound).arg(id);
sqlOk3 = execQuery(Q_FUNC_INFO, sq);
if (sqlOk3)
{
//qDebug() << "DataBase::updateBandIdTableAward: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt ;
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
//qDebug() << "DataBase::updateBandIdTableAward: ID: " << QString::number(id) << " NOT updated-2" ;
//qDebug() << "DataBase::updateBandIdTableAward - QSOs not updated to main log" ;
}
}
else
{
//qDebug() << "DataBase::updateBandIdTableAward: query2 not valid " ;
}
}
else
{
//qDebug() << "DataBase::updateBandIdTableAward: query2 not next " ;
}
query2.finish();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
query2.finish();
//qDebug() << "DataBase::updateBandIdTableAward: ID: " << QString::number(id) << " NOT updated-1" ;
}
}
if ( progress.wasCanceled() )
{
if (!alreadyCancelled)
{
alreadyCancelled = true;
QMessageBox msgBox;
msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
msgBox.setText(aux);
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Yes:
// Yes was clicked
cancel = true;
break;
case QMessageBox::No:
// No Save was clicked
cancel = false;
progress.setCancelButton(nullptr);
break;
default:
// should never be reached
cancel = false;
break;
}
}
}
}
if (cancel && (!alreadyCancelled))
{
//qDebug() << "DataBase::updateBandIdTableAward: FALSE END-3" ;
query.finish();
return false;
}
//qDebug() << "DataBase::updateBandIdTableAward: END OK" ;
query.finish();
return true;
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateBandIdTableAward: FALSE END-4" ;
query.finish();
return false;
}
//qDebug() << "DataBase::updateBandIdTableAward: CHECK IF SEEN END" ;
//query.finish();
//return false;
}
bool DataBase::updateModeIdTableAward(const int _db)
{
//qDebug() << "DataBase::updateModeIdTableAward: " << QString::number(_db) ;
QString table = QString();
QString field = "mode";
QString awardSelected = QString();
switch (_db) {
case 1: //
table = "awarddxcc";
awardSelected = "DXCC";
break;
case 2:
table = "awardwaz";
awardSelected = "WAZ";
break;
default:
//qDebug() << "DataBase::updateModeIdTableAward: FALSE END" ;
return false;
//break;
}
QString bandtxt = QString();
bool cancel = false;
bool alreadyCancelled = false;
//int errorCode = -1;
QString sq = QString();
bool sqlOk2 = false;
bool sqlOk3 = false;
int bandFound = -1;
int id = -1;
int qsos;
int i = 0;
QString aux;
QSqlQuery query, query2;
sq = QString("SELECT COUNT (*) FROM %1").arg(table);
bool sqlOk = query.exec(sq);
if (sqlOk)
{
query.next();
qsos = (query.value(0)).toInt();
query.finish();
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateModeIdTableAward: FALSE END-2" ;
query.finish();
return false;
}
int step = util->getProgresStepForDialog(qsos);
QString progressmsg = QString(QObject::tr("Updating mode information in %1 status...")).arg(awardSelected);
QProgressDialog progress(progressmsg, QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
sq = QString("SELECT %1, id FROM %2 ORDER BY %3 DESC").arg(field).arg(table).arg(field);
sqlOk = query.exec(sq);
//qDebug() << "DataBase::updateModeIdTableAward (query): " << query.lastQuery() ;
if (sqlOk)
{
while (query.next() && (!cancel) )
{
bandtxt = QString();
bandFound = -1;
if (query.isValid())
{
i++;
if (( (i % step )== 0) )
{ // To update the speed I will only show the progress once each X QSOs
aux = QObject::tr("Updating bands information...") + "\n" + QObject::tr("Progress: ") + QString::number(i) + "/" + QString::number(qsos);
progress.setLabelText(aux);
progress.setValue(i);
}
bandFound = (query.value(0)).toInt();
id = (query.value(1)).toInt();
//qDebug() << "DataBase::updateModeIdTableAward: bandfound: " << QString::number(bandFound) ;
//qDebug() << "DataBase::updateModeIdTableAward: id: " << QString::number(id) ;
bandtxt = getSubModeNameFromNumber(bandFound, true);
//qDebug() << "DataBase::updateModeIdTableAward: mode found: " << bandtxt << "/" << QString::number(bandFound) ;
sq = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(bandtxt);
sqlOk2 = query2.exec(sq);
//qDebug() << "DataBase::updateModeIdTableAward (query2): " << query2.lastQuery() ;
if (sqlOk2)
{
if (query2.next())
{
if (query2.isValid())
{
bandFound = query2.value(0).toInt();
query2.finish();
sq = QString ("UPDATE %1 SET %2='%3' WHERE id='%4'").arg(table).arg(field).arg(bandFound).arg(id);
sqlOk3 = execQuery(Q_FUNC_INFO, sq);
if (sqlOk3)
{
//qDebug() << "DataBase::updateModeIdTableAward: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt ;
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
//qDebug() << "DataBase::updateModeIdTableAward: ID: " << QString::number(id) << " NOT updated-2" ;
//qDebug() << "DataBase::updateModeIdTableAward - QSOs not updated to main log" ;
}
}
else
{
//qDebug() << "DataBase::updateModeIdTableAward: query2 not valid " ;
}
}
else
{
//qDebug() << "DataBase::updateModeIdTableAward: query2 not next " ;
}
}
else
{
queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
query2.finish();
//qDebug() << "DataBase::updateModeIdTableAward: ID: " << QString::number(id) << " NOT updated-1" ;
}
}
if ( progress.wasCanceled() )
{
if (!alreadyCancelled)
{
alreadyCancelled = true;
QMessageBox msgBox;
msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
msgBox.setText(aux);
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Yes:
// Yes was clicked
cancel = true;
break;
case QMessageBox::No:
// No Save was clicked
cancel = false;
progress.setCancelButton(nullptr);
break;
default:
// should never be reached
cancel = false;
break;
}
}
}
}
if (cancel && (!alreadyCancelled))
{
//qDebug() << "DataBase::updateModeIdTableAward: FALSE END-3" ;
query.finish();
return false;
}
//qDebug() << "DataBase::updateModeIdTableAward: END OK" ;
query.finish();
return true;
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateModeIdTableAward: FALSE END-4" ;
query.finish();
return false;
}
//qDebug() << "DataBase::updateModeIdTableAward: Checkif seen END" ;
//query.finish();
//return false;
}
/*
bool DataBase::updateModeIdTableLogToNewOnes()
{
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: " ;
QString bandtxt = QString();
bool cancel = false;
bool alreadyCancelled = false;
int errorCode = -1;
QString sq = QString();
bool sqlOk2 = false;
bool sqlOk3 = false;
int bandFound = -1;
int id = -1;
int qsos;
int i = 0;
QString aux;
QSqlQuery query, query2, query3;
bool sqlOk = query.exec("SELECT COUNT (*) FROM log");
if (sqlOk)
{
query.next();
qsos = (query.value(0)).toInt();
}
else
{
return false;
}
int step = util->getProgresStepForDialog(qsos);
QProgressDialog progress(QObject::tr("Updating mode information..."), QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
sqlOk = query.exec("SELECT modeid, id FROM log ORDER BY bandid DESC");
if (sqlOk)
{
while (query.next() && (!cancel) )
{
bandtxt = QString();
bandFound = -1;
if (query.isValid())
{
i++;
if (( (i % step )== 0) )
{ // To update the speed I will only show the progress once each X QSOs
aux = QObject::tr("Updating mode information...\n QSO: ") + QString::number(i) + "/" + QString::number(qsos);
progress.setLabelText(aux);
progress.setValue(i);
}
bandFound = (query.value(0)).toInt();
id = (query.value(1)).toInt();
bandtxt = getModeNameFromNumber(bandFound, false);
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: mode found: " << bandtxt ;
sq = QString("SELECT id FROM modetemp WHERE name='%1'").arg(bandtxt);
sqlOk2 = query2.exec(sq);
if (sqlOk2)
{
if (query2.next())
{
if (query2.isValid())
{
bandFound = query2.value(0).toInt();
sq = QString ("UPDATE log SET modeid='%1' WHERE id='%2'").arg(bandFound).arg(id);
sqlOk3 = query3.exec(sq);
if (sqlOk3)
{
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt ;
}
else
{
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-2" ;
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes - QSOs not updated to main log" ;
errorCode = query3.lastError().nativeErrorCode();
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes - query error: " << QString::number(errorCode) ;
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastQuery: " << query3.lastQuery() ;
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastError-data: " << query3.lastError().databaseText() ;
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastError-driver: " << query3.lastError().driverText() ;
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastError-n: " << QString::number(query3.lastError().nativeErrorCode() ) ;
}
}
else
{
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: query2 not valid " ;
}
}
else
{
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: query2 not next " ;
}
}
else
{
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-1" ;
}
}
if ( progress.wasCanceled() )
{
if (alreadyCancelled)
{
}
else
{
alreadyCancelled = true;
QMessageBox msgBox;
aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
msgBox.setText(aux);
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Yes:
// Yes was clicked
cancel = true;
break;
case QMessageBox::No:
// No Save was clicked
cancel = false;
progress.setCancelButton(0);
break;
default:
// should never be reached
cancel = false;
break;
}
}
}
}
if (cancel && (!alreadyCancelled))
{
return false;
}
//qDebug() << "DataBase::updateModeIdTableLogToNewOnes: FINISHED OK" ;
return true;
}
else
{
return false;
}
}
*/
bool DataBase::updateTo007()
{// Updates the DB to 0.0.7
//qDebug() << "DataBase::updateTo007: latestRead: " << getDBVersion() ;
bool IAmIn007 = false;
bool IAmIn006 = false;
bool ErrorUpdating = false;
QString stringQuery = QString();
QSqlQuery query;
latestReaded = getDBVersion().toFloat();
bool sqlOk = false;
if (latestReaded >= 0.007f)
{
//qDebug() << "DataBase::updateTo007: - I am in 007" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTo007: - I am not in 007" ;
IAmIn007 = false;
}
while (!IAmIn007 && !ErrorUpdating)
{
while (!IAmIn006 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo007: - And I am not in 006" ;
IAmIn006 = updateTo006();
}
//qDebug() << "DataBase::updateTo007: - And I am in 006!!!!" ;
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo007: NOK-1" ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
sqlOk = updateDBVersion(softVersion, "0.007");
if (sqlOk)
{ // Version updated
IAmIn007 = updateTableLog(6);
}
else
{ // Version not updated
//qDebug() << "DataBase::updateTo007: NOK-2" ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
//DO ALL THE TASKS TO BE IN 0.007 from 0.006 HERE and set ErrorUpdating if it is not possible.
IAmIn007 = true;
}
//qDebug() << "DataBase::updateTo007: END" ;
if (!IAmIn007)
{
// emit debugLog(Q_FUNC_INFO, "3", 7);
}
return IAmIn007;
}
bool DataBase::updateTo008()
{// Updates the DB to 0.0.8
//qDebug() << "DataBase::updateTo008: latestRead: " << getDBVersion() ;
bool IAmIn008 = false;
bool IAmIn007 = false;
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.008f)
{
//qDebug() << "DataBase::updateTo008: - I am in 008" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTo008: - I am not in 008" ;
IAmIn008 = false;
}
while (!IAmIn008)
{
while (!IAmIn007 )
{
//qDebug() << "DataBase::updateTo008: - And I am not in 007" ;
IAmIn007 = updateTo007();
}
//qDebug() << "DataBase::updateTo008: - I am in 007" ;
//DO ALL THE TASKS TO BE IN 0.008 from 0.007 HERE and set ErrorUpdating if it is not possible.
IAmIn008 = updateTheModeTableAndSyncLog();
if (IAmIn008)
{
bool sqlOk = updateDBVersion(softVersion, "0.008");
if (sqlOk)
{ // Version updated
//qDebug() << "DataBase::updateTo008: - OK" ;
}
else
{ // Version not updated
//qDebug() << "DataBase::updateTo008: - NOK-3" ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
}
else
{
//qDebug() << "DataBase::updateTo008: - NOK-2" ;
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
}
//qDebug() << "DataBase::updateTo008: - END" ;
if (!IAmIn008)
{/*emit debugLog(Q_FUNC_INFO, "4", 7);*/
}
return IAmIn008;
}
bool DataBase::updateTo009()
{// Updates the DB to 0.0.9 - We add the Satellite tables
//qDebug() << "DataBase::updateTo009: latestRead: " << getDBVersion() ;
bool IAmIn009 = false;
bool IAmIn008 = false;
bool ErrorUpdating = false;
//qDebug() << "DataBase::updateTo009: Checking:" << QString::number(latestReaded) << ":" << QString::number(0.009);
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.009f)
//if ((latestReaded = 0.009) || (latestReaded > 0.009))
{
//qDebug() << "DataBase::updateTo009: - I am in 009" ;
//IAmIn009 = true;
return true;
}
else
{
//qDebug() << "DataBase::updateTo009: - I am not in 009 I am in: " << QString::number(latestReaded);
IAmIn009 = false;
}
//qDebug() << "DataBase::updateTo009: compared latestRead: " << QString::number(latestReaded) ;
while (!IAmIn009 && !ErrorUpdating)
{
while (!IAmIn008 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo009: - And I am not in 008" ;
IAmIn008 = updateTo008();
}
//qDebug() << "DataBase::updateTo009: - And I am already at least in 008" ;
if (ErrorUpdating)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
bool sqlOk = updateDBVersion(softVersion, "0.009");
if (sqlOk)
{ // Version updated
//qDebug() << "DataBase::updateTo009: - version updated" ;
//IAmIn009 = updateTableLog(6);
}
else
{ // Version not updated
//qDebug() << "DataBase::updateTo009: - version not updated" ;
}
//DO ALL THE TASKS TO BE IN 0.009 from 0.008 HERE and set ErrorUpdating if it is not possible.
if (recreateSatelliteData())
//if (createTableSatellites(true))
{
//qDebug() << "DataBase::updateTo009: - createTableSatellites OK" ;
//if (populateTableSatellites(true))
if (updateTableEntity())
{
//qDebug() << "DataBase::updateTo009: - updateTableEntity OK" ;
if (updateTheEntityTableISONames())
{
//qDebug() << "DataBase::updateTo009: - isonames updated" ;
// Now I need to update the logs table
if (updateTableLogs())
{
//qDebug() << "DataBase::updateTo009: - logs updated and Function finished successfuly!!" ;
IAmIn009 = true;
}
else
{
//qDebug() << "DataBase::updateTo009: - logs NOT updated" ;
IAmIn009 = false;
ErrorUpdating = true;
}
}
else
{
//qDebug() << "DataBase::updateTo009: - isonames NOT updated" ;
IAmIn009 = false;
ErrorUpdating = true;
}
}
else
{
ErrorUpdating = true;
IAmIn009 = false;
}
}
else
{
//qDebug() << "DataBase::updateTo009: - createTableSatellites FALSE" ;
ErrorUpdating = true;
IAmIn009 = false;
}
}
//qDebug() << "DataBase::updateTo009: - END" ;
if (!IAmIn009)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
}
return IAmIn009;
}
bool DataBase::updateTo010()
{// Updates the DB to 0.010:
// We add FT8 mode and
// AS Propagation
//qDebug() << "DataBase::updateTo010: latestRead: " << getDBVersion() ;
bool IAmIn010 = false;
bool IAmIn009 = false;
bool ErrorUpdating = false;
QString stringQuery = QString();
QSqlQuery query;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateTo010: Checking (latestRead/dbVersion):" << QString::number(latestReaded) << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.010f)
{
//qDebug() << "DataBase::updateTo010: - I am in 010" ;
IAmIn010 = true;
return true;
}
else
{
//qDebug() << "DataBase::updateTo010: - I am not in 010 I am in: " << QString::number(latestReaded);
while (!IAmIn009 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo010: - Check if I am in 009: !" ;
IAmIn009 = updateTo009();
if (IAmIn009)
{
//qDebug() << "DataBase::updateTo010: - updateTo009 returned TRUE - I am in 0.009: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateTo010: - updateTo009 returned FALSE - I am NOT in 0.009: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo010: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
bool sqlOk = execQuery(Q_FUNC_INFO, "UPDATE band SET lower = '0.1357', upper = '0.1378' WHERE name='2190M'");
if (sqlOk)
{
//qDebug() << "DataBase::updateTo010: - Band update OK" ;
}
else
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateTo010: - Band update NOK" ;
}
execQuery(Q_FUNC_INFO, QString("INSERT INTO mode (submode, name, cabrillo, deprecated) VALUES ('FT8', 'FT8', 'NO', '0')"));
execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AS', 'Aircraft Scatter')"));
if (updateDBVersion(softVersion, "0.010"))
{
//qDebug() << "DataBase::updateTo010: - We are in 010! " ;
IAmIn010 = true;
}
else
{
//qDebug() << "DataBase::updateTo010: - Failed to go to 010! " ;
IAmIn010 = false;
// emit debugLog(Q_FUNC_INFO, "1", 7);
}
//qDebug() << "DataBase::updateTo010: - END" ;
return IAmIn010;
}
bool DataBase::updateDBVersion(QString _softV, QString _dbV)
{
QString dateString = util->getDateSQLiteStringFromDate(QDate::currentDate());
//qDebug() << "DataBase::updateDBVersion: (date/SoftVersion/dbVersion): " << dateString << "/" << _softV << "/" << _dbV ;
QString stringQuery = "INSERT INTO softwarecontrol (dateupgrade, softversion, dbversion) VALUES ('" + dateString + "', '" + _softV + "', '" + _dbV + "')";
return execQuery(Q_FUNC_INFO, stringQuery);
}
bool DataBase::updateTheModeTableAndSyncLog()
{
//qDebug() << "DataBase::updateTheModeTableAndSyncLog" ;
QSqlQuery query;
createTableMode(false); // Create modetemp
populateTableMode(false); // Populate modetemp
updateModeIdFromSubModeId(); // Updates the log with the new mode IDs in each QSO
//updateModeIdTableAward(1); //DXCC
//updateModeIdTableAward(2); // WAZ
//QSqlDatabase::database().commit();
bool sqlOK = execQuery(Q_FUNC_INFO, "DROP TABLE mode");
if (sqlOK)
{
//QSqlDatabase::database().commit();
//qDebug() << "DataBase::updateTheModeTableAndSyncLog - OK - mode was dropped" ;
sqlOK = execQuery(Q_FUNC_INFO, "ALTER TABLE modetemp RENAME TO mode");
if (!sqlOK)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
}
return sqlOK;
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::updateTheModeTableAndSyncLog - ERROR - modetemp not dropped" ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
//qDebug() << "DataBase::updateTheModeTableAndSyncLog END" ;
//return true;
}
bool DataBase::recreateTableBand()
{
//qDebug() << "DataBase::recreateTableBand" ;
QSqlQuery query;
createTableBand(false); // Create modetemp
populateTableBand(false); // Populate modetemp
syncLogQSOsOnBandTableChange();
if (execQuery(Q_FUNC_INFO, "DROP TABLE band"))
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
return execQuery(Q_FUNC_INFO, "ALTER TABLE bandtemp RENAME TO band");
}
else
{
//queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
//qDebug() << "DataBase::recreateTableBand - ERROR - bandtemp not dropped" ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
//qDebug() << "DataBase::recreateTableBand END" ;
}
QMultiMap DataBase::fillCountryCodes()
{
//qDebug() << Q_FUNC_INFO;
QMultiMap countryCodes;
countryCodes.clear ();
countryCodes.insert ("mt", 246);
countryCodes.insert ("un", 247);
countryCodes.insert ("mc", 260);
countryCodes.insert ("mu", 4);
countryCodes.insert ("mu", 165);
countryCodes.insert ("mu", 207);
countryCodes.insert ("gq", 49);
countryCodes.insert ("gq", 195);
countryCodes.insert ("fj", 176);
countryCodes.insert ("fj", 489);
countryCodes.insert ("fj", 460);
countryCodes.insert ("sz", 468);
countryCodes.insert ("tn", 474);
countryCodes.insert ("vn", 293);
countryCodes.insert ("gn", 107);
countryCodes.insert ("bv", 24);
countryCodes.insert ("no", 199);
countryCodes.insert ("az", 18);
countryCodes.insert ("ge", 75);
countryCodes.insert ("me", 514);
countryCodes.insert ("lk", 315);
countryCodes.insert ("ch", 177); // ITU HQ
countryCodes.insert ("us", 289); // UN HQ
countryCodes.insert ("tl", 511); // Timor Leste
countryCodes.insert ("il", 336); // Israel
countryCodes.insert ("ly", 436); // Libya
countryCodes.insert ("cy", 215); // Cyprus
countryCodes.insert ("tz", 470); // Tanzania
countryCodes.insert ("ng", 450); // Nigeria
countryCodes.insert ("mg", 438); // Madagascar
countryCodes.insert ("mr", 444); // Mauritania
countryCodes.insert ("ne", 187); // Niger
countryCodes.insert ("tg", 484); // Togo
countryCodes.insert ("ws", 190); // Samoa
countryCodes.insert ("ug", 286); // Uganda
countryCodes.insert ("ke", 430); // Kenya
countryCodes.insert ("sn", 456); // Senegal
countryCodes.insert ("jm", 82); // Jamaica
countryCodes.insert ("es", 281); // Spain
countryCodes.insert ("ls", 432); // Lesotho
countryCodes.insert ("mw", 440); // Malawi
countryCodes.insert ("dz", 400); // Algeria
countryCodes.insert ("ye", 492); // Yemen
countryCodes.insert ("bb", 62); // Barbados
countryCodes.insert ("mv", 159); // Maldives
countryCodes.insert ("gy", 129); // Guyana
countryCodes.insert ("hr", 497); // Croatia
countryCodes.insert ("gh", 424); // Ghana
countryCodes.insert ("mt", 257); // Malta
countryCodes.insert ("zm", 482); // Zambia
countryCodes.insert ("kw", 348); // Kuwait
countryCodes.insert ("sl", 458); //Sierra Leone
countryCodes.insert ("my", 299); // West Malaysia
countryCodes.insert ("my", 46); // East Malaysia
countryCodes.insert ("np", 369); // Nepal
countryCodes.insert ("cd", 414); // Dem Rep Congo
countryCodes.insert ("bi", 404); // Burundi
countryCodes.insert ("sg", 381); // Singapore
countryCodes.insert ("rw", 454); // Rwanda
countryCodes.insert ("tt", 90); // Trinidad & Tobago
countryCodes.insert ("bw", 402);
countryCodes.insert ("to", 160);
countryCodes.insert ("om", 370);
countryCodes.insert ("bt", 306); // Bhutan
countryCodes.insert ("ae", 391); // Un Arab Emirates
countryCodes.insert ("qa", 376); // Qatar
countryCodes.insert ("bh", 304); // Bahrain
countryCodes.insert ("pk", 372); // Pakistan
countryCodes.insert ("tw", 386); // Taiwan
countryCodes.insert ("tw", 505); // Pratas Is
countryCodes.insert ("cn", 318); // China
countryCodes.insert ("nr", 157); // Nauru
countryCodes.insert ("ad", 203); // Andorra
countryCodes.insert ("gm", 422); // Gambia
countryCodes.insert ("bs", 60);
countryCodes.insert ("mz", 181); // Mozambique
countryCodes.insert ("cl", 112); // Chile
countryCodes.insert ("cl", 217); // San Felix
countryCodes.insert ("cl", 47); // Easter Is
countryCodes.insert ("cl", 125); // Juan Fernandez is
countryCodes.insert ("cu", 70); // Cuba
countryCodes.insert ("ma", 446); // Morocco
countryCodes.insert ("bo", 104); // Bolivia
countryCodes.insert ("pt", 272); // Portugal
countryCodes.insert ("pt", 256); // Madeira
countryCodes.insert ("pt", 149); // Azores
countryCodes.insert ("uy", 144); // Uruguay
countryCodes.insert ("ca", 211); // Sable Is
countryCodes.insert ("ca", 252); // St Paul is
countryCodes.insert ("ao", 401); // Angola
countryCodes.insert ("cv", 409); // Cape Verde
countryCodes.insert ("km", 411); // Comoros
countryCodes.insert ("de", 230); // Fed Rep Germany
countryCodes.insert ("ph", 375); //Philippines
countryCodes.insert ("er", 51); // Eritrea
countryCodes.insert ("ps", 510); // Palestine
countryCodes.insert ("ck", 191); // North Cook
countryCodes.insert ("ck", 234); // South Cook
countryCodes.insert ("nu", 188); // Niue
countryCodes.insert ("ba", 501); // Bosnia
countryCodes.insert ("balear", 21); // Balearic is
countryCodes.insert ("canary", 29); // Canary Is
countryCodes.insert ("ceuta", 32); // Ceuta & Melilla //TODO: Fix the flag
countryCodes.insert ("ie", 245); // Ireland
countryCodes.insert ("am", 14);
countryCodes.insert ("lr", 434);
countryCodes.insert ("ir", 330); // Iran
countryCodes.insert ("mv", 179); // Moldova
countryCodes.insert ("ee", 52); // Estonia
countryCodes.insert ("et", 53); // Ethiopia
countryCodes.insert ("by", 27); // Belarus
countryCodes.insert ("kg", 135); // Kyrgyzstan
countryCodes.insert ("tm", 280); // Turkmenistan
countryCodes.insert ("tj", 262); // Tajikistan
countryCodes.insert ("fr", 227); // France
countryCodes.insert ("fr", 79); // Guadeloupe
countryCodes.insert ("yt", 169); // Mayotte
countryCodes.insert ("fr", 516); // St Barthelemy
countryCodes.insert ("fr", 36); // Clipperton Is
countryCodes.insert ("nc", 162); // New Caledonia
countryCodes.insert ("nc", 512); // Chesterfield Is
countryCodes.insert ("mq", 84); // Martinique
countryCodes.insert ("pf", 175); // French Polynesia
countryCodes.insert ("pf", 508); // Austral Is
countryCodes.insert ("pm", 277); // St Pierre & Miquelon
countryCodes.insert ("re", 453); //Reunion Is
countryCodes.insert ("fr", 213); // St Marteen
countryCodes.insert ("fr", 99); // Glorioso is
countryCodes.insert ("fr", 124); // Juan de nova, Europa
countryCodes.insert ("fr", 276); // Tromelin - TODO: Add the wikipedia flag
countryCodes.insert ("fr", 41); // Crozet
countryCodes.insert ("fr", 131); // Kerguelen
//TODO: Add the wikipedia flag http://es.wikipedia.org/wiki/Tierras_Australes_y_Ant%C3%A1rticas_Francesas
countryCodes.insert ("fr", 10); //Amsterdam & St Paul is
//TODO: Add the wikipedia flag
countryCodes.insert ("wf", 298); // Wallis & Futuna is
countryCodes.insert ("gf", 63); // French Guiana
//TODO: Add the wikipedia flag
countryCodes.insert ("england", 223); // England
countryCodes.insert ("gb", 114); //Isle of Man
//TODO: Add the wikipedia flag
countryCodes.insert ("northernireland", 265); // Northern Ireland
countryCodes.insert ("gb", 122); // Jersey
countryCodes.insert ("scotland", 279); // Scotland
countryCodes.insert ("scotland", 1279); // Shetland is (Scotland)
countryCodes.insert ("gb", 106); // Guernsey
//TODO: Add the wikipedia flag
countryCodes.insert ("wales", 294); // Wales
countryCodes.insert ("sb", 185); // Solomon
countryCodes.insert ("sb", 507); // Temotu Province
countryCodes.insert ("hu", 239); // Hungary
countryCodes.insert ("ch", 287); // Switzerland
countryCodes.insert ("li", 251); // Liechtenstein
countryCodes.insert ("ec", 120); // Ecuador
countryCodes.insert ("ec", 71); // Galapagos Is
countryCodes.insert ("ht", 78); // Haiti
countryCodes.insert ("do", 72); // Dominican Rep
countryCodes.insert ("co", 116); // Colombia
countryCodes.insert ("co", 216); // San Andres & Providencia
countryCodes.insert ("co", 161); // Malpelo
countryCodes.insert ("kr", 137); // Rep Korea
countryCodes.insert ("pa", 88); // Panama
countryCodes.insert ("hn", 80); // Honduras
countryCodes.insert ("th", 387); // Thailand
countryCodes.insert ("va", 295);
countryCodes.insert ("sa", 378); // Saudi Arabia
countryCodes.insert ("it", 248); // Italy
countryCodes.insert ("it", 1248); // African Italy
countryCodes.insert ("it", 2248); // Sicily
countryCodes.insert ("it", 225); // Sardinia
countryCodes.insert ("dj", 382); // Djibouti
countryCodes.insert ("gd", 77); // Grenada
countryCodes.insert ("gw", 109); // Guinea-Bissau
countryCodes.insert ("lc", 97); // St Lucia
countryCodes.insert ("dm", 95); // Dominica
countryCodes.insert ("vc", 98); // St Vicent
countryCodes.insert ("jp", 339); // Japan
countryCodes.insert ("jp", 177); // Minami Torishima
countryCodes.insert ("jp", 192); // Ogasawara
countryCodes.insert ("mn", 363); // Mongolia
countryCodes.insert ("sj", 259); // Svalbard
countryCodes.insert ("sj", 1259); // Svalbard
countryCodes.insert ("sj", 118); // Jan Mayen
countryCodes.insert ("jo", 342);
countryCodes.insert ("us", 291);
countryCodes.insert ("us", 105);
countryCodes.insert ("mp", 166);
countryCodes.insert ("us", 20);
countryCodes.insert ("gu", 103);
countryCodes.insert ("us", 123);
countryCodes.insert ("us", 174);
countryCodes.insert ("us", 197);
countryCodes.insert ("us", 134);
countryCodes.insert ("us", 110); // Hawaii
//TODO: Add the wikipedia flag
countryCodes.insert ("us", 138); // Kure is
countryCodes.insert ("as", 9); // American Samoa
countryCodes.insert ("as", 515); // Swains is
countryCodes.insert ("us", 297); // Wake is
countryCodes.insert ("us", 6); // Alaska
countryCodes.insert ("us", 182); // Navassa Is
countryCodes.insert ("vi", 285); // Us Virgin is
countryCodes.insert ("pr", 202); // Puerto Rico
countryCodes.insert ("us", 43); // Desecheo Is
countryCodes.insert ("no", 266); // Norway
countryCodes.insert ("ar", 100); // Argentina
countryCodes.insert ("lu", 254); // Luxembourg
countryCodes.insert ("lt", 146); // Lithuania
countryCodes.insert ("bg", 212); // Bulgaria
countryCodes.insert ("pe", 136); // Peru
countryCodes.insert ("lb", 354); // Lebanon
countryCodes.insert ("at", 206); // Austria & Viena Intl HQ
countryCodes.insert ("fi", 224); // Findland
countryCodes.insert ("fi", 5); // Aland is
countryCodes.insert ("fi", 167); // Market Reef
countryCodes.insert ("cz", 503); // Czech Rep
countryCodes.insert ("sk", 504); // Slovak Rep
countryCodes.insert ("be", 209); // Belgium
countryCodes.insert ("gl", 237); // Greenland
countryCodes.insert ("dk", 222); // Faroe is
//TODO: Add the wikipedia flag
countryCodes.insert ("dk", 221); // Denmark
countryCodes.insert ("pg", 163); // Papua New Guinea
countryCodes.insert ("aw", 91); // Aruba
countryCodes.insert ("kp", 344); //Dpr Korea
countryCodes.insert ("nl", 263); // Netherlands
countryCodes.insert ("cw", 517); // Curacao
//TODO: Add the wikipedia flag
countryCodes.insert ("bq", 520); // Bonaire
//TODO: Add the wikipedia flag
countryCodes.insert ("nl", 519); // Saba & St Eustatius
//TODO: Add the wikipedia flag
countryCodes.insert ("shm", 518); // Sint Marteen
//TODO: Add the wikipedia flag
countryCodes.insert ("br", 108); // Brazil
countryCodes.insert ("br", 56); // Fernando de Noronha
countryCodes.insert ("br", 253); // St Peter & St Paul
countryCodes.insert ("br", 273); // Trindade & Martim Vaz
countryCodes.insert ("sr", 140); // Suriname
countryCodes.insert ("ru", 61); // Franz Josef Land
countryCodes.insert ("eh", 302); // Western Sahara
//TODO: Add the wikipedia flag
countryCodes.insert ("bd", 305); // Bangladesh
countryCodes.insert ("si", 499); // Slovenia
countryCodes.insert ("sc", 379); // Seychelles
countryCodes.insert ("st", 219); // Sao Tome & Principe
countryCodes.insert ("se", 284); // Sweden
countryCodes.insert ("pl", 269); // Poland
countryCodes.insert ("sd", 466); // Sudan
countryCodes.insert ("eg", 478); // Egypt
countryCodes.insert ("gr", 236); // Greece
countryCodes.insert ("gr", 180); // Mount Athos
countryCodes.insert ("gr", 45); // Dodecanese
countryCodes.insert ("gr", 40); // Crete
countryCodes.insert ("tv", 282); // Tuvalu
countryCodes.insert ("ki", 301); // Western Kiribati
countryCodes.insert ("ki", 31); // Central Kiribati
countryCodes.insert ("ki", 48); // Eastern Kiribati
countryCodes.insert ("ki", 490); // Banaba is
countryCodes.insert ("so", 232); // Somalia
countryCodes.insert ("sm", 278); // San Marino
countryCodes.insert ("pw", 22); // Palau
countryCodes.insert ("tr", 390); // Turkey
countryCodes.insert ("tr", 1390); // European Turkey
countryCodes.insert ("is", 242); // Iceland
countryCodes.insert ("gt", 76); // Guatemala
//TODO: Add the wikipedia flag
countryCodes.insert ("cr", 308); // Costa Rica
countryCodes.insert ("cr", 37); // Coco is
countryCodes.insert ("cm", 406); // Cameroon
countryCodes.insert ("fr", 214); // Corsica
// TODO: Add the wikipedia flag
countryCodes.insert ("cf", 408); // Central African Rep
countryCodes.insert ("cg", 412); // Rep of Congo
countryCodes.insert ("ga", 420); // Gabon
countryCodes.insert ("td", 410); // Chad
countryCodes.insert ("ci", 428); // Cote d'Ivoire
countryCodes.insert ("bj", 416); // Benin
countryCodes.insert ("ml", 442); // Mali
countryCodes.insert ("ru", 54); // European Russia
countryCodes.insert ("ru", 15); // Asiatic Russia
countryCodes.insert ("ru", 126); // Kaliningrad
countryCodes.insert ("uz", 292); // Uzbekistan
countryCodes.insert ("kz", 130); // Kazakhstan
countryCodes.insert ("ua", 288); // Ukraine
countryCodes.insert ("ag", 94); // Antigua & Barbuda
countryCodes.insert ("bz", 66); // Belize
countryCodes.insert ("kn", 249); // St Kitts & Nevis
countryCodes.insert ("na", 464); // Namibia
countryCodes.insert ("fm", 173); // Micronesia
countryCodes.insert ("fm", 168); // Marshall Is
countryCodes.insert ("bn", 345); // Brunei Darusalam
countryCodes.insert ("ca", 1); // Canada
countryCodes.insert ("au", 150); // Australia
countryCodes.insert ("hm", 111); // Heard Is
countryCodes.insert ("au", 153); // Macquarie is
countryCodes.insert ("cc", 38); // Cocos / Keeling is
countryCodes.insert ("au", 147); // Lord Howe is
countryCodes.insert ("au", 171); // Mellish Reed
countryCodes.insert ("nf", 189); // Norkfolk is
countryCodes.insert ("au", 303); // Willis Is
countryCodes.insert ("cx", 35); // Christmas is
countryCodes.insert ("ai", 12); // Anguilla
countryCodes.insert ("ms", 96); // Montserrat
countryCodes.insert ("vg", 65); // British is
countryCodes.insert ("tc", 89); // Turks & Caicos is
countryCodes.insert ("pn", 172); // Pitcairn
countryCodes.insert ("gb", 513); // Ducie is
countryCodes.insert ("fk", 141); // Falkland is
countryCodes.insert ("gs", 235); // South Georgia is
countryCodes.insert ("southbritish", 241); // South Shetland is
countryCodes.insert ("un", 238); // South Orkney is
countryCodes.insert ("gs", 240); // South Sandwich Is
countryCodes.insert ("bm", 64); // Bermuda
countryCodes.insert ("io", 33); // Chagos is
countryCodes.insert ("hk", 321); // Hong Kong
countryCodes.insert ("in", 324); // India
countryCodes.insert ("in", 11); // Andaman & Nicobar
countryCodes.insert ("in", 142); // Lakshadweep Is
countryCodes.insert ("mx", 50); // Mexico
countryCodes.insert ("mx", 204); // Revilagigedo
countryCodes.insert ("bf", 480); // Burkina Faso
countryCodes.insert ("kh", 312); // Cambodia
countryCodes.insert ("la", 143); // Laos
countryCodes.insert ("mo", 152); // Macao
countryCodes.insert ("mm", 309); // Myanmar
countryCodes.insert ("af", 3); // Afganistan
countryCodes.insert ("id", 327); // Indonesia
countryCodes.insert ("iq", 333); // Iraq
countryCodes.insert ("vu", 158); // Vanuatu
countryCodes.insert ("sy", 384); // Syria
countryCodes.insert ("lv", 145); // Latvia
countryCodes.insert ("ni", 86); // Nicaragua
countryCodes.insert ("ro", 275); // Romania
countryCodes.insert ("sv", 74); // El Salvador
countryCodes.insert ("rs", 296); // Serbia
countryCodes.insert ("ve", 148); // Venezuela
countryCodes.insert ("ve", 17); // Aves Is
countryCodes.insert ("zw", 452); // Zimbabwe
countryCodes.insert ("mk", 502); // Macedonia
countryCodes.insert ("ss", 521); //Rep South Sudan
countryCodes.insert ("al", 7); // Albania
countryCodes.insert ("gi", 233); // Gibraltar
countryCodes.insert ("gb", 283); // UK Base Aereas Cyprus
countryCodes.insert ("sh", 250); // St Helena
countryCodes.insert ("sh", 205); // Ascension is
countryCodes.insert ("sh", 274); // Tristan da Cunha & Gough is
countryCodes.insert ("ky", 69); // Cayman Is
countryCodes.insert ("tk", 270); // Tokelau Is
countryCodes.insert ("marquesas", 509); // Marquesas Is
countryCodes.insert ("nz", 170); // New Zeland
countryCodes.insert ("nz", 34); // Chatham Is
countryCodes.insert ("nz", 133); // Kermadec is
countryCodes.insert ("nz", 16); // Auckland & Campbell is
countryCodes.insert ("py", 132); // Paraguay
countryCodes.insert ("za", 462); // South Africa
countryCodes.insert ("za", 201); // Pr Edward & Marion Is
countryCodes.insert ("xk", 522); // Kosovo
// Countries without flag or controversial - Data is added just to keep the DB filled-up
countryCodes.insert ("un", 506); // Scarboroug Reef
countryCodes.insert ("un", 13); // Antartica
return countryCodes;
}
bool DataBase::updateTheEntityTableISONames()
{
//qDebug() << "DataBase::updateTheEntityTableISONames" ;
QSqlQuery query;
QString sq;
//First of all we will check if the entity table does contain data. We can't update something non existent!
if (!hasTheTableData("entity"))
{
//qDebug() << Q_FUNC_INFO << " : Entity has NO data";
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
QMultiMap countryCodes;
countryCodes.clear ();
countryCodes = fillCountryCodes ();
foreach (const QString &str, countryCodes.uniqueKeys()) {
foreach (int i, countryCodes.values(str))
{
if (!updateEntity (str, i))
{
//qDebug() << Q_FUNC_INFO << " : Update entity failed: " << str;
return false;
}
//qDebug() << str << ':' << i;
}
}
//qDebug() << "DataBase::updateTheEntityTableISONames-END" ;
return true;
}
bool DataBase::updateEntity (const QString &_codeString, const int _code)
{
//qDebug() << Q_FUNC_INFO << "ISOCode: " << _codeString << " - int: " << QString::number(_code);
QString sq = QString ("UPDATE entity SET isoname='%1' WHERE dxcc='%2'").arg(_codeString).arg(_code);
//TODO Capture and manage the error
return execQuery(Q_FUNC_INFO, sq);
}
bool DataBase::isTheTableExisting(const QString &_tableName)
{
QSqlQuery query;
QString sq = QString("SELECT name FROM sqlite_master WHERE name='%1'").arg(_tableName);
bool sqlOK = query.exec(sq);
if (sqlOK)
{
if (query.next())
{
if (query.isValid())
{
int _n = (query.value(0)).toInt();
query.finish();
if (_n > 0)
{
//qDebug() << "DataBase::isTheTableExisting - Table Exists" ;
return true;
}
else
{
//qDebug() << "DataBase::isTheTableExisting - Table does not Exist" ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
}
}
else
{
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
bool DataBase::hasTheTableData(const QString &_tableName)
{
//qDebug() << "DataBase::hasTheTableData" << _tableName ;
QSqlQuery query;
QString stringQuery = QString("SELECT count(id) FROM %1").arg(_tableName);
bool sqlOK = query.exec(stringQuery);
if (sqlOK)
{
query.next();
if (query.isValid())
{
//qDebug() << "DataBase::hasTheTableData - valid" ;
int _num = (query.value(0)).toInt();
query.finish();
if (_num > 0)
{
//qDebug() << "DataBase::hasTheTableData - DB Exists" ;
return true;
}
else
{
//qDebug() << "DataBase::hasTheTableData - DB does not Exist" ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
else
{
//qDebug() << "DataBase::hasTheTableData - not valid" ;
query.finish();
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
}
else
{
//qDebug() << "DataBase::hasTheTableData: LastQuery: " << query.lastQuery() ;
//qDebug() << "DataBase::hasTheTableData: LastError-data: " << query.lastError().databaseText() ;
//qDebug() << "DataBase::hasTheTableData: LastError-driver: " << query.lastError().driverText() ;
//qDebug() << "DataBase::hasTheTableData LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) ;
//qDebug() << "DataBase::updateTheEntityTableISONames" ;
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
//qDebug() << "DataBase::isTheDBCreated: END FALSE" ;
//query.finish();
//return false;
}
bool DataBase::updateTo011()
{// Updates the DB to 0.011:
// We add FT8 mode and
// AS Propagation
//qDebug() << "DataBase::updateTo011: latestRead: " << getDBVersion() ;
bool IAmIn011 = false;
bool IAmIn010 = false;
QString stringQuery = QString();
//QSqlQuery query;
//bool sqlOk = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateTo011: Checking (latestRead/dbVersion):" << QString::number(latestReaded) << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.011f)
{
//qDebug() << "DataBase::updateTo011: - I am in 011" ;
IAmIn011 = true;
return true;
}
else
{
//qDebug() << "DataBase::updateTo011: - I am not in 0.012 I am in: " << QString::number(latestReaded);
bool ErrorUpdating = false;
while (!IAmIn010 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo011: - Check if I am in 010: !" ;
IAmIn010 = updateTo010();
if (IAmIn010)
{
//qDebug() << "DataBase::updateTo011: - updateTo010 returned TRUE - I am in 0.010: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateTo011: - updateTo009 returned FALSE - I am NOT in 0.010: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo011: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
if (!recreateSatelliteData())
{
//qDebug() << "DataBase::updateTo011: - Sats update NOK " ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
if (!recreateTableDXCC())
{
//qDebug() << "DataBase::updateTo011: - recreateTableDXCC NOK " ;
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
if (!recreateTableWAZ())
{
//qDebug() << "DataBase::updateTo011: - recreateTableWAZ NOK " ;
// emit debugLog(Q_FUNC_INFO, "4", 7);
return false;
}
if(!execQuery(Q_FUNC_INFO, "INSERT INTO mode (submode, name, cabrillo, deprecated) VALUES ('MSK144', 'MSK144', 'NO', '0')"))
{
//qDebug() << "DataBase::updateTo011: - MSK NOK " ;
// emit debugLog(Q_FUNC_INFO, "5", 7);
return false;
}
if (!recreateTableLog())
{
//qDebug() << "DataBase::updateTo011: - Failed to recreate Table Log " ;
// emit debugLog(Q_FUNC_INFO, "6", 7);
return false;
}
if (updateDBVersion(softVersion, "0.011"))
{
//qDebug() << "DataBase::updateTo011: - We are in 011! " ;
IAmIn011 = true;
}
else
{
//qDebug() << "DataBase::updateTo011: - Failed to go to 011! " ;
IAmIn011 = false;
}
if (!updateAwardDXCCTable())
{
//qDebug() << "DataBase::updateTo011: - updateAwardDXCCTable NOK " ;
IAmIn011 = false;
// emit debugLog(Q_FUNC_INFO, "7", 7);
return false;
}
if (!updateAwardWAZTable())
{
//qDebug() << "DataBase::updateTo011: - updateAwardWAZTable NOK " ;
IAmIn011 = false;
}
//qDebug() << "DataBase::updateTo011: - END" ;
if (!IAmIn011)
{// emit debugLog(Q_FUNC_INFO, "8", 7);
}
return IAmIn011;
}
bool DataBase::updateTo012()
{
// Updates the DB to 0.012:
// Change the table qsl_via to qsl_via_enumeration
// Solve the supportedContest table missing bug in some deployments
//qDebug() << "DataBase::updateTo012: latestRead: " << getDBVersion() ;
bool IAmIn011 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateTo012: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.012f)
{
//qDebug() << "DataBase::updateTo012: - I am in 012" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTo012: - I am not in 0.012 I am in: " << getDBVersion() ;
while (!IAmIn011 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo012: - Check if I am in 011: !" ;
IAmIn011 = updateTo011();
if (IAmIn011)
{
//qDebug() << "DataBase::updateTo012: - updateTo011 returned TRUE - I am in 0.011: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateTo012: - updateTo011 returned FALSE - I am NOT in 0.011: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo012: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
//bool sqlOK = false;
if (isTheTableExisting("supportedcontest"))
{
bool sqlOK = execQuery(Q_FUNC_INFO, "DROP TABLE supportedcontest");
if (sqlOK)
{
if (createTableSupportedContest())
{
sqlOK = recreateSupportedContest();
}
else
{
//qDebug() << "DataBase::updateTo012: UPDATED NOK-1!" ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
}
}
else
{
if (createTableSupportedContest())
{
if (!recreateSupportedContest())
{
//qDebug() << "DataBase::updateTo012: UPDATED NOK-2!" ;
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
}
}
if (updateDBVersion(softVersion, "0.012"))
{
//qDebug() << "DataBase::updateTo012: - We are in 012! " ;
}
else
{
//qDebug() << "DataBase::updateTo011: - Failed to go to 012! " ;
// emit debugLog(Q_FUNC_INFO, "4", 7);
return false;
}
//qDebug() << "DataBase::updateTo012: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo013()
{
// Updates the DB to 0.013:
// Change the table qsl_via to qsl_via_enumeration
// Solve the supportedContest table missing bug in some deployments
//qDebug() << "DataBase::updateTo013: latestRead: " << getDBVersion() ;
bool IAmIn012 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateTo013: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.013f)
{
//qDebug() << "DataBase::updateTo013: - I am in 013" ;
return true;
}
else
{
//qDebug() << "DataBase::updateTo013: - I am not in 0.013 I am in: " << getDBVersion() ;
while (!IAmIn012 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateTo013: - Check if I am in 012: !" ;
IAmIn012 = updateTo012();
if (IAmIn012)
{
//qDebug() << "DataBase::updateTo013: - updateTo012 returned TRUE - I am in 0.012: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateTo013: - updateTo011 returned FALSE - I am NOT in 0.012: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateTo013: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!recreateSupportedContest())
{
// emit debugLog(Q_FUNC_INFO, "2", 7);
/*emit debugLog(Q_FUNC_INFO, "0", 7);*/
return false;
}
execQuery(Q_FUNC_INFO, "DROP TABLE IF exists qsl_via");
if (createTableQSL_Via_enumeration())
{
if (!populateTableQSL_Via_enumeration())
{
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
}
else
{
// emit debugLog(Q_FUNC_INFO, "4", 7);
return false;
}
if (updateDBVersion(softVersion, "0.013"))
{
//qDebug() << "DataBase::updateTo013: - We are in 013! " ;
}
else
{
//qDebug() << "DataBase::updateTo013: - Failed to go to 013! " ;
// emit debugLog(Q_FUNC_INFO, "5", 7);
return false;
}
//qDebug() << "DataBase::updateTo013: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo014()
{
// Updates the DB to 0.014:
// Updates the Satellite DB
//qDebug() << "DataBase::updateto014: latestRead: " << getDBVersion() ;
bool IAmIn013 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateto014: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.014f)
{
//qDebug() << "DataBase::updateto014: - I am in 013" ;
return true;
}
else
{
//qDebug() << "DataBase::updateto014: - I am not in 0.013 I am in: " << getDBVersion() ;
while (!IAmIn013 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateto014: - Check if I am in 013: !" ;
IAmIn013 = updateTo013();
if (IAmIn013)
{
//qDebug() << "DataBase::updateto014: - updateTo012 returned TRUE - I am in 0.013: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateto014: - updateTo011 returned FALSE - I am NOT in 0.013: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateto014: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!recreateSatelliteData())
{
//qDebug() << "DataBase::updateTo014: - Sats update NOK " ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
if (updateDBVersion(softVersion, "0.014"))
{
//qDebug() << "DataBase::updateto014: - We are in 013! " ;
}
else
{
//qDebug() << "DataBase::updateto014: - Failed to go to 013! " ;
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
//qDebug() << "DataBase::updateTo014: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo015()
{
// Updates the DB to 0.015:
// Adds the FT4 mode
//qDebug() << "DataBase::updateto015: latestRead: " << getDBVersion() ;
bool IAmIn014 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateto015: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.015f)
{
//qDebug() << "DataBase::updateto015: - I am in 013" ;
return true;
}
else
{
//qDebug() << "DataBase::updateto014: - I am not in 0.014 I am in: " << getDBVersion() ;
while (!IAmIn014 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateto015: - Check if I am in 014: !" ;
IAmIn014 = updateTo014();
if (IAmIn014)
{
//qDebug() << "DataBase::updateto015: - updateTo013 returned TRUE - I am in 0.014: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateto015: - updateTo011 returned FALSE - I am NOT in 0.014: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateto015: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (updateTheModeTableAndSyncLog())
{
//qDebug() << "DataBase::updateTo015: - updateTheModeTableAndSyncLog OK" ;
}
else
{
//qDebug() << "DataBase::updateTo015: UPDATED NOK!(9)" ;
//ErrorUpdating = true;
}
if (updateDBVersion(softVersion, "0.015"))
{
//qDebug() << "DataBase::updateto015: - We are in 015! " ;
}
else
{
//qDebug() << "DataBase::updateto015: - Failed to go to 014! " ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
//qDebug() << "DataBase::updateTo015: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo016()
{
// Updates the DB to 0.016:
// Updates the Satellite DB
//qDebug() << "DataBase::updateto016: latestRead: " << getDBVersion() ;
bool IAmIn015 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateto016: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.016f)
{
//qDebug() << "DataBase::updateto016: - I am in 015" ;
return true;
}
else
{
//qDebug() << "DataBase::updateto016: - I am not in 0.015 I am in: " << getDBVersion() ;
while (!IAmIn015 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateto014: - Check if I am in 015: !" ;
IAmIn015 = updateTo015();
if (IAmIn015)
{
//qDebug() << "DataBase::updateto016: - updateTo015 returned TRUE - I am in 0.015: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateto016: - updateTo015 returned FALSE - I am NOT in 0.015: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateto016: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!recreateSatelliteData())
{
//qDebug() << "DataBase::updateTo016: - Sats update NOK " ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
if (updateDBVersion(softVersion, "0.016"))
{
//qDebug() << "DataBase::updateto014: - We are in 016! " ;
}
else
{
//qDebug() << "DataBase::updateto014: - Failed to go to 016! " ;
// emit debugLog(Q_FUNC_INFO, "3", 7);
return false;
}
//qDebug() << "DataBase::updateTo016: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo017()
{
// Updates the DB to 0.017:
// Updates the Satellite DB
//qDebug() << "DataBase::updateto017: latestRead: " << getDBVersion() ;
bool IAmIn016 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateto017: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.017f)
{
//qDebug() << "DataBase::updateto017: - I am in 017" ;
return true;
}
else
{
//qDebug() << "DataBase::updateto017: - I am not in 0.017 I am in: " << getDBVersion() ;
while (!IAmIn016 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateto017: - Check if I am in 016: !" ;
IAmIn016 = updateTo016();
if (IAmIn016)
{
//qDebug() << "DataBase::updateto017: - updateTo016 returned TRUE - I am in 0.016: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateto017: - updateTo016 returned FALSE - I am NOT in 0.016: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateto017: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
// Query to remove the "/" from a Date: update log set qso_date = replace(qso_date, '/', '')
// Query to remove the ":" from the Time: update log set time_on = replace(time_on, ':', '')
// Query to join columns:
// update log set qso_date = replace((SELECT qso_date from log)||'-'||time_on, '', '')
/*
PROCEDURE: Move to SQLITE - datetime type: // 2020-01-01 10:12:01
// Query to remove the "/" from a Date: update log set qso_date = replace(qso_date, '/', '-')
// Join: SELECT qso_date || ' ' || time_on from log
UPDATE logtemp SET qso_date = (SELECT qso_date || ' ' || time_on FROM log)
*/
/*
QString stringQuery;
stringQuery = "update log set qso_date = replace((SELECT qso_date from log)||'-'||time_on, '', '')";
//UPDATE log set qso_date = qso_date ||'-'||time_on
bool sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{return false;}
*/
// Modify the qso_date with the time_on data with the right format
QString stringQuery;
stringQuery = "UPDATE log set qso_date = replace(qso_date ||' '||time_on, '/', '-')";
bool sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "2", 7);*/return false;}
stringQuery = "UPDATE log set qso_date_off = replace(qso_date_off, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "3", 7);*/return false;}
stringQuery = "UPDATE log set qslsdate = replace(qslsdate, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "4", 7);*/return false;}
stringQuery = "UPDATE log set qslrdate = replace(qslrdate, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "5", 7);*/return false;}
stringQuery = "UPDATE log set lotw_qslsdate = replace(lotw_qslsdate, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "6", 7);*/return false;}
stringQuery = "UPDATE log set lotw_qslrdate = replace(lotw_qslrdate, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "7", 7);*/return false;}
stringQuery = "UPDATE log set eqsl_qslrdate = replace(eqsl_qslrdate, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "8", 7);*/return false;}
stringQuery = "UPDATE log set eqsl_qslsdate = replace(eqsl_qslsdate, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "9", 7);*/return false;}
stringQuery = "UPDATE log set hrdlog_qso_upload_date = replace(hrdlog_qso_upload_date, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "10", 7);*/return false;}
stringQuery = "UPDATE log set hrdlog_qso_upload_date = replace(hrdlog_qso_upload_date, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "11", 7);*/return false;}
stringQuery = "UPDATE log set clublog_qso_upload_date = replace(clublog_qso_upload_date, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "12", 7);*/return false;}
stringQuery = "UPDATE log set qrzcom_qso_upload_date = replace(qrzcom_qso_upload_date, '/', '-')";
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{/*emit debugLog(Q_FUNC_INFO, "13", 7);*/return false;}
if (!recreateTableLog())
{
//qDebug() << "DataBase::updateTo017: - Failed to recreate Table Log " ;
// emit debugLog(Q_FUNC_INFO, "14", 7);
return false;
}
//qDebug() << "DataBase::updateTo017: - Recreated Table Log " ;
/*
else
{
//qDebug() << "DataBase::updateTo017: - Table log recreated OK" ;
}
*/
// REMOVE THE FOLLOWING LINE ONCE THIS FUNCTION HAS BEEN UPDATED
//return false;
// If everything went OK, we update the DB number.
if (updateDBVersion(softVersion, "0.017"))
{
//qDebug() << "DataBase::updateto017: - We are in 017! " ;
}
else
{
//qDebug() << "DataBase::updateto017: - Failed to go to 017! " ;
// emit debugLog(Q_FUNC_INFO, "15", 7);
return false;
}
//qDebug() << "DataBase::updateTo017: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo018()
{
// Updates the DB to 0.018:
// Adds the Subdivisions
//qDebug() << "DataBase::updateto018: latestRead: " << getDBVersion() ;
bool IAmIn017 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << "DataBase::updateto018: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.018f)
{
//qDebug() << "DataBase::updateto018: - I am in 018" ;
return true;
}
else
{
//qDebug() << "DataBase::updateto018: - I am not in 0.018 I am in: " << getDBVersion() ;
while (!IAmIn017 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateto017: - Check if I am in 017: !" ;
IAmIn017 = updateTo017();
if (IAmIn017)
{
//qDebug() << "DataBase::updateto018: - updateTo017 returned TRUE - I am in 0.017: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateto017: - updateTo017 returned FALSE - I am NOT in 0.017: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateto018: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
bool ok = createTableSubdivision(true);
if (!ok)
{
return false;
}
// REMOVE THE FOLLOWING LINE ONCE THIS FUNCTION HAS BEEN UPDATED
//return false;
// If everything went OK, we update the DB number.
if (updateDBVersion(softVersion, "0.018"))
{
//qDebug() << "DataBase::updateto018: - We are in 018! " ;
}
else
{
//qDebug() << "DataBase::updateto018: - Failed to go to 018! " ;
// emit debugLog(Q_FUNC_INFO, "15", 7);
return false;
}
//qDebug() << "DataBase::updateTo018: UPDATED OK!" ;
return true;
}
bool DataBase::updateTo019()
{// Adds FTS4 and FST4W modes
// Adds RS-44 sat
//qDebug() << Q_FUNC_INFO << " " << getDBVersion() ;
bool IAmIn018 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.019f)
{
//qDebug() << Q_FUNC_INFO << " : - I am in 019" ;
return true;
}
else
{
while (!IAmIn018 && !ErrorUpdating)
{
IAmIn018 = updateTo018();
if (!IAmIn018)
{
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (updateTheModeTableAndSyncLog() && recreateSatelliteData())
{
//qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" ;
}
else
{
//qDebug() << Q_FUNC_INFO << " : UPDATED NOK!(9)" ;
return false;
}
if (updateDBVersion(softVersion, "0.019"))
{
//qDebug() << Q_FUNC_INFO << " : - We are in 019! " ;
}
else
{
//qDebug() << Q_FUNC_INFO << " : - Failed to go to 018! " ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
//qDebug() << Q_FUNC_INFO << " : UPDATED OK!" ;
return true;
}
bool DataBase::updateTo022()
{// Adds Q65 mode
//qDebug() << Q_FUNC_INFO << " " << getDBVersion() ;
bool IamInPreviousVersion = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.022f)
{
//qDebug() << Q_FUNC_INFO << " : - I am in 022" ;
return true;
}
while (!IamInPreviousVersion && !ErrorUpdating)
{
IamInPreviousVersion = updateTo021();
if (!IamInPreviousVersion)
{
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!updateTheModeTableAndSyncLog() )
{
//qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" ;
return false;
}
if (!updateDBVersion(softVersion, QString::number(0.022)))
{
//qDebug() << Q_FUNC_INFO << " : - Failed to go to the previous version! " ;
return false;
}
//qDebug() << Q_FUNC_INFO << " : - We are in the updated version! " ;
//qDebug() << Q_FUNC_INFO << " : UPDATED OK!" ;
return true;
}
bool DataBase::updateTo021()
{// Adds 5M & 8M bands
//qDebug() << Q_FUNC_INFO << " " << getDBVersion() ;
bool IamInPreviousVersion = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.021f)
{
//qDebug() << Q_FUNC_INFO << " : - I am in 019" ;
return true;
}
while (!IamInPreviousVersion && !ErrorUpdating)
{
IamInPreviousVersion = updateTo019();
if (!IamInPreviousVersion)
{
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!recreateTableBand ())
{
//qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" ;
return false;
}
if (!updateDBVersion(softVersion, QString::number(0.021)))
{
//qDebug() << Q_FUNC_INFO << " : - Failed to go to the previous version! " ;
return false;
}
//qDebug() << Q_FUNC_INFO << " : - We are in the updated version! " ;
//qDebug() << Q_FUNC_INFO << " : UPDATED OK!" ;
return true;
}
bool DataBase::updateTo023()
{// Recreates the table band
//qDebug() << Q_FUNC_INFO << " " << getDBVersion() ;
bool IamInPreviousVersion = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.023f)
{
//qDebug() << Q_FUNC_INFO << " : - I am in 023" ;
return true;
}
while (!IamInPreviousVersion && !ErrorUpdating)
{
IamInPreviousVersion = updateTo022();
if (!IamInPreviousVersion)
{
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!recreateTableBand())
{
//qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" ;
return false;
}
if (!updateDBVersion(softVersion, QString::number(0.023)))
{
//qDebug() << Q_FUNC_INFO << " : - Failed to go to the previous version! " ;
return false;
}
//qDebug() << Q_FUNC_INFO << " : - We are in the updated version! " ;
//qDebug() << Q_FUNC_INFO << " : UPDATED OK!" ;
return true;
}
bool DataBase::updateTo024()
{// Recreates the table band
//qDebug() << Q_FUNC_INFO << " " << getDBVersion() ;
bool IamInPreviousVersion = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
//qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) ;
if (latestReaded >= 0.024f)
{
//qDebug() << Q_FUNC_INFO << " : - I am in 024" ;
return true;
}
while (!IamInPreviousVersion && !ErrorUpdating)
{
IamInPreviousVersion = updateTo023();
if (!IamInPreviousVersion)
{
//qDebug() << Q_FUNC_INFO << " : Update to previous version failed";
return false;
}
}
// Now I am in the previous version and I can update the DB.
if (!updateTheEntityTableISONames())
{
//qDebug() << Q_FUNC_INFO << " : Update of entityTableIsonames failed";
return false;
}
if (updateDBVersion(softVersion, QString::number(dbVersion)))
{
//qDebug() << Q_FUNC_INFO << " : - Failed to go to the previous version! " ;
return false;
}
//qDebug() << Q_FUNC_INFO << " : - We are in the updated version! " ;
//qDebug() << Q_FUNC_INFO << " : UPDATED OK!" ;
return true;
}
bool DataBase::updateTo025()
{
// Updates the DB to 0.025:
// Adds the mods on ADIF 3.1.3
//qDebug() << "DataBase::updateto025: latestRead: " << getDBVersion() ;
bool IAmIn024 = false;
bool ErrorUpdating = false;
latestReaded = getDBVersion().toFloat();
if (latestReaded >= 0.025f)
{
//qDebug() << "DataBase::updateto025: - I am in 023" ;
return true;
}
else
{
//qDebug() << "DataBase::updateto014: - I am not in 0.014 I am in: " << getDBVersion() ;
while (!IAmIn024 && !ErrorUpdating)
{
//qDebug() << "DataBase::updateto015: - Check if I am in 024: !" ;
IAmIn024 = updateTo014();
if (IAmIn024)
{
//qDebug() << "DataBase::updateto015: - updateTo013 returned TRUE - I am in 0.024: " << QString::number(latestReaded) ;
}
else
{
//qDebug() << "DataBase::updateto015: - updateTo011 returned FALSE - I am NOT in 0.024: " << QString::number(latestReaded) ;
ErrorUpdating = false;
}
}
if (ErrorUpdating)
{
//qDebug() << "DataBase::updateto025: - I Could not update to: " << QString::number(dbVersion) ;
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
}
// Now I am in the previous version and I can update the DB.
if ((updateTheModeTableAndSyncLog()) && (recreatePropModes ()))
{
//qDebug() << "DataBase::updateTo015: - updateTheModeTableAndSyncLog OK" ;
}
else
{
//qDebug() << "DataBase::updateTo015: UPDATED NOK!(9)" ;
//ErrorUpdating = true;
}
if (updateDBVersion(softVersion, "0.025"))
{
//qDebug() << "DataBase::updateto025: - We are in 025! " ;
}
else
{
//qDebug() << "DataBase::updateto025: - Failed to go to 014! " ;
// emit debugLog(Q_FUNC_INFO, "2", 7);
return false;
}
//qDebug() << "DataBase::updateTo025: UPDATED OK!" ;
return true;
}
bool DataBase::updateAwardDXCCTable()
{
//qDebug() << "DataBase::updateAwardDXCCTable" ;
QList dxccStatusList;
//QList dxccStatusListCheck;
dxccStatusList.clear();
//dxccStatusListCheck.clear();
AwarddxccEntry awardEntry;
awardEntry.dxcc = QString();
awardEntry.band = QString();
awardEntry.status = QString();
awardEntry.logNumber = QString();
awardEntry.qsoID = QString();
QString stringQuery = QString("SELECT id, bandid, modeid, dxcc, qsl_rcvd, lotw_qsl_rcvd, lognumber FROM log ORDER BY dxcc");
QSqlQuery query;//, query2;
bool sqlOK = query.exec(stringQuery);
QSqlRecord rec = query.record();
if (!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
else
{
//qDebug() << "DataBase::updateAwardDXCCTable SELECT when OK" ;
}
QStringList dxccStatus = QStringList(); //dxcc, band, mode, confirmed, lognumber, qsoid (per award set)
QStringList dxccStatusCheck = QStringList(); //dxcc, band, mode, confirmed, lognumber (per award set) just to check
int nameCol = -1;
QString _aux = QString();
//qDebug() << "DataBase::updateAwardDXCCTable before the while" ;
while (query.next())
{
//qDebug() << "DataBase::updateAwardDXCCTable IN the while" ;
if (query.isValid())
{
//qDebug() << "DataBase::updateAwardDXCCTable VALID" ;
awardEntry.dxcc.clear();
awardEntry.band.clear();
awardEntry.status.clear();
awardEntry.logNumber.clear();
awardEntry.qsoID.clear();
//qDebug() << "DataBase::updateAwardDXCCTable in the while" ;
nameCol = rec.indexOf("qsl_rcvd");
bool qsl = false;
if ((query.value(nameCol)).toString() == "Y")
{
qsl = true;
}
nameCol = rec.indexOf("lotw_qsl_rcvd");
bool lotw = false;
if ((query.value(nameCol)).toString() == "Y")
{
lotw = true;
}
if (qsl || lotw )
{
awardEntry.status = "1";
}
else
{
awardEntry.status = "0";
}
//qDebug() << "DataBase::updateAwardDXCCTable - status" << awardEntry.status ;
if ((awardEntry.status == "1") || (awardEntry.status == "0") )
{
nameCol = rec.indexOf("dxcc");
awardEntry.dxcc = (query.value(nameCol)).toString();
if ((awardEntry.dxcc).toInt()>0)
{
nameCol = rec.indexOf("bandid");
awardEntry.band = (query.value(nameCol)).toString();
nameCol = rec.indexOf("modeid");
awardEntry.mode = (query.value(nameCol)).toString();
nameCol = rec.indexOf("id");
awardEntry.qsoID = (query.value(nameCol)).toString();
nameCol = rec.indexOf("lognumber");
awardEntry.logNumber = (query.value(nameCol)).toString();
//qDebug() << "DataBase::updateAwardDXCCTable: Adding: " << awardEntry.dxcc <<"/" << awardEntry.band <<"/" << awardEntry.mode <<"/" << awardEntry.status <<"/" << awardEntry.logNumber <<"/" << awardEntry.qsoID ;
dxccStatusList.append(awardEntry);
}
} // END OF IF VALID
}
} // END OF WHILE
//qDebug() << "DataBase::updateAwardDXCCTable - END OF WHILE" ;
query.finish();
//qDebug() << "DataBase::updateAwardDXCCTable: Log analized... let's clean the table!" ;
stringQuery = QString("DELETE FROM awarddxcc");
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{return false;}
else
{
//qDebug() << "DataBase::updateAwardDXCCTable: awarddxcc table DELETED" ;
}
//qDebug() << "DataBase::updateAwardDXCCTable: Now we start writing the table!!" ;
//int i = 0;
_aux.clear();
int qsos = dxccStatusList.length();
int step = util->getProgresStepForDialog(qsos);
QProgressDialog progress(QObject::tr("Updating DXCC award information..."), QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
//qDebug() << "DataBase::updateAwardDXCCTable: INSERTING: " << QString::number(qsos) << " QSOS..." ;
for (int j=0;j dxccStatusList;
//QList dxccStatusListCheck;
dxccStatusList.clear();
//dxccStatusListCheck.clear();
AwarddxccEntry awardEntry;
awardEntry.dxcc = QString();
awardEntry.band = QString();
awardEntry.status = QString();
awardEntry.logNumber = QString();
awardEntry.qsoID = QString();
QString stringQuery = QString("SELECT id, bandid, modeid, cqz, qsl_rcvd, lotw_qsl_rcvd, lognumber FROM log ORDER BY cqz");
QSqlQuery query;//, query2;
bool sqlOK = query.exec(stringQuery);
QSqlRecord rec = query.record();
if (!sqlOK)
{
queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
query.finish();
// emit debugLog(Q_FUNC_INFO, "1", 7);
return false;
}
else
{
//qDebug() << "DataBase::updateAwardWAZTable SELECT when OK" ;
}
QStringList dxccStatus = QStringList(); //cqz, band, mode, confirmed, lognumber, qsoid (per award set)
QStringList dxccStatusCheck = QStringList(); //cqz, band, mode, confirmed, lognumber (per award set) just to check
int nameCol = -1;
QString _aux = QString();
//qDebug() << "DataBase::updateAwardWAZTable before the while" ;
while (query.next())
{
//qDebug() << "DataBase::updateAwardWAZTable IN the while" ;
if (query.isValid())
{
//qDebug() << "DataBase::updateAwardWAZTable VALID" ;
awardEntry.dxcc.clear();
awardEntry.band.clear();
awardEntry.status.clear();
awardEntry.logNumber.clear();
awardEntry.qsoID.clear();
//qDebug() << "DataBase::updateAwardWAZTable in the while" ;
nameCol = rec.indexOf("qsl_rcvd");
bool qsl = false;
if ((query.value(nameCol)).toString() == "Y")
{
qsl = true;
}
nameCol = rec.indexOf("lotw_qsl_rcvd");
bool lotw = false;
if ((query.value(nameCol)).toString() == "Y")
{
lotw = true;
}
if (qsl || lotw )
{
awardEntry.status = "1";
}
else
{
awardEntry.status = "0";
}
//qDebug() << "DataBase::updateAwardWAZTable - status" << awardEntry.status ;
if ((awardEntry.status == "1") || (awardEntry.status == "0") )
{
nameCol = rec.indexOf("cqz");
awardEntry.dxcc = (query.value(nameCol)).toString();
if ((awardEntry.dxcc).toInt()>0)
{
nameCol = rec.indexOf("bandid");
awardEntry.band = (query.value(nameCol)).toString();
nameCol = rec.indexOf("modeid");
awardEntry.mode = (query.value(nameCol)).toString();
nameCol = rec.indexOf("id");
awardEntry.qsoID = (query.value(nameCol)).toString();
nameCol = rec.indexOf("lognumber");
awardEntry.logNumber = (query.value(nameCol)).toString();
//qDebug() << "DataBase::updateAwardWAZTable: Adding: " << awardEntry.dxcc <<"/" << awardEntry.band <<"/" << awardEntry.mode <<"/" << awardEntry.status <<"/" << awardEntry.logNumber <<"/" << awardEntry.qsoID ;
dxccStatusList.append(awardEntry);
}
} // END OF IF VALID
}
} // END OF WHILE
//qDebug() << "DataBase::updateAwardWAZTable - END OF WHILE" ;
query.finish();
//qDebug() << "DataBase::updateAwardWAZTable: Log analized... let's clean the table!" ;
stringQuery = QString("DELETE FROM awardwaz");
sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
if (!sqlOK)
{return false;}
else
{
//qDebug() << "DataBase::updateAwardWAZTable: awardwaz table DELETED" ;
}
//qDebug() << "DataBase::updateAwardWAZTable: Now we start writing the table!!" ;
//int i = 0;
_aux.clear();
int qsos = dxccStatusList.length();
int step = util->getProgresStepForDialog(qsos);
QProgressDialog progress(QObject::tr("Updating WAZ award information..."), QObject::tr("Abort updating"), 0, qsos);
progress.setMaximum(qsos);
progress.setWindowModality(Qt::WindowModal);
//qDebug() << "DataBase::updateAwardWAZTable: INSERTING: " << QString::number(qsos) << " QSOS..." ;
for (int j=0;j