From 068641bdfb33c497d7cf1e3843fd753c708bda2e Mon Sep 17 00:00:00 2001 From: ea4k Date: Tue, 15 Aug 2023 12:00:03 +0200 Subject: [PATCH] Closes #608 --- src/dataproxy_sqlite.cpp | 10 +- src/mainwindow.cpp | 1394 +++++++------------------------------- src/mainwindow.h | 9 +- src/qso.cpp | 268 +++++++- src/qso.h | 8 +- 5 files changed, 518 insertions(+), 1171 deletions(-) diff --git a/src/dataproxy_sqlite.cpp b/src/dataproxy_sqlite.cpp index 03586622..d9e77dc3 100644 --- a/src/dataproxy_sqlite.cpp +++ b/src/dataproxy_sqlite.cpp @@ -9661,7 +9661,7 @@ QList DataProxy_SQLite::getSatDXCCStats(int _log) else { //qDebug() << Q_FUNC_INFO << ": log does not exist " ; - stringQuery = QString("SELECT call, qso_date, band.name, mode.name, entity.name, log.dxcc, lotw_qsl_rcvd, qsl_rcvd, sat_name from log, entity, band, mode where log.dxcc <>'' AND sat_name <>'' AND log.dxcc=entity.dxcc AND log.bandid=band.id AND log.modeid=mode.id ORDER BY entity.name"); + stringQuery = QString("SELECT call, qso_date, band.name, mode.submode, entity.name, log.dxcc, lotw_qsl_rcvd, qsl_rcvd, sat_name from log, entity, band, mode where log.dxcc <>'' AND sat_name <>'' AND log.dxcc=entity.dxcc AND log.bandid=band.id AND log.modeid=mode.id ORDER BY entity.name"); } QSqlQuery query; @@ -9695,12 +9695,12 @@ QList DataProxy_SQLite::getSatDXCCStats(int _log) nameCol = rec.indexOf("bandid"); //qDebug() << "DataProxy_SQLite::getGridStats: bandid" << QString::number((query.value(nameCol)).toInt()); - _qso->setBand(query.value(2).toString()); + _qso->setBand(query.value(nameCol).toString()); //nameCol = rec.indexOf("modeid"); //qDebug() << Q_FUNC_INFO << ": modeid" << QString::number((query.value(nameCol)).toInt()); - _qso->setMode(query.value(3).toString()); - + _qso->setMode(getNameFromSubMode (query.value(3).toString())); + _qso->setSubmode(query.value(3).toString()); nameCol = rec.indexOf("sat_name"); _qso->setSatName((query.value(nameCol)).toString()); @@ -9778,6 +9778,7 @@ QList DataProxy_SQLite::getGridStats(int _log) nameCol = rec.indexOf("modeid"); //qDebug() << Q_FUNC_INFO << ": modeid" << QString::number((query.value(nameCol)).toInt()); _qso->setMode(getNameFromModeId((query.value(nameCol)).toInt())); + _qso->setSubmode (getSubModeFromId ((query.value(nameCol)).toInt())); nameCol = rec.indexOf("lotw_qsl_rcvd"); _qso->setLoTWQSL_RCVD((query.value(nameCol)).toString()); @@ -9856,6 +9857,7 @@ QList DataProxy_SQLite::getSatGridStats(int _log) nameCol = rec.indexOf("modeid"); //qDebug() << "DataProxy_SQLite::getGridStats: modeid" << QString::number((query.value(nameCol)).toInt()); _qso->setMode(getNameFromModeId((query.value(nameCol)).toInt())); + _qso->setSubmode(getSubModeFromId((query.value(nameCol)).toInt())); nameCol = rec.indexOf("sat_name"); _qso->setSatName((query.value(nameCol)).toString()); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3180d680..ccdec9ee 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -716,11 +716,21 @@ void MainWindow::createActionsCommon(){ connect(showKLogLogWidget, SIGNAL(newLogLevel(DebugLogLevel)), this, SLOT(slotNewLogLevel(DebugLogLevel)) ); //connect(this, SIGNAL(focusC), this, SLOT(slotTimeOutInfoBars()) ); - + // Following calls answer calls from the QSO to receive information. + connect (qso, SIGNAL(getBandSignal(double)), this, SLOT(slotQSO_SetBand(double))); + connect (qso, SIGNAL(getModeSignal(QString)), this, SLOT(slotQSO_SetMode(QString))); logEvent(Q_FUNC_INFO, "END", Debug); } +void MainWindow::slotQSO_SetBand(const double _fr) +{ + qso->setBand (dataProxy->getBandNameFromFreq (_fr)); +} +void MainWindow::slotQSO_SetMode(const QString _submode) +{ + qso->setMode (dataProxy->getNameFromSubMode (_submode)); +} void MainWindow::recommendBackupIfNeeded() { @@ -1009,1195 +1019,293 @@ void MainWindow::slotModeChanged (const QString &_m) } //QString _modeSeen = mainQSOEntryWidget->getMode(); - if (hamlibActive && !manualMode) - { - hamlib->setMode (mainQSOEntryWidget->getMode()); - } -/* if (_modeSeen == "SSB") - { - setModeFromFreq(); - } -*/ - logEvent(Q_FUNC_INFO, "END", Debug); - //qDebug() << Q_FUNC_INFO << " - " << mainQSOEntryWidget->getMode() ; -} - - -void MainWindow::slotQRZReturnPressed() -{ - logEvent(Q_FUNC_INFO, "Start", Debug); - //qDebug() << Q_FUNC_INFO << " - Start" ; - if (mainQSOEntryWidget->getQrz().length()<=0) - { - //qDebug() << Q_FUNC_INFO << " - no QRZ" ; - return; - } - readingTheUI = true; - - //int errorCode = 0; - - // Just to prepare or some tasks before reading DATA from UI - - QSqlQuery query; - QString queryString = readDataFromUI(); - - //qDebug() << Q_FUNC_INFO << " - queryString: " << queryString ; - - if (queryString != "NULL") - { - if (queryString == "TEMP-STRING") - { // Just to be used while 2.4 or 2.3.4 is written - //qDebug() << Q_FUNC_INFO << " - QSO Added-1! " ; - actionsJustAfterAddingOneQSO(); - } - else - { - if (!query.exec(queryString)) - { - emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery()); - query.finish(); - //qDebug() << Q_FUNC_INFO << " - Query ERROR: (queryString): " << queryString ; - //errorCode = query.lastError().nativeErrorCode(); - QMessageBox msgBox; - msgBox.setWindowTitle(tr("KLog - Unexpected error")); - msgBox.setIcon(QMessageBox::Warning); - QString aux = tr("An unexpected error ocurred when trying to add the QSO to your log. If the problem persists, please contact the developer for analysis: "); - msgBox.setText(aux + "MW-1: " + query.lastError().nativeErrorCode()); - msgBox.setStandardButtons(QMessageBox::Ok); - msgBox.setDefaultButton(QMessageBox::Ok); - int ret = msgBox.exec(); - switch (ret) - { - case QMessageBox::Ok: - break; - default: - // should never be reached - break; - } - logEvent(Q_FUNC_INFO, "END-1", Debug); - return; - } - else - { - query.finish(); - //TODO: To move the following lines to this part to properly manage the query result!! - //ret = true; - //qDebug() << Q_FUNC_INFO << " - QSO Added-2! " ; - actionsJustAfterAddingOneQSO(); - } - } - } - - else // The QUERY string is NULL - { - logEvent(Q_FUNC_INFO, "END-2", Debug); - //qDebug() << Q_FUNC_INFO << " - QUERY string is NULL " ; - readingTheUI = false; - return; - } - - yearChangedDuringModification = false; - readingTheUI = false; - QString lastLocator = dataProxy->getLocatorFromId(dataProxy->getLastQSOid()); - //qDebug() << Q_FUNC_INFO << ": Locator: " << lastLocator; - mapWindow->addLocator(lastLocator, workedColor); - - //qDebug() << Q_FUNC_INFO << "Just before cleaning"; - slotClearButtonClicked(Q_FUNC_INFO); - - logEvent(Q_FUNC_INFO, "END", Debug); -} - -void MainWindow::actionsJustAfterAddingOneQSO() -{ - //qDebug() << Q_FUNC_INFO << " - Start" ; - logEvent(Q_FUNC_INFO, "Start", Debug); - int lastId = -1; - needToSave = true; - if (modify) - { - //qDebug() << Q_FUNC_INFO << " - Modifying! " ; - needToSave = true; - if(modifyingQSO>0) - { - awards->setAwards(modifyingQSO); - if (yearChangedDuringModification) - { - awardsWidget->fillOperatingYears(); - yearChangedDuringModification = false; - } - if ((clublogActive) && (clublogRealTime)) - { - //qDebug() << Q_FUNC_INFO << " - (Modifiying ClubLog) Lastid: "<< QString::number(lastId) ; - // Delete QSO in CLubLog - elogClublog->deleteQSO(clublogPrevQSO); - // Add modified QSO in ClubLog - elogClublog->sendQSO(dataProxy->getClubLogRealTimeFromId(modifyingQSO)); - } - else - { - //qDebug() << Q_FUNC_INFO << " - (No ClubLog) Lastid: "<< QString::number(lastId) ; - } - awards->setAwards(modifyingQSO); //Update the DXCC award status - } - // CHECK WHAT WAS THE QSOID to add the awards, if needed - } - else - { - //qDebug() << Q_FUNC_INFO << " - Not Modifying " ; - lastId = dataProxy->getLastQSOid(); - if (lastId>=0) - { - //qDebug() << Q_FUNC_INFO << " - Lastid: "<< QString::number(lastId) ; - awards->setAwards(lastId); //Update the DXCC award status - // Send to CLUBLOG if enabled - if ((clublogActive) && (clublogRealTime)) - { - //qDebug() << Q_FUNC_INFO << " - (Sending ClubLog) Lastid: "<< QString::number(lastId) ; - elogClublog->sendQSO(dataProxy->getClubLogRealTimeFromId(lastId)); - } - else - { - //qDebug() << Q_FUNC_INFO << " - (No ClubLog) Lastid: "<< QString::number(lastId) ; - } - // - } - else - { - //qDebug() << Q_FUNC_INFO << " - Lastid < 0 "<< QString::number(lastId) ; - } - //awards->setAwards(lastId); - } - logWindow->refresh(); - dxccStatusWidget->refresh(); - searchWidget->refresh(); - awardsWidget->showAwards (); - logEvent(Q_FUNC_INFO, "END", Debug); - //qDebug() << "MainWindow::actionsJustAfterAddingOneQSO - END" ; -} - -QString MainWindow::readDataFromUI() -{ - //qDebug() << Q_FUNC_INFO << " - " ; - logEvent(Q_FUNC_INFO, "Start", Debug); - if (modify) - { - logEvent(Q_FUNC_INFO, "END-2", Debug); - return readDataFromUIDXModifying(); - } - else - { - logEvent(Q_FUNC_INFO, "END-3", Debug); - QString tmp = readDataFromUIDX(); - return "TEMP-STRING"; - } - logEvent(Q_FUNC_INFO, "END", Debug); -} - -QString MainWindow::readDataFromUIDX() -{ -/* -If you make any change here, please update also readDataFromUIDXModifying to keep data integrity! -*/ - qDebug() << Q_FUNC_INFO << " - " ; - logEvent(Q_FUNC_INFO, "Start", Debug); - QSO qso; - QString tqrz = (mainQSOEntryWidget->getQrz()).toUpper(); - - if (!util->isValidCall(tqrz)) - { - QMessageBox msgBox; - msgBox.setIcon(QMessageBox::Question); - msgBox.setWindowTitle(tr("KLog - Not valid call")); - QString aux = QString(tr("The callsign %1 is not a valid call. Do you really want to add this callsign to the log?") ).arg(tqrz); - msgBox.setText(aux); - msgBox.setInformativeText(tr("Adding non-valid calls to the log may create problems when applying for awards, exporting ADIF files to other systems or applications.")); - msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); - msgBox.setDefaultButton(QMessageBox::No); - int ret = msgBox.exec(); - switch (ret) - { - case QMessageBox::Yes: - // Ok was clicked - break; - case QMessageBox::No: - return "NULL"; - default: - // should never be reached - break; - } - } - qso.setCall (tqrz); - qso.setBand(mainQSOEntryWidget->getBand()); - qso.setMode(mainQSOEntryWidget->getMode()); - - //qso.setDate (tdate); - qso.setLogId (currentLog); - - qso.setDateTimeOn (mainQSOEntryWidget->getDateTime()); - - qso.setRSTTX (QSOTabWidget->getRSTTX ()); - qso.setRSTRX (QSOTabWidget->getRSTRX ()); - - int dxcc = world->getQRZARRLId(tqrz); - //int dxcc2 = getDXCCFromComboBox(); - int dxcc2 = world->getQRZARRLId(othersTabWidget->getEntityPrefix()); - - dxcc = util->getNormalizedDXCCValue (dxcc); - dxcc2 = util->getNormalizedDXCCValue (dxcc2); - - if (dxcc!=dxcc2) - { - QString dxccn1 = world->getEntityName(dxcc); - dxccn1 = dxccn1 + " - " + world->getEntityMainPrefix(dxcc); - - QString dxccn2 = world->getEntityName(dxcc2); - dxccn2 = dxccn2 + " - " + world->getEntityMainPrefix(dxcc2); - - QPushButton *button2 = new QPushButton(this); - QPushButton *button1 = new QPushButton(this); - - button1->setText(world->getEntityMainPrefix(dxcc)); - button2->setText(world->getEntityMainPrefix(dxcc2)); - - int ret; - - QMessageBox msgBox; - msgBox.setWindowTitle(tr("KLog - Select correct entity")); - msgBox.setText( tr("You have selected an entity:") + "\n\n"+"- "+dxccn2+"\n\n"+tr("that is different from the KLog proposed entity:") + "\n\n"+ "- "+dxccn1+"\n\n" - +tr("Click on the prefix of the correct entity or Cancel to edit the QSO again.")); - - msgBox.addButton(button2, QMessageBox::AcceptRole); - msgBox.addButton(button1, QMessageBox::ActionRole); - msgBox.addButton(QMessageBox::Cancel); - ret = msgBox.exec(); - - if (ret == QMessageBox::AcceptRole) - { - dxcc = dxcc2; - } - else if (ret == QMessageBox::Cancel) - { - logEvent(Q_FUNC_INFO, "END-2", Debug); - return "NULL"; - } - } - - qso.setContinent (dataProxy->getContinentShortNameFromEntity(dxcc)); - - int cqz = world->getEntityCqz(dxcc); - int ituz = world->getEntityItuz(dxcc); - - qso.setName (QSOTabWidget->getName()); - qso.setDistance (infoWidget->getDistance ()); - qso.setGridSquare (QSOTabWidget->getDXLocator()); - qso.setMyGridSquare (myDataTabWidget->getMyLocator()); - - qso.setFreqTX (QSOTabWidget->getTXFreq()); - qso.setFreqRX (QSOTabWidget->getRXFreq()); - qso.setBandRX (dataProxy->getBandNameFromFreq (QSOTabWidget->getRXFreq ())); - - qso.setQTH (QSOTabWidget->getQTH()); - qso.setOperatorCallsign (myDataTabWidget->getOperator()); - qso.setStationCallsign (myDataTabWidget->getStationCallsign()); - - qso.setMyRig (myDataTabWidget->getMyRig()); - qso.setMyAntenna (myDataTabWidget->getMyAntenna()); - qso.setMySOTA_REF (myDataTabWidget->getMySOTA()); - qso.setMyVUCCGrids (myDataTabWidget->getMyVUCCGrids ()); - - qso.setComment (commentTabWidget->getComment()); - qso.setQSLMsg (QSLTabWidget->getQSLMsg()); - - qso.setDXCC (dxcc); - qso.setCQZone (cqz); - qso.setItuZone (ituz); - - qso.setQSLVia (QSLTabWidget->getQSLVia()); - qso.setTXPwr (myDataTabWidget->getMyPower()); - qso.setRXPwr (QSOTabWidget->getRXPwr ()); - - qso.setSOTA_REF (othersTabWidget->getSOTA()); - qso.setAge (othersTabWidget->getAge()); - qso.setVUCCGrids (othersTabWidget->getVUCCGrids ()); - qso.setIOTA (othersTabWidget->getIOTA()); - - qso.setSatName (satTabWidget->getSatName()); - qso.setSatMode (satTabWidget->getSatMode()); - - keepSatPage = satTabWidget->getRepeatThis(); - - qso.setPropMode (othersTabWidget->getPropModeFromComboBox()); - - qso.setClubLogStatus (eQSLTabWidget->getClubLogStatus()); //Y, N, M - qso.setClubLogDate(eQSLTabWidget->getClubLogDate()); - - qso.setEQSLQSL_SENT (eQSLTabWidget->getEQSLSenStatus()); - qso.setEQSLQSLSDate (eQSLTabWidget->getEQSLSenDate()); - - qso.setEQSLQSL_RCVD (eQSLTabWidget->getEQSLRecStatus()); - qso.setEQSLQSLRDate (eQSLTabWidget->getEQSLRecDate()); - - qso.setLoTWQSL_SENT (eQSLTabWidget->getLOTWSenStatus()); - qso.setLoTWQSLSDate (eQSLTabWidget->getLOTWSenDate()); - qso.setLoTWQSL_SENT (eQSLTabWidget->getLOTWRecStatus()); - qso.setLoTWQSLRDate (eQSLTabWidget->getLOTWRecDate()); - - qso.setQSL_SENT (QSLTabWidget->getQSLSenStatus()); - qso.setQSLSenVia (QSLTabWidget->getSentVia()); - qso.setQSLSDate (QSLTabWidget->getQSLSenDate()); - - qso.setQSL_RCVD (QSLTabWidget->getQSLRecStatus()); - qso.setQSLRecVia (QSLTabWidget->getRecVia()); - qso.setQSLRDate (QSLTabWidget->getQSLRecDate()); - qso.add (); - return " - END"; -} - -QString MainWindow::readDataFromUIDXModifying() -{ - //qDebug() << "MainWindow::readDataFromUIDXModifying:" ; - logEvent(Q_FUNC_INFO, "Start", Debug); - - QString tqrz = (mainQSOEntryWidget->getQrz()).toUpper(); - if (!util->isValidCall(tqrz)) - { - QMessageBox msgBox; - msgBox.setIcon(QMessageBox::Question); - msgBox.setWindowTitle(tr("KLog - Not valid callsign")); - QString aux = QString(tr("The callsign %1 is not a valid callsign. Do you really want to add this callsign to the log?") ).arg(tqrz); - msgBox.setText(aux); - msgBox.setInformativeText(tr("Adding non-valid calls to the log may create problems when applying for awards, exporting ADIF files to other systems or applications.")); - msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); - msgBox.setDefaultButton(QMessageBox::No); - int ret = msgBox.exec(); - switch (ret) - { - case QMessageBox::Yes: - // Ok was clicked - break; - case QMessageBox::No: - return "NULL"; - default: - // should never be reached - break; - } - - logEvent(Q_FUNC_INFO, "END-1", Debug); - } - - //qDebug() << Q_FUNC_INFO << ": " << tqrz ; - - QString stringQuery = "NULL"; - QString aux1, aux2; - - - int tband = dataProxy->getIdFromBandName(mainQSOEntryWidget->getBand()); - int tmode = dataProxy->getIdFromModeName(mainQSOEntryWidget->getMode()); - QString tdate = util->getDateTimeSQLiteStringFromDateTime(mainQSOEntryWidget->getDateTime()); - //QString tdate = (mainQSOEntryWidget->getDate()).toString("yyyy/MM/dd"); - QString ttime = (mainQSOEntryWidget->getTime()).toString("hh:mm:ss"); - - if ((mainQSOEntryWidget->getDate().year()) && (dateTimeTemp->date().year())) - { - yearChangedDuringModification = true; - } - - QString trsttx = QSOTabWidget->getRSTTX(); - QString trstrx = QSOTabWidget->getRSTRX(); - - int dxcc = world->getQRZARRLId(tqrz); - int cqz = world->getEntityCqz(dxcc); - int ituz = world->getEntityItuz(dxcc); - - int dxcc2 = world->getQRZARRLId(othersTabWidget->getEntityPrefix()); - - dxcc = util->getNormalizedDXCCValue (dxcc); - dxcc2 = util->getNormalizedDXCCValue (dxcc2); - - - if (dxcc!=dxcc2) - { - QString dxccPref1, dxccPref2; - QString dxccn1 = world->getEntityName(dxcc); - if (dxccn1.length()>0) - { - dxccPref1 = world->getEntityMainPrefix(dxcc); - dxccn1 = dxccn1 + " - " + dxccPref1; - } - else - { - dxccn1 = tr("No DXCC"); - dxccPref1 = tr("None"); - } - - QString dxccn2 = world->getEntityName(dxcc2); - if (dxccn2.length()>0) - { - dxccPref2 = world->getEntityMainPrefix(dxcc2); - dxccn2 = dxccn2 + " - " + dxccPref2; - } - else - { - dxccn2 = tr("No DXCC"); - dxccPref2 = tr("None"); - } - - QPushButton *button2 = new QPushButton(this); - QPushButton *button1 = new QPushButton(this); - button1->setText(dxccPref1); - button2->setText(dxccPref2); - int ret; - QMessageBox msgBox; - msgBox.setIcon(QMessageBox::Warning); - msgBox.setWindowTitle(tr("KLog - Select correct entity")); - msgBox.setText( tr("You have selected an entity:") + "\n\n"+"- "+dxccn2+"\n\n"+tr("that is different from the KLog proposed entity:") + "\n\n- "+dxccn1+"\n\n" - +tr("Click on the prefix of the right entity or Cancel to correct.")); - - msgBox.addButton(button2, QMessageBox::AcceptRole); - msgBox.addButton(button1, QMessageBox::ActionRole); - msgBox.addButton(QMessageBox::Cancel); - ret = msgBox.exec(); - - if (ret == QMessageBox::AcceptRole) - { - dxcc = dxcc2; - //qDebug() << "MainWindow::readDataFromUIDXModifying - Button 2: " << QString::number(dxcc2) ; - } - else if (ret == QMessageBox::ActionRole) - { - //qDebug() << "MainWindow::readDataFromUIDXModifying - Button 1: " ; - } - else if (ret == QMessageBox::Cancel) - { - logEvent(Q_FUNC_INFO, "END-2", Debug); - //qDebug() << "MainWindow::readDataFromUIDXModifying - Button 2: " << QString::number(dxcc2) ; - return "NULL"; - } - } - - QString updateString = "UPDATE log SET call = '" + tqrz + "', bandid = '" + QString::number(tband) + "', modeid = '" + QString::number(tmode) + "', qso_date = '" + tdate + "', rst_sent = '" + trsttx + "', rst_rcvd = '" + trstrx + "', lognumber = '" + QString::number(currentLog) + "', "; - - aux1 = dataProxy->getContinentShortNameFromEntity(dxcc); - if (dataProxy->isValidContinentShortName(aux1)) - { - updateString = updateString + "cont = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "cont = '', "; - } - - aux1 = QSOTabWidget->getName(); - if (aux1.length()>1) - { - updateString = updateString + "name = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "name = '', "; - } - - - - if (infoWidget->getDistance ()>0) - { - updateString = updateString + "distance = '"; - updateString = updateString + QString::number(infoWidget->getDistance ()) + "', "; - } - else - { - updateString = updateString + "distance = '', "; - } - - aux1 = QSOTabWidget->getDXLocator (); - if ( locator->isValidLocator(aux1) ) - { - updateString = updateString + "gridsquare = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "gridsquare = '', "; - } - - if ( QSOTabWidget->getTXFreq() > 0 ) - { - aux1 = QString::number(QSOTabWidget->getTXFreq()); - - if (dataProxy->isThisFreqInBand(dataProxy->getNameFromBandId(tband), aux1) ) - //if (db->isThisFreqInBand(db->getBandNameFromID2(tband), aux1) ) - { - updateString = updateString + "freq = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "freq = '0', "; - } - } - else - { - updateString = updateString + "freq = '0', "; - } - - if ( (QSOTabWidget->getRXFreq()) > 0 ) - { - aux1 = QString::number(QSOTabWidget->getRXFreq()); - updateString = updateString + "freq_rx = '"; - updateString = updateString + aux1 + "', "; - - updateString = updateString + "band_rx = '"; - updateString = updateString + QString::number(dataProxy->getBandIdFromFreq(QSOTabWidget->getRXFreq())) + "', "; - } - else - { - updateString = updateString + "freq_rx = '0', "; - updateString = updateString + "band_rx = '', "; - } - - aux1 = QSOTabWidget->getQTH(); - if (aux1.length()>2) - { - updateString = updateString + "qth = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "qth = '', "; - } - - aux1 = myDataTabWidget->getOperator(); - - if (util->isValidCall(aux1)) - { - updateString = updateString + "operator = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "operator = '', "; - } - - aux1 = myDataTabWidget->getStationCallsign(); - if (util->isValidCall(aux1)) - { - updateString = updateString + "station_callsign = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "station_callsign = '', "; - } - - aux1 = (myDataTabWidget->getMyLocator()).toUpper(); - - if (locator->isValidLocator(aux1)) - { - updateString = updateString + "my_gridsquare = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "my_gridsquare = '', "; - } - - aux1 = (myDataTabWidget->getMyRig()); - if (aux1.length ()>0) - { - updateString = updateString + "my_rig = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "my_rig = '', "; - } - - aux1 = (myDataTabWidget->getMyAntenna()); - if (aux1.length ()>0) - { - updateString = updateString + "my_antenna = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "my_antenna = '', "; - } - - aux1 = (myDataTabWidget->getMySOTA()); - if (aux1.length ()>0) - { - updateString = updateString + "my_sota_ref = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "my_sota_ref = '', "; - } - - aux1 = myDataTabWidget->getMyVUCCGrids (); - if (util->isValidVUCCGrids (aux1)) - { - updateString = updateString + "my_vucc_grids = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "my_vucc_grids = '', "; - } - - aux1 = commentTabWidget->getComment(); - updateString = updateString + "comment = '"; - updateString = updateString + aux1 + "', "; - - aux1 = QSLTabWidget->getQSLMsg(); - if (aux1.length()>0) - { - updateString = updateString + "qslmsg = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "qslmsg = '', "; - } - - aux1 = QString::number(dxcc); - //qDebug() << "MainWindow::readDataFromUIDXModifying: DXCC=" << aux1 ; - if (dataProxy->isValidDXCC(dxcc)) - { - updateString = updateString + "dxcc = '"; - updateString = updateString + aux1 + "', "; - //qDebug() << "MainWindow::readDataFromUIDXModifying: Saving DXCC=" << aux1 ; - } - else - { - updateString = updateString + "dxcc = '', "; - } - - if ((cqz>0) && (cqz<41)) - { - aux1 = QString::number(cqz); - updateString = updateString + "cqz = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "cqz = '', "; - } - - if ((ituz>0) && (ituz<91)) - { - aux1 = QString::number(ituz); - updateString = updateString + "ituz = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "ituz = '', "; - } - - aux1 = QSLTabWidget->getQSLVia(); - //aux1 = qslViaLineEdit->text(); - if (aux1.length()>3) - { - updateString = updateString + "qsl_via = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "qsl_via = '', "; - } - - if (myDataTabWidget->getMyPower()>0.0) - { - aux1 = QString::number(myDataTabWidget->getMyPower()); - updateString = updateString + "tx_pwr = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "tx_pwr = '', "; - } - - - if (QSOTabWidget->getRXPwr ()>0.0) - { - aux1 = QString::number(QSOTabWidget->getRXPwr ()); - updateString = updateString + "rx_pwr = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "rx_pwr = '', "; - } - // OTHERS TAB - // User Selectable field - - aux1 = (othersTabWidget->getSOTA ()); - if (aux1.length ()>0) - { - updateString = updateString + "sota_ref = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "sota_ref = '', "; - } - - aux1 = QString::number(othersTabWidget->getAge()); - if (othersTabWidget->getAge()>0) - { - updateString = updateString + "age = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "age = '', "; - } - - aux1 = othersTabWidget->getVUCCGrids (); - if (util->isValidVUCCGrids (aux1)) - { - updateString = updateString + "vucc_grids = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "vucc_grids = '', "; - } - - aux1 = othersTabWidget->getIOTA(); - //qDebug() << Q_FUNC_INFO << " - Modifyng IOTA: " << aux1 ; - if (aux1.length() == 6) // EU-001 - { - //qDebug() << Q_FUNC_INFO << " - Modifyng IOTA to be saved! " ; - updateString = updateString + "iota = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "iota = '', "; - //qDebug() << Q_FUNC_INFO << " - Modifyng IOTA NOT to be saved! Lenght="<getSatName(); //We are assuming that the SAT_NAME is always well provided. If it is blank, then no SAT QSO - //qDebug() << Q_FUNC_INFO << " - SAT2 modif " << aux1 ; - if (aux1.length()>0) - { - updateString = updateString + "sat_name = '"; - updateString = updateString + aux1 + "', "; - satQSO = true; - } - else - { - updateString = updateString + "sat_name = '', "; - } - - aux1 = satTabWidget->getSatMode(); // We are assuming that the SAT_MODE is always well provided. If it is blank, then no SAT QSO - if ((aux1.length()>0) && satQSO) - { - updateString = updateString + "sat_mode = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "sat_mode = '', "; - } - - aux1 = othersTabWidget->getPropModeFromComboBox(); - //qDebug() << Q_FUNC_INFO << " - PropMode: " << aux1 ; - if (util->isValidPropMode (aux1)) - { - //qDebug() << Q_FUNC_INFO << " - PropMode(1): " << aux1 ; - updateString = updateString + "prop_mode = '"; - updateString = updateString + aux1 + "', "; - } - else - { - updateString = updateString + "prop_mode = '', "; - //qDebug() << Q_FUNC_INFO << " - PropMode(3): " << aux1 ; - } - - //CLUBLOG - - aux1 = eQSLTabWidget->getClubLogStatus(); //Y, N, M - //qDebug() << Q_FUNC_INFO << ": ClubLogStatus" << aux1; - if (aux1 == "Y") - { - updateString = updateString + "clublog_qso_upload_status = 'Y', "; - //updateString = updateString + "clublog_qso_upload_date = '" + (eQSLTabWidget->getClubLogDate()).toString("yyyy/MM/dd") + "', "; - updateString = updateString + "clublog_qso_upload_date = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getClubLogDate()) + "', "; - } - else if (aux1 == "N") - { - updateString = updateString + "clublog_qso_upload_status = 'N', "; - } - else if (aux1 == "M") - { - updateString = updateString + "clublog_qso_upload_status = 'M', "; - updateString = updateString + "clublog_qso_upload_date = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getClubLogDate()) + "', "; - } - else //TODO: This should be equivalent to N? - { - updateString = updateString + "clublog_qso_upload_status = 'N', "; - } - //CLUBLOG - - - // EQSL-SENT - aux1 = eQSLTabWidget->getEQSLSenStatus(); - if (aux1 == "Y") - { - updateString = updateString + "eqsl_qsl_sent = 'Y', "; - updateString = updateString + "eqsl_qslsdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getEQSLSenDate()) + "', "; - } - else if (aux1 == "R") - { - updateString = updateString + "eqsl_qsl_sent = 'R', "; - } - else if (aux1 == "Q") - { - updateString = updateString + "eqsl_qsl_sent = 'Q', "; - updateString = updateString + "eqsl_qslsdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getEQSLSenDate()) + "', "; - } - else if (aux1 == "I") - { - updateString = updateString + "eqsl_qsl_sent = 'I', "; - updateString = updateString + "eqsl_qslsdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getEQSLSenDate()) + "', "; - } - else // N - { - updateString = updateString + "eqsl_qsl_sent = 'N', "; - } - - - // EQSL-RECEPTION - aux1 = eQSLTabWidget->getEQSLRecStatus(); - if (aux1 == "Y") - { - updateString = updateString + "eqsl_qsl_rcvd = 'Y', "; - updateString = updateString + "eqsl_qslrdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getEQSLRecDate()) + "', "; - } - else if (aux1 == "R") - { - updateString = updateString + "eqsl_qsl_rcvd = 'R', "; - } - else if (aux1 == "I") - { - updateString = updateString + "eqsl_qsl_rcvd = 'I', "; - } - else if (aux1 == "V") - { - updateString = updateString + "eqsl_qsl_rcvd = 'V', "; - updateString = updateString + "eqsl_qslrdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getEQSLRecDate()) + "', "; - } - else - { - updateString = updateString + "eqsl_qsl_rcvd = 'N', "; - } - - - // LOTW-SENT - aux1 = eQSLTabWidget->getLOTWSenStatus(); - if (aux1 == "Y") - { - updateString = updateString + "lotw_qsl_sent = 'Y', "; - updateString = updateString + "lotw_qslsdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getLOTWSenDate()) + "', "; - } - else if (aux1 == "R") - { - updateString = updateString + "lotw_qsl_sent = 'R', "; - } - else if (aux1 == "Q") - { - updateString = updateString + "lotw_qsl_sent = 'Q', "; - updateString = updateString + "lotw_qslsdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getLOTWSenDate()) + "', "; - } - else if (aux1 == "I") - { - updateString = updateString + "lotw_qsl_sent = 'I', "; - updateString = updateString + "lotw_qslsdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getLOTWSenDate()) + "', "; - } - else - { - updateString = updateString + "lotw_qsl_sent = 'N', "; - } - - - // LOTW-RECEPTION - //LOTW_QSLRDATE: (only valid if LOTW_RCVD is Y, I, or V) - aux1 = eQSLTabWidget->getLOTWRecStatus(); - if (aux1 == "Y") - { - updateString = updateString + "lotw_qsl_rcvd = 'Y', "; - updateString = updateString + "lotw_qslrdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getLOTWRecDate()) + "', "; - } - else if (aux1 == "R") - { - updateString = updateString + "lotw_qsl_rcvd = 'R', "; - } - else if (aux1 == "V") + if (hamlibActive && !manualMode) { - updateString = updateString + "lotw_qsl_rcvd = 'V', "; - updateString = updateString + "lotw_qslrdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getLOTWRecDate()) + "', "; + hamlib->setMode (mainQSOEntryWidget->getMode()); } - else if (aux1 == "I") +/* if (_modeSeen == "SSB") { - updateString = updateString + "lotw_qsl_rcvd = 'I', "; - updateString = updateString + "lotw_qslrdate = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getLOTWRecDate()) + "', "; + setModeFromFreq(); } - else +*/ + logEvent(Q_FUNC_INFO, "END", Debug); + //qDebug() << Q_FUNC_INFO << " - " << mainQSOEntryWidget->getMode() ; +} + + +void MainWindow::slotQRZReturnPressed() +{ + logEvent(Q_FUNC_INFO, "Start", Debug); + //qDebug() << Q_FUNC_INFO << " - Start" ; + if (mainQSOEntryWidget->getQrz().length()<=0) { - updateString = updateString + "lotw_qsl_rcvd = 'N', "; + //qDebug() << Q_FUNC_INFO << " - no QRZ" ; + return; } + readingTheUI = true; - // QRZCOM - aux1 = eQSLTabWidget->getQRZCOMStatus(); //Y, N, M - if (aux1 == "Y") + if (!readQSOFromUI ()) + {return;} + bool addedOK = false; + if (modify) { - updateString = updateString + "qrzcom_qso_upload_status = 'Y', "; - updateString = updateString + "qrzcom_qso_upload_date = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getQRZCOMDate()) + "', "; + addedOK = qso->modify (modifyingQSO); } - else if (aux1 == "M") + else { - updateString = updateString + "qrzcom_qso_upload_status = 'M', "; - updateString = updateString + "qrzcom_qso_upload_date = '" + util->getDateSQLiteStringFromDate(eQSLTabWidget->getQRZCOMDate()) + "', "; + logEvent(Q_FUNC_INFO, "END-3", Debug); + addedOK = qso->add (); } - else //TODO: This is equivalent to N + if (addedOK) { - updateString = updateString + "qrzcom_qso_upload_status = 'N', "; + actionsJustAfterAddingOneQSO(); } - // QRZCOM + // Just to prepare or some tasks before reading DATA from UI - // QSL SENT - //qsAux << tr("Y-Yes") << tr("N-No") << tr("R-Requested") << tr("Q-Queued") << tr("I-Ignore"); - //int i = qslSentComboBox->currentIndex(); - //int ii = qslSentViaComboBox->currentIndex(); - aux1 = QSLTabWidget->getQSLSenStatus(); - aux2 = QSLTabWidget->getSentVia(); - //qDebug() << "MainWindow::readDataFromUIDXModifying: aux1: " << aux1 << " / aux2: " << aux2 ; - if (aux1 == "Y") - { - updateString = updateString + "qsl_sent = 'Y', "; - updateString = updateString + "qslsdate = '" + util->getDateSQLiteStringFromDate(QSLTabWidget->getQSLSenDate()) + "', "; + yearChangedDuringModification = false; + readingTheUI = false; + QString lastLocator = dataProxy->getLocatorFromId(dataProxy->getLastQSOid()); + //qDebug() << Q_FUNC_INFO << ": Locator: " << lastLocator; + mapWindow->addLocator(lastLocator, workedColor); - if (aux2 == "D") - { - updateString = updateString + "qsl_sent_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_sent_via = 'E', "; - } - else if (aux2 == "M") - { - updateString = updateString + "qsl_sent_via = 'M', "; - } - else - { - updateString = updateString + "qsl_sent_via = 'B', "; - } - } - else if (aux1 == "R") + //qDebug() << Q_FUNC_INFO << "Just before cleaning"; + slotClearButtonClicked(Q_FUNC_INFO); + + logEvent(Q_FUNC_INFO, "END", Debug); +} + +void MainWindow::actionsJustAfterAddingOneQSO() +{ + //qDebug() << Q_FUNC_INFO << " - Start" ; + logEvent(Q_FUNC_INFO, "Start", Debug); + int lastId = -1; + needToSave = true; + if (modify) { - updateString = updateString + "qsl_sent = 'R', "; - if (aux2 == "D") - { - updateString = updateString + "qsl_sent_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_sent_via = 'E', "; - } - else if (aux2 == "M") - { - updateString = updateString + "qsl_sent_via = 'M', "; - } - else - { - updateString = updateString + "qsl_sent_via = 'B', "; - } + //qDebug() << Q_FUNC_INFO << " - Modifying! " ; + needToSave = true; + if(modifyingQSO>0) + { + awards->setAwards(modifyingQSO); + if (yearChangedDuringModification) + { + awardsWidget->fillOperatingYears(); + yearChangedDuringModification = false; + } + if ((clublogActive) && (clublogRealTime)) + { + //qDebug() << Q_FUNC_INFO << " - (Modifiying ClubLog) Lastid: "<< QString::number(lastId) ; + // Delete QSO in CLubLog + elogClublog->deleteQSO(clublogPrevQSO); + // Add modified QSO in ClubLog + elogClublog->sendQSO(dataProxy->getClubLogRealTimeFromId(modifyingQSO)); + } + else + { + //qDebug() << Q_FUNC_INFO << " - (No ClubLog) Lastid: "<< QString::number(lastId) ; + } + awards->setAwards(modifyingQSO); //Update the DXCC award status + } + // CHECK WHAT WAS THE QSOID to add the awards, if needed } - else if (aux1 == "Q") + else { - updateString = updateString + "qsl_sent = 'Q', "; - updateString = updateString + "qslsdate = '" + util->getDateSQLiteStringFromDate(QSLTabWidget->getQSLSenDate()) + "', "; - - if (aux2 == "D") - { - updateString = updateString + "qsl_sent_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_sent_via = 'E', "; - } - else if (aux2 == "M") + //qDebug() << Q_FUNC_INFO << " - Not Modifying " ; + lastId = dataProxy->getLastQSOid(); + if (lastId>=0) { - updateString = updateString + "qsl_sent_via = 'M', "; + //qDebug() << Q_FUNC_INFO << " - Lastid: "<< QString::number(lastId) ; + awards->setAwards(lastId); //Update the DXCC award status + // Send to CLUBLOG if enabled + if ((clublogActive) && (clublogRealTime)) + { + //qDebug() << Q_FUNC_INFO << " - (Sending ClubLog) Lastid: "<< QString::number(lastId) ; + elogClublog->sendQSO(dataProxy->getClubLogRealTimeFromId(lastId)); + } + else + { + //qDebug() << Q_FUNC_INFO << " - (No ClubLog) Lastid: "<< QString::number(lastId) ; + } + // } else { - updateString = updateString + "qsl_sent_via = 'B', "; + //qDebug() << Q_FUNC_INFO << " - Lastid < 0 "<< QString::number(lastId) ; } + //awards->setAwards(lastId); } - else if (aux1 == "I") - { - updateString = updateString + "qsl_sent = 'I', "; - updateString = updateString + "qslsdate = '" + util->getDateSQLiteStringFromDate(QSLTabWidget->getQSLSenDate()) + "', "; + logWindow->refresh(); + dxccStatusWidget->refresh(); + searchWidget->refresh(); + awardsWidget->showAwards (); + logEvent(Q_FUNC_INFO, "END", Debug); + //qDebug() << "MainWindow::actionsJustAfterAddingOneQSO - END" ; +} - if (aux2 == "D") - { - updateString = updateString + "qsl_sent_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_sent_via = 'E', "; - } - else if (aux2 == "M") - { - updateString = updateString + "qsl_sent_via = 'M', "; - } - else + +bool MainWindow::readQSOFromUI() +{ + qDebug() << Q_FUNC_INFO << " - Start" ; + logEvent(Q_FUNC_INFO, "Start", Debug); + + qso->clear (); + QString tqrz = (mainQSOEntryWidget->getQrz()).toUpper(); + + if (!util->isValidCall(tqrz)) + { + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowTitle(tr("KLog - Not valid call")); + QString aux = QString(tr("The callsign %1 is not a valid call. Do you really want to add this callsign to the log?") ).arg(tqrz); + msgBox.setText(aux); + msgBox.setInformativeText(tr("Adding non-valid calls to the log may create problems when applying for awards, exporting ADIF files to other systems or applications.")); + msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::No); + int ret = msgBox.exec(); + switch (ret) { - updateString = updateString + "qsl_sent_via = 'B', "; + case QMessageBox::Yes: + // Ok was clicked + break; + case QMessageBox::No: + qso->clear (); + return false; + default: + // should never be reached + break; } } - else - { - updateString = updateString + "qsl_sent = 'N', "; - updateString = updateString + "qsl_sent_via = 'B', "; - } + qso->setCall (tqrz); + qso->setBand(mainQSOEntryWidget->getBand()); + qso->setMode(dataProxy->getNameFromSubMode (mainQSOEntryWidget->getMode())); + qso->setSubmode (mainQSOEntryWidget->getMode()); + + //qso->setDate (tdate); + qso->setLogId (currentLog); + + qso->setDateTimeOn (mainQSOEntryWidget->getDateTime()); + + qso->setRSTTX (QSOTabWidget->getRSTTX ()); + qso->setRSTRX (QSOTabWidget->getRSTRX ()); + int dxcc = world->getQRZARRLId(tqrz); + //int dxcc2 = getDXCCFromComboBox(); + int dxcc2 = world->getQRZARRLId(othersTabWidget->getEntityPrefix()); - // QSL RECEPTION - //i = qslRecComboBox->currentIndex(); - //ii = qslRecViaComboBox->currentIndex(); - aux1 = QSLTabWidget->getQSLRecStatus(); - aux2 = QSLTabWidget->getRecVia(); + dxcc = util->getNormalizedDXCCValue (dxcc); + dxcc2 = util->getNormalizedDXCCValue (dxcc2); - if (aux1 == "Y") + if (dxcc!=dxcc2) { - updateString = updateString + "qsl_rcvd = 'Y', "; - updateString = updateString + "qslrdate = '" + util->getDateSQLiteStringFromDate(QSLTabWidget->getQSLRecDate()) + "', "; + QString dxccn1 = world->getEntityName(dxcc); + dxccn1 = dxccn1 + " - " + world->getEntityMainPrefix(dxcc); - if (aux2 == "D") - { - updateString = updateString + "qsl_rcvd_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_rcvd_via = 'E', "; - } - else if (aux2 == "M") + QString dxccn2 = world->getEntityName(dxcc2); + dxccn2 = dxccn2 + " - " + world->getEntityMainPrefix(dxcc2); + + QPushButton *button2 = new QPushButton(this); + QPushButton *button1 = new QPushButton(this); + + button1->setText(world->getEntityMainPrefix(dxcc)); + button2->setText(world->getEntityMainPrefix(dxcc2)); + + int ret; + + QMessageBox msgBox; + msgBox.setWindowTitle(tr("KLog - Select correct entity")); + msgBox.setText( tr("You have selected an entity:") + "\n\n"+"- "+dxccn2+"\n\n"+tr("that is different from the KLog proposed entity:") + "\n\n"+ "- "+dxccn1+"\n\n" + +tr("Click on the prefix of the correct entity or Cancel to edit the QSO again.")); + + msgBox.addButton(button2, QMessageBox::AcceptRole); + msgBox.addButton(button1, QMessageBox::ActionRole); + msgBox.addButton(QMessageBox::Cancel); + ret = msgBox.exec(); + + if (ret == QMessageBox::AcceptRole) { - updateString = updateString + "qsl_rcvd_via = 'M', "; + dxcc = dxcc2; } - else + else if (ret == QMessageBox::Cancel) { - updateString = updateString + "qsl_rcvd_via = 'B', "; + logEvent(Q_FUNC_INFO, "END-2", Debug); + qso->clear (); + return false; } } - else if (aux1 == "R") - { - //QSL received date - //(only valid if QSL_RCVD is Y, I, or V) - updateString = updateString + "qsl_rcvd = 'R', "; - //updateString = updateString + "confirmed = '0', "; - if (aux2 == "D") - { - updateString = updateString + "qsl_rcvd_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_rcvd_via = 'E', "; - } - else if (aux2 == "M") - { - updateString = updateString + "qsl_rcvd_via = 'M', "; - } - else - { - updateString = updateString + "qsl_rcvd_via = 'B', "; - } - } - else if (aux1 == "I") - { - //QSL received date - //(only valid if QSL_RCVD is Y, I, or V) - updateString = updateString + "qsl_rcvd = 'I', "; - updateString = updateString + "qslrdate = '" +util->getDateSQLiteStringFromDate(QSLTabWidget->getQSLRecDate()) + "', "; - updateString = updateString + "qslrdate = '" + + "', "; + qso->setContinent (dataProxy->getContinentShortNameFromEntity(dxcc)); - //updateString = updateString + "confirmed = '0', "; + int cqz = world->getEntityCqz(dxcc); + int ituz = world->getEntityItuz(dxcc); - if (aux2 == "D") - { - updateString = updateString + "qsl_rcvd_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_rcvd_via = 'E', "; - } - else if (aux2 == "M") - { - updateString = updateString + "qsl_rcvd_via = 'M', "; - } - else - { - updateString = updateString + "qsl_rcvd_via = 'B', "; - } - } - else if (aux1 == "V") - { - //QSL received date - //(only valid if QSL_RCVD is Y, I, or V) - updateString = updateString + "qsl_rcvd = 'V', "; - updateString = updateString + "qslrdate = '" + util->getDateSQLiteStringFromDate(QSLTabWidget->getQSLRecDate()) + "', "; + qso->setName (QSOTabWidget->getName()); + qso->setDistance (infoWidget->getDistance ()); + qso->setGridSquare (QSOTabWidget->getDXLocator()); + qso->setMyGridSquare (myDataTabWidget->getMyLocator()); - if (aux2 == "D") - { - updateString = updateString + "qsl_rcvd_via = 'D', "; - } - else if (aux2 == "E") - { - updateString = updateString + "qsl_rcvd_via = 'E', "; - } - else if (aux2 == "M") - { - updateString = updateString + "qsl_rcvd_via = 'M', "; - } - else - { - updateString = updateString + "qsl_rcvd_via = 'B', "; - } - } + qso->setFreqTX (QSOTabWidget->getTXFreq()); + qso->setFreqRX (QSOTabWidget->getRXFreq()); + qso->setBandRX (dataProxy->getBandNameFromFreq (QSOTabWidget->getRXFreq ())); - else - { - updateString = updateString + "qsl_rcvd = 'N', "; - updateString = updateString + "qsl_rcvd_via = 'B', "; - } + qso->setQTH (QSOTabWidget->getQTH()); + qso->setOperatorCallsign (myDataTabWidget->getOperator()); + qso->setStationCallsign (myDataTabWidget->getStationCallsign()); + + qso->setMyRig (myDataTabWidget->getMyRig()); + qso->setMyAntenna (myDataTabWidget->getMyAntenna()); + qso->setMySOTA_REF (myDataTabWidget->getMySOTA()); + qso->setMyVUCCGrids (myDataTabWidget->getMyVUCCGrids ()); + qso->setComment (commentTabWidget->getComment()); + qso->setQSLMsg (QSLTabWidget->getQSLMsg()); + + qso->setDXCC (dxcc); + qso->setCQZone (cqz); + qso->setItuZone (ituz); + + qso->setQSLVia (QSLTabWidget->getQSLVia()); + qso->setTXPwr (myDataTabWidget->getMyPower()); + qso->setRXPwr (QSOTabWidget->getRXPwr ()); + + qso->setSOTA_REF (othersTabWidget->getSOTA()); + qso->setAge (othersTabWidget->getAge()); + qso->setVUCCGrids (othersTabWidget->getVUCCGrids ()); + qso->setIOTA (othersTabWidget->getIOTA()); + + qso->setSatName (satTabWidget->getSatName()); + qso->setSatMode (satTabWidget->getSatMode()); keepSatPage = satTabWidget->getRepeatThis(); + qso->setPropMode (othersTabWidget->getPropModeFromComboBox()); - // The data reading finish here. Now, we prepare the data to insert into the DB + qso->setClubLogStatus (eQSLTabWidget->getClubLogStatus()); //Y, N, M + qso->setClubLogDate(eQSLTabWidget->getClubLogDate()); - if ( updateString.endsWith(", ") ) - { - updateString.chop(2); - } + qso->setEQSLQSL_SENT (eQSLTabWidget->getEQSLSenStatus()); + qso->setEQSLQSLSDate (eQSLTabWidget->getEQSLSenDate()); + + qso->setEQSLQSL_RCVD (eQSLTabWidget->getEQSLRecStatus()); + qso->setEQSLQSLRDate (eQSLTabWidget->getEQSLRecDate()); + + qso->setLoTWQSL_SENT (eQSLTabWidget->getLOTWSenStatus()); + qso->setLoTWQSLSDate (eQSLTabWidget->getLOTWSenDate()); + qso->setLoTWQSL_SENT (eQSLTabWidget->getLOTWRecStatus()); + qso->setLoTWQSLRDate (eQSLTabWidget->getLOTWRecDate()); + + qso->setQSL_SENT (QSLTabWidget->getQSLSenStatus()); + qso->setQSLSenVia (QSLTabWidget->getSentVia()); + qso->setQSLSDate (QSLTabWidget->getQSLSenDate()); - stringQuery = updateString + " WHERE id = " + "'" + QString::number(modifyingQSO) + "'"; - //qDebug() << "MainWindow::readDataFromUIDXModifying: queryCreated: " << stringQuery ; + qso->setQSL_RCVD (QSLTabWidget->getQSLRecStatus()); + qso->setQSLRecVia (QSLTabWidget->getRecVia()); + qso->setQSLRDate (QSLTabWidget->getQSLRecDate()); + + qDebug() << Q_FUNC_INFO << " - END" ; logEvent(Q_FUNC_INFO, "END", Debug); - return stringQuery; + return true; } void MainWindow::slotOKButtonClicked(){ @@ -3050,6 +2158,7 @@ void MainWindow::slotClearButtonClicked(const QString &_func) } //qDebug() << Q_FUNC_INFO << " - 20" ; clublogAnswer = -1; + clublogPrevQSO.clear(); //qDebug() << "MainWindow::slotClearButtonClicked: - 11" ; @@ -4120,7 +3229,7 @@ void MainWindow::slotSetupDialogFinished (const int _s) } else { - //qDebug() << "MainWindow::slotSetupDialogFinished: NO Restoring QSO..." ; + //qDebug() << "MainWindow::slotSetupDialogFinished: NO Restoring qso->.." ; //qDebug()<< (QTime::currentTime()).toString ("HH:mm:ss") << Q_FUNC_INFO << " - 023 - "; } //qDebug() << (QTime::currentTime()).toString ("HH:mm:ss") << Q_FUNC_INFO << " - 030 - " ; @@ -4961,7 +4070,7 @@ void MainWindow::fileExportClubLog2(const QString &_call, QList _qsos) //qDebug() << Q_FUNC_INFO << " - NO QSOs" ; msgBox.setWindowTitle(tr("KLog - ClubLog")); msgBox.setIcon(QMessageBox::Warning); - msgBox.setText(tr("The selection you have done does not include any QSO.")); + msgBox.setText(tr("The selection you have done does not include any qso->")); msgBox.setStandardButtons(QMessageBox::Ok ); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); @@ -5111,7 +4220,7 @@ void MainWindow::fileExportEQSL2(const QString &_call, QList _qsos) QMessageBox msgBox; msgBox.setWindowTitle(tr("KLog - ClubLog")); msgBox.setIcon(QMessageBox::Warning); - msgBox.setText(tr("The selection you have done does not include any QSO.")); + msgBox.setText(tr("The selection you have done does not include any qso->")); msgBox.setStandardButtons(QMessageBox::Ok ); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); @@ -7461,7 +6570,10 @@ void MainWindow::backupCurrentQSO() logEvent(Q_FUNC_INFO, "- 011", Devel); qso->setBand (mainQSOEntryWidget->getBand ()); logEvent(Q_FUNC_INFO, "- 012", Devel); - qso->setMode (mainQSOEntryWidget->getMode ()); + qso->setSubmode (mainQSOEntryWidget->getMode ()); + qso->setMode (dataProxy->getNameFromSubMode (mainQSOEntryWidget->getMode())); + + dataProxy->getNameFromSubMode (mainQSOEntryWidget->getMode()); //qDebug() << Q_FUNC_INFO << " - 013"; qso->setDateTimeOn (mainQSOEntryWidget->getDateTime ()); logEvent(Q_FUNC_INFO, "- 020", Devel); diff --git a/src/mainwindow.h b/src/mainwindow.h index d003cb0c..031edb4d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -320,6 +320,8 @@ private slots: void slotTakeOverFocusToQSOTabWidget(); void slotTakeOverFocusToMainQSOInput(); void slotNewLogLevel(DebugLogLevel l); + void slotQSO_SetBand(const double _fr); + void slotQSO_SetMode(const QString _submode); private: //void setWidgetsOrder(); @@ -381,9 +383,10 @@ private slots: //bool validCharactersInCall(const QString &_qrz); // Looks for SQLi and no valid chars in the QRZ - QString readDataFromUI(); // Reads the QSO data from the UI and returns the SQL Query - QString readDataFromUIDX(); - QString readDataFromUIDXModifying(); + bool readQSOFromUI(); + //QString readDataFromUI(); // Reads the QSO data from the UI and returns the SQL Query + //QString readDataFromUIDX(); + //QString readDataFromUIDXModifying(); void actionsJustAfterAddingOneQSO(); //void clearForNextQSO(); void clearUIDX(bool _full = false); //full= false leaves the "keep this data"; full = true clears everything diff --git a/src/qso.cpp b/src/qso.cpp index 75ab0d22..491244fd 100644 --- a/src/qso.cpp +++ b/src/qso.cpp @@ -51,9 +51,19 @@ void QSO::logEvent(const QString &_func, const QString &_msg, DebugLogLevel _le emit debugLog (_func, _msg, _level); } +bool QSO::isComplete() +{ + return (haveBand && haveMode && haveDateTime && haveCall); +} + void QSO::clear() { logEvent (Q_FUNC_INFO, "Start", Debug); + haveBand = false; + haveMode = false; + haveDateTime = false; + haveCall = false; + qsoId = -1; logId = -1; backup = false; @@ -271,6 +281,7 @@ double QSO::setFreqTX(const double _f) if (_f>0) { freq_tx = _f; + emit getBandSignal (freq_tx); return true; } else { @@ -329,6 +340,7 @@ bool QSO::setCall(const QString &_c) { logEvent (Q_FUNC_INFO, QString("END - true"), Debug); callsign = aux; + haveCall = true; return true; } else @@ -345,10 +357,11 @@ QString QSO::getCall() bool QSO::setBand(const QString &_c) { - //qDebug() << "QSO::setBand: "<< _c; + qDebug() << "QSO::setBand: "<< _c; if (_c.length()>0) { band = _c; + haveBand = true; return true; } else @@ -397,6 +410,7 @@ bool QSO::setMode(const QString &_c) { mode = aux; logEvent (Q_FUNC_INFO, "END - True", Debug); + haveMode = true; return true; } else @@ -417,6 +431,8 @@ bool QSO::setDate(const QDate &_c) if (_c.isValid()) { qso_dateTime.setDate(_c); + if(qso_dateTime.time().isValid ()) + haveDateTime = true; return true; } else @@ -475,6 +491,8 @@ bool QSO::setTimeOn(const QTime &_c) { //qDebug() << "QSO::setQSLTime: VALID"; qso_dateTime.setTime(_c); + if (qso_dateTime.date().isValid ()) + haveDateTime = true; return true; } else @@ -493,6 +511,7 @@ bool QSO::setDateTimeOn(const QDateTime &_c) if (_c.isValid()) { qso_dateTime = _c; + haveDateTime = true; return true; } else @@ -1635,23 +1654,6 @@ QString QSO::getHRDLogStatus() return hrdlog_status; } -bool QSO::setFreq(const double _f) -{ - if (_f>0) - { - freq = _f; - return true; - } - else { - return false; - } -} - -double QSO::getFreq() -{ - return freq; -} - bool QSO::setK_Index(const int _i) { if ((_i>=0) && (_i<=400)) @@ -2442,6 +2444,9 @@ QString QSO::getState() bool QSO::setSubmode(const QString &_c) { submode = _c; + //if (requestMode){ + // emit getModeSignal(submode); + //} return true; } @@ -2601,6 +2606,7 @@ bool QSO::setLoTWQSLSDate2(const QString& data) { } QHash QSO::SetDataHash; + void QSO::InitializeHash() { SetDataHash = { {"ADDRESS", decltype(std::mem_fn(&QSO::decltype_function))(&QSO::setAddress)}, @@ -2780,6 +2786,12 @@ bool QSO::setData(const QString &_adifPair) bool QSO::add() { + if (!isComplete ()) + { + qDebug() << Q_FUNC_INFO << " - QSO NOT COMPLETE"; + return false; + } + QSqlQuery query; qDebug() << Q_FUNC_INFO << "Band: " << getBand(); qDebug() << Q_FUNC_INFO << "Mode: " << getMode (); @@ -2787,7 +2799,7 @@ bool QSO::add() query.prepare (QString("SELECT band.id, mode.id FROM band CROSS JOIN mode WHERE band.name=:bandName AND mode.submode=:subMode")); query.bindValue (":bandName", getBand ()); - query.bindValue (":subMode", getMode ()); + query.bindValue (":subMode", getSubmode ()); int bandId = -1; int modeId = -1; if(query.exec()) @@ -2812,7 +2824,15 @@ bool QSO::add() } query.clear(); - query.prepare( "INSERT INTO log (call, qso_date, bandid, modeid, srx, stx, srx_string, stx_string, qso_date_off, band_rx, rst_sent, rst_rcvd, cqz, ituz, dxcc, address, age, cnty, comment, a_index, ant_az, ant_el, ant_path, arrl_sect, checkcontest, class, contacted_op, contest_id, country, credit_submitted, credit_granted, distance, eq_call, email, eqsl_qslrdate, eqsl_qslsdate, eqsl_qsl_rcvd, eqsl_qsl_sent, force_init, freq, freq_rx, gridsquare, my_gridsquare, iota, iota_island_id, my_iota, my_iota_island_id, k_index, lat, lon, my_lat, my_lon, lotw_qslrdate, lotw_qslsdate, lotw_qsl_rcvd, lotw_qsl_sent, clublog_qso_upload_date, clublog_qso_upload_status, max_bursts, ms_shower, my_antenna, my_city, my_cnty, my_country, my_cq_zone, my_name, name, operator, station_callsign, owner_callsign, my_rig, my_sig, my_sig_info, my_sota_ref, my_state, state, my_street, my_vucc_grids, notes, nr_bursts, nr_pings, 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, tx_pwr, sat_mode, sat_name, sfi, sig, sota_ref, swl, ten_ten, vucc_grids, web, points, multiplier, lognumber) VALUES (:call, :qso_date, :bandid, :modeid, :srx, :stx, :srx_string, :stx_string, :qso_date_off, :band_rx, :rst_sent, :rst_rcvd, :cqz, :ituz, :dxcc, :address, :age, :cnty, :comment, :a_index, :ant_az, :ant_el, :ant_path, :arrl_sect, :checkcontest, :class, :contacted_op, :contest_id, :country, :credit_submitted, :credit_granted, :distance, :eq_call, :email, :eqsl_qslrdate, :eqsl_qslsdate, :eqsl_qsl_rcvd, :eqsl_qsl_sent, :force_init, :freq, :freq_rx, :gridsquare, :my_gridsquare, :iota, :iota_island_id, :my_iota, :my_iota_island_id, :k_index, :lat, :lon, :my_lat, :my_lon, :lotw_qslrdate, :lotw_qslsdate, :lotw_qsl_rcvd, :lotw_qsl_sent, :clublog_qso_upload_date, :clublog_qso_upload_status, :max_bursts, :ms_shower, :my_antenna, :my_city, :my_cnty, :my_country, :my_cq_zone, :my_name, :name, :operator, :station_callsign, :owner_callsign, :my_rig, :my_sig, :my_sig_info, :my_sota_ref, :my_state, :state, :my_street, :my_vucc_grids, :notes, :nr_bursts, :nr_pings, :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, :tx_pwr, :sat_mode, :sat_name, :sfi, :sig, :sota_ref, :swl, :ten_ten, :vucc_grids, :web, :points, :multiplier, :lognumber)" ); + bool ok = query.prepare( "INSERT INTO log (call, qso_date, bandid, modeid, srx, stx, srx_string, stx_string, qso_date_off, band_rx, rst_sent, rst_rcvd, cqz, ituz, dxcc, address, age, cnty, comment, a_index, ant_az, ant_el, ant_path, arrl_sect, checkcontest, class, contacted_op, contest_id, country, credit_submitted, credit_granted, distance, eq_call, email, eqsl_qslrdate, eqsl_qslsdate, eqsl_qsl_rcvd, eqsl_qsl_sent, force_init, freq, freq_rx, gridsquare, my_gridsquare, iota, iota_island_id, my_iota, my_iota_island_id, k_index, lat, lon, my_lat, my_lon, lotw_qslrdate, lotw_qslsdate, lotw_qsl_rcvd, lotw_qsl_sent, clublog_qso_upload_date, clublog_qso_upload_status, max_bursts, ms_shower, my_antenna, my_city, my_cnty, my_country, my_cq_zone, my_name, name, operator, station_callsign, owner_callsign, my_rig, my_sig, my_sig_info, my_sota_ref, my_state, state, my_street, my_vucc_grids, notes, nr_bursts, nr_pings, 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, tx_pwr, sat_mode, sat_name, sfi, sig, sota_ref, swl, ten_ten, vucc_grids, web, points, multiplier, lognumber) VALUES (:call, :qso_date, :bandid, :modeid, :srx, :stx, :srx_string, :stx_string, :qso_date_off, :band_rx, :rst_sent, :rst_rcvd, :cqz, :ituz, :dxcc, :address, :age, :cnty, :comment, :a_index, :ant_az, :ant_el, :ant_path, :arrl_sect, :checkcontest, :class, :contacted_op, :contest_id, :country, :credit_submitted, :credit_granted, :distance, :eq_call, :email, :eqsl_qslrdate, :eqsl_qslsdate, :eqsl_qsl_rcvd, :eqsl_qsl_sent, :force_init, :freq, :freq_rx, :gridsquare, :my_gridsquare, :iota, :iota_island_id, :my_iota, :my_iota_island_id, :k_index, :lat, :lon, :my_lat, :my_lon, :lotw_qslrdate, :lotw_qslsdate, :lotw_qsl_rcvd, :lotw_qsl_sent, :clublog_qso_upload_date, :clublog_qso_upload_status, :max_bursts, :ms_shower, :my_antenna, :my_city, :my_cnty, :my_country, :my_cq_zone, :my_name, :name, :operator, :station_callsign, :owner_callsign, :my_rig, :my_sig, :my_sig_info, :my_sota_ref, :my_state, :state, :my_street, :my_vucc_grids, :notes, :nr_bursts, :nr_pings, :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, :tx_pwr, :sat_mode, :sat_name, :sfi, :sig, :sota_ref, :swl, :ten_ten, :vucc_grids, :web, :points, :multiplier, :lognumber)" ); + + if (!ok){ + qDebug() << Q_FUNC_INFO << " - Prepare NOK"; + return ok; + } + else{ + qDebug() << Q_FUNC_INFO << " - Prepare OK"; + } query.bindValue(":call", getCall()); query.bindValue(":qso_date", util->getDateTimeSQLiteStringFromDateTime (getDateTimeOn ())); @@ -2944,10 +2964,216 @@ bool QSO::add() { qDebug() << Q_FUNC_INFO << ": QSO NOT ADDED: " << query.lastQuery (); qDebug() << Q_FUNC_INFO << ": DB ERROR: " << query.lastError (); - //qDebug() << Q_FUNC_INFO << ": DB NativeError: " << query.lastError().nativeErrorCode(); + qDebug() << Q_FUNC_INFO << ": DB NativeError: " << query.lastError().nativeErrorCode(); return false; } return false; } +bool QSO::modify(const int _qsoId) +{ + + qDebug() << Q_FUNC_INFO << " - Start"; + if (!isComplete ()) + return false; + QSqlQuery query; + qDebug() << Q_FUNC_INFO << " - Complete"; + + + query.prepare (QString("SELECT band.id, mode.id FROM band CROSS JOIN mode WHERE band.name=:bandName AND mode.submode=:subMode")); + + query.bindValue (":bandName", getBand ()); + query.bindValue (":subMode", getMode ()); + int bandId = -1; + int modeId = -1; + if(query.exec()) + { + qDebug() << Q_FUNC_INFO << " Query OK: " << query.lastQuery (); + + if (query.next()) + { + qDebug() << Q_FUNC_INFO << " - Band/BandId: " << getBand () << "/" << query.value(0).toString () << " - Mode/modeId: " << getMode() << "/" << query.value(1).toString(); + bandId = query.value(0).toInt (); + modeId = query.value(1).toInt (); + } + else + { + qDebug() << Q_FUNC_INFO << " NO NEXT"; + } + } + else + { + qDebug() << Q_FUNC_INFO << " First Query not Ok: " << query.lastQuery (); + qDebug() << Q_FUNC_INFO << " Error: " << query.lastError (); + } + + query.clear(); + + bool ok = query.prepare( + "UPDATE log SET call = :call, qso_date = :qso_date, bandid = :bandid, modeid = :modeid, srx = :srx, stx = :stx, srx_string = :srx_string, " + "stx_string = :stx_string, qso_date_off = :qso_date_off, band_rx = :band_rx, rst_sent = :rst_sent, rst_rcvd = :rst_rcvd," + "cqz = :cqz, ituz = :ituz, dxcc = :dxcc, address = :address, age = :age, cnty = :cnty, comment = :comment," + "a_index = :a_index, ant_az = :ant_az, ant_el = :ant_el, ant_path = :ant_path, arrl_sect = :arrl_sect, checkcontest = :checkcontest, " + "class = :class, contacted_op = :contacted_op, contest_id = :contest_id, country = :country, credit_submitted = :credit_submitted, " + "credit_granted = :credit_granted, distance = :distance, eq_call = :eq_call, email = :email, eqsl_qslrdate = :eqsl_qslrdate, " + "eqsl_qslsdate = :eqsl_qslsdate, eqsl_qsl_rcvd = :eqsl_qsl_rcvd, eqsl_qsl_sent = :eqsl_qsl_sent," + "force_init = :force_init, freq = :freq, freq_rx = :freq_rx, gridsquare = :gridsquare, my_gridsquare = :my_gridsquare, " + "iota = :iota, iota_island_id = :iota_island_id," + "my_iota = :my_iota, my_iota_island_id = :my_iota_island_id, k_index = :k_index, lat = :lat, lon = :lon, my_lat = :my_lat, my_lon = :my_lon," + "lotw_qslrdate = :lotw_qslrdate, lotw_qslsdate = :lotw_qslsdate, lotw_qsl_rcvd = :lotw_qsl_rcvd, lotw_qsl_sent = :lotw_qsl_sent, " + "clublog_qso_upload_date = :clublog_qso_upload_date, clublog_qso_upload_status = :clublog_qso_upload_status, " + "max_bursts = :max_bursts, ms_shower = :ms_shower, my_antenna = :my_antenna, my_city = :my_city, my_cnty = :my_cnty," + "my_country = :my_country, my_cq_zone = :my_cq_zone, my_name = :my_name, name = :name, operator = :operator, " + "station_callsign = :station_callsign, owner_callsign = :owner_callsign, my_rig = :my_rig, my_sig = :my_sig, " + "my_sig_info = :my_sig_info, my_sota_ref = :my_sota_ref, my_state = :my_state, state = :state, my_street = :my_street, " + "my_vucc_grids = :my_vucc_grids, notes = :notes, nr_bursts = :nr_bursts, nr_pings = :nr_pings, pfx = :pfx, precedence = :precedence, " + "prop_mode = :prop_mode, public_key = :public_key, qslmsg = :qslmsg, qslrdate = :qslrdate, qslsdate = :qslsdate" + "WHERE id = :id"); + + if (!ok){return ok;} + query.bindValue (":id", _qsoId); + + query.bindValue(":call", getCall()); + + query.bindValue(":qso_date", util->getDateTimeSQLiteStringFromDateTime (getDateTimeOn ())); + + query.bindValue(":bandid", bandId); + query.bindValue(":modeid", modeId); + query.bindValue(":srx", getSrx()); + query.bindValue(":stx", getStx()); + query.bindValue(":srx_string", getSrxString()); + query.bindValue(":stx_string", getStxString()); + query.bindValue(":qso_date_off", util->getDateSQLiteStringFromDate(getDateOff())); + //query.bindValue(":band_rx", ""); + query.bindValue(":rst_sent", getRSTTX()); + + query.bindValue(":rst_rcvd", getRSTRX()); + query.bindValue(":cqz", getCQZone()); + query.bindValue(":ituz", getItuZone()); + query.bindValue(":dxcc", getDXCC()); + query.bindValue(":address", getAddress()); + query.bindValue(":age", getAge()); + query.bindValue(":cnty", getCounty()); + query.bindValue(":comment", getComment()); + query.bindValue(":a_index", getA_Index()); + query.bindValue(":ant_az", getAnt_az()); + + query.bindValue(":ant_el", getAnt_el()); + query.bindValue(":ant_path", getAnt_Path()); + query.bindValue(":arrl_sect", getARRL_Sect()); + query.bindValue(":checkcontest", getCheck()); + query.bindValue(":class", getClass()); + query.bindValue(":contacted_op", getContactedOperator()); + query.bindValue(":contest_id", getContestID()); + query.bindValue(":country", getCountry()); + query.bindValue(":credit_submitted", getCreditSubmitted()); + query.bindValue(":credit_granted,", getCreditGranted()); + + query.bindValue(":distance", getDistance()); + query.bindValue(":eq_call", getEQ_Call()); + query.bindValue(":email", getEmail()); + query.bindValue(":eqsl_qslrdate", util->getDateSQLiteStringFromDate(getEQSLQSLRDate())); + query.bindValue(":eqsl_qslsdate", util->getDateSQLiteStringFromDate(getEQSLQSLSDate())); + query.bindValue(":eqsl_qsl_rcvd", getEQSLQSL_RCVD()); + query.bindValue(":eqsl_qsl_sent", getEQSLQSL_SENT()); + query.bindValue(":force_init", getForceInit()); + query.bindValue(":freq", getFreqTX()); + query.bindValue(":freq_rx", getFreqRX()); + + query.bindValue(":gridsquare", getGridSquare()); + query.bindValue(":my_gridsquare", getMyGridSquare()); + query.bindValue(":iota", getIOTA()); + query.bindValue(":iota_island_id", getIotaID()); + query.bindValue(":my_iota", getMyIOTA()); + query.bindValue(":my_iota_island_id", getMyIotaID()); + query.bindValue(":k_index", getK_Index()); + query.bindValue(":lat", getLatitude()); + query.bindValue(":lon", getLongitude()); + query.bindValue(":my_lat", getMyLatitude()); + + query.bindValue(":my_lon", getMyLongitude()); + query.bindValue(":lotw_qslrdate", util->getDateSQLiteStringFromDate(getLoTWQSLRDate())); + query.bindValue(":lotw_qslsdate", util->getDateSQLiteStringFromDate(getLoTWQSLSDate())); + query.bindValue(":lotw_qsl_rcvd", getLoTWQSL_RCVD()); + query.bindValue(":lotw_qsl_sent", getLoTWQSL_SENT()); + query.bindValue(":clublog_qso_upload_date", util->getDateSQLiteStringFromDate(getClublogQSOUpdateDate())); + query.bindValue(":clublog_qso_upload_status", getClubLogStatus()); + query.bindValue(":max_bursts", getMaxBursts()); + query.bindValue(":ms_shower", getMsShower()); + query.bindValue(":my_antenna", getMyAntenna()); + + query.bindValue(":my_city", getMyCity()); + query.bindValue(":my_cnty", getMyCounty()); + query.bindValue(":my_country", getMyCountry()); + query.bindValue(":my_cq_zone", getMyCQZone()); + query.bindValue(":my_name", getMyName()); + query.bindValue(":name", getName()); + query.bindValue(":operator", getOperatorCallsign()); + query.bindValue(":station_callsign", getStationCallsign()); + query.bindValue(":owner_callsign", getOwnerCallsign()); + query.bindValue(":my_rig", getMyRig()); + + query.bindValue(":my_sig", getMySig()); + query.bindValue(":my_sig_info", getMySigInfo()); + query.bindValue(":my_sota_ref", getMySOTA_REF()); + query.bindValue(":my_state", getMyState()); + query.bindValue(":state", getState()); + query.bindValue(":my_street", getMyStreet()); + query.bindValue(":my_vucc_grids", getMyVUCCGrids()); + query.bindValue(":notes", getNotes()); + query.bindValue(":nr_bursts", getNrBursts()); + query.bindValue(":nr_pings", getNrPings()); + + query.bindValue(":pfx", getPrefix()); + query.bindValue(":precedence", getPrecedence()); + query.bindValue(":prop_mode", getPropMode()); + query.bindValue(":public_key", getPublicKey()); + query.bindValue(":qslmsg", getQSLMsg()); + query.bindValue(":qslrdate", util->getDateSQLiteStringFromDate(getQSLRDate())); + query.bindValue(":qslsdate", util->getDateSQLiteStringFromDate(getQSLSDate())); + query.bindValue(":qsl_rcvd", getQSL_RCVD()); + query.bindValue(":qsl_sent", getQSL_SENT()); + query.bindValue(":qsl_rcvd_via", getQSLRecVia()); + + query.bindValue(":qsl_sent_via", getQSLSentVia()); + query.bindValue(":qsl_via", getQSLVia()); + query.bindValue(":qso_complete", getQSOComplete()); + query.bindValue(":qso_random", getQSORandom()); + query.bindValue(":qth", getQTH()); + query.bindValue(":rx_pwr", getRXPwr()); + query.bindValue(":tx_pwr", getTXPwr()); + query.bindValue(":sat_mode", getSatMode()); + query.bindValue(":sat_name",getSatName() ); + query.bindValue(":sfi", getSFI()); + + query.bindValue(":sig", getSig()); + query.bindValue(":sota_ref", getSOTA_REF()); + query.bindValue(":swl", getSwl()); + query.bindValue(":ten_ten", getTenTen()); + query.bindValue(":vucc_grids", getVUCCGrids()); + query.bindValue(":web", getWeb()); + //query.bindValue(":points", ); + //query.bindValue(":multiplier", ); + query.bindValue(":lognumber", getLogId()); + if (query.exec()) + { + qDebug() << Q_FUNC_INFO << ": QSO Modified: " << query.lastQuery (); + int rowsUpdated = query.numRowsAffected(); + if (rowsUpdated == 0) { + qDebug() << "No rows updated"; + } else { + qDebug() << "Rows updated: " << rowsUpdated; + } + return true; + } + else + { + qDebug() << Q_FUNC_INFO << ": QSO NOT ADDED: " << query.lastQuery (); + qDebug() << Q_FUNC_INFO << ": DB ERROR: " << query.lastError (); + //qDebug() << Q_FUNC_INFO << ": DB NativeError: " << query.lastError().nativeErrorCode(); + + return false; + } + return false; +} diff --git a/src/qso.h b/src/qso.h index fe303ab6..ffb180f3 100644 --- a/src/qso.h +++ b/src/qso.h @@ -238,8 +238,6 @@ class QSO : public QObject QDate getHRDUpdateDate(); bool setHRDLogStatus(const QString &_c); QString getHRDLogStatus(); - bool setFreq(const double _f); - double getFreq(); bool setK_Index(const int _i); int getK_Index(); bool setDateOff(const QDate &_c); @@ -364,6 +362,7 @@ class QSO : public QObject int getStx(); bool setStxString(const QString &_c); QString getStxString(); + //bool setSubmode(const QString &_c, bool requestMode = false); bool setSubmode(const QString &_c); QString getSubmode(); bool setSwl(bool _k); @@ -381,10 +380,14 @@ class QSO : public QObject bool setMyWwffRef(const QString &_c); QString getMyWwffRef(); bool add(); + bool modify(const int _qsoId); + bool isComplete(); signals: void debugLog (QString _func, QString _msg, DebugLogLevel _level); + void getBandSignal (double fr); + void getModeSignal (QString submode); private: void logEvent(const QString &_func, const QString &_msg, DebugLogLevel _level); @@ -412,6 +415,7 @@ class QSO : public QObject bool backup, lotwUpdating, realTime, manualMode, silent_key; bool keepComment, keepOther, keepMyData, keepSat, modifying, isValidDistance, forceInit, qso_random, swl; + bool haveBand, haveMode, haveDateTime, haveCall; Utilities *util; DebugLogLevel logLevel;