1 /***************************************************************************
2 database.cpp - description
3 -------------------
4 begin : sept 2011
5 copyright : (C) 2011 by Jaime Robles
6 email : jaime@robles.es
7 ***************************************************************************/
8
9 /*****************************************************************************
10 * This file is part of KLog. *
11 * *
12 * KLog is free software: you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation, either version 3 of the License, or *
15 * (at your option) any later version. *
16 * *
17 * KLog is distributed in the hope that it will be useful, *
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
20 * GNU General Public License for more details. *
21 * *
22 * You should have received a copy of the GNU General Public License *
23 * along with KLog. If not, see <https://www.gnu.org/licenses/>. *
24 * *
25 *****************************************************************************/
26
27 #include "database.h"
28 //#include <qDebug>
29
DataBase(const QString & _parentClass,const QString & _DBName)30 DataBase::DataBase(const QString &_parentClass, const QString &_DBName)
31 {
32 //qDebug() << "DataBase::DataBase: PLAIN: " << _parentClass << " / Name = " << _DBName << QT_ENDL;
33 constrid = 1;
34 created = false;
35
36 util = new Utilities();
37 softVersion = util->getVersion();
38 dbName = _DBName;
39 //connect(this, SIGNAL(debugLog(QString, QString, int)), this, SLOT(slotPrintErrors(QString, QString, int)) );
40 //qDebug() << "DataBase::DataBase1: dbName: " << dbName << QT_ENDL;
41
42 //db = QSqlDatabase::database();
43
44 dbVersion = DBVersionf;
45 createConnection(QString(Q_FUNC_INFO)+"1");
46 //qDebug() << "DataBase::DataBase: PLAIN - connection Name: " << dbConnectionName << QT_ENDL;
47 //qDebug() << "DataBase::DataBase: PLAIN - DB Name: " << db.databaseName() << QT_ENDL;
48 insertPreparedQueries.clear();
49 insertQueryFields.clear();
50 //qDebug() << "DataBase::DataBase: PLAIN: - END" << QT_ENDL;
51 }
52
DataBase(const QString & _parentClass,const QString & _softVersion,const QString & _DBName)53 DataBase::DataBase(const QString &_parentClass, const QString &_softVersion, const QString &_DBName)
54 {
55 //qDebug() << "DataBase::DataBase2: " << _parentClass << "/" << _softVersion << " / Name = " << _DBName << QT_ENDL;
56 //TODO: Sometimes the DB is created without the proper calling (without passing softVersion)
57 constrid = 2;
58 created = false;
59 dbVersion = DBVersionf;
60 softVersion = _softVersion;
61 //inMemoryOnly = inmemoryonly;
62 latestReaded = 0.0f;
63 util = new Utilities();
64 util->setVersion(softVersion);
65
66 dbName = _DBName;
67 //connect(this, SIGNAL(debugLog(QString, QString, int)), this, SLOT(slotPrintErrors(QString, QString, int)) );
68
69 //qDebug() << "DataBase::DataBase2: dbName: " << dbName << QT_ENDL;
70 //dbDir = dbName;
71 //qDebug() << "DataBase::DataBase: DB(string): " << dbName << QT_ENDL;
72
73 //db = QSqlDatabase::database();
74
75
76 //db = QSqlDatabase::removeDatabase("QSQLITE");
77 if (util->getVersionDouble()>0)
78 {
79 createConnection(QString(Q_FUNC_INFO)+"2");
80 }
81 //qDebug() << "DataBase::DataBase: - connection Name: " << dbConnectionName << QT_ENDL;
82 //qDebug() << "DataBase::DataBase: - DB Name: " << db.databaseName() << QT_ENDL;
83 insertPreparedQueries.clear();
84 insertQueryFields.clear();
85 //qDebug() << "DataBase::DataBase2: END" << QT_ENDL;
86 }
87
88
~DataBase()89 DataBase::~DataBase()
90 {
91 //qDebug() << "DataBase::~DataBase" << QT_ENDL;
92 }
93
94 //void DataBase::slotPrintErrors(QString _func, QString _msg, int _level)
95 //{
96 //qDebug() << "DataBase::slotPrintErrors: FUNC: " << _func << QT_ENDL;
97 //qDebug() << "DataBase::slotPrintErrors: MSG: " << _msg << QT_ENDL;
98 //qDebug() << "DataBase::slotPrintErrors: LEVEL: " << QString::number(_level) << QT_ENDL;
99 //}
100
getSoftVersion()101 QString DataBase::getSoftVersion()
102 {
103 QSqlQuery query;
104
105 QString stringQuery ("SELECT MAX (softversion) FROM softwarecontrol");
106 bool sqlOK = query.exec(stringQuery);
107
108 if (sqlOK)
109 {
110 query.next();
111 if (query.isValid())
112 {
113 return (query.value(0)).toString();
114 }
115 else
116 {
117 query.finish();
118 return QString();
119 }
120 }
121 else
122 { //ERROR in Query execution
123 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
124 query.finish();
125 return QString();
126 }
127 }
128
getDBVersion()129 QString DataBase::getDBVersion()
130 {
131 QSqlQuery query;
132
133 QString stringQuery ("SELECT MAX (dbversion) FROM softwarecontrol");
134 bool sqlOK = query.exec(stringQuery);
135
136 if (sqlOK)
137 {
138 query.next();
139 if (query.isValid())
140 {
141 return QString::number((query.value(0)).toDouble(), 'f', 3);
142 }
143 else
144 {
145 query.finish();
146 return QString();
147 }
148 }
149 else
150 { //ERROR in Query execution
151 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
152 query.finish();
153 return QString();
154 }
155 }
156
157 /*
158 bool DataBase::setDir(const QString &_dir)
159 {
160 dbDir = _dir;
161 return true;
162 }
163 */
164
getDBName()165 QString DataBase::getDBName()
166 {
167 return db.databaseName();
168 }
169
getColumnNamesFromTable(const QString & _tableName)170 QStringList DataBase::getColumnNamesFromTable(const QString &_tableName)
171 {
172 //qDebug() << "DataBase::getColumnNamesFromTable: " << _tableName << QT_ENDL;
173 QSqlQuery query;
174
175 QString queryString = QString("PRAGMA table_info('%1')").arg(_tableName);
176
177 bool sqlOK = query.exec(queryString);
178 QStringList list;
179 list.clear();
180 QString aux;
181 if (sqlOK)
182 {
183 //qDebug() << "DataBase::getColumnNamesFromTable: OK" << QT_ENDL;
184 while(query.next())
185 {
186 if (query.isValid())
187 {
188 aux = (query.value(1)).toString();
189 if (( aux.toUpper() != "ID" ) && (aux.length()>0))
190 {
191 list << aux;
192 //qDebug() << "DataBase::getColumnNamesFromTable: " << (query.value(1)).toString() << QT_ENDL;
193 }
194 }
195 }
196 query.finish();
197 }
198 else
199 {
200 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
201 }
202 query.finish();
203 //qDebug() << "DataBase::getColumnNamesFromTable: " << QString::number(list.size()) << QT_ENDL;
204 return list;
205 }
206
compress()207 void DataBase::compress()
208 {
209 //qDebug() << "DataBase::compress " << QT_ENDL;
210 //QSqlDatabase db = QSqlDatabase::database();
211 if (!db.open()) { /* Flawfinder: ignore */
212 QMessageBox::warning(nullptr, QObject::tr("Database Error"),
213 db.lastError().text());
214 }
215 else
216 {
217 db.exec("VACUUM;");
218 }
219 }
220
reConnect(const QString & _DBName)221 bool DataBase::reConnect(const QString &_DBName)
222 {
223 //qDebug() << "DataBase::reConnect:" << QT_ENDL;
224 db.close();
225 dbName = _DBName;
226 //qDebug() << "DataBase::reConnect: DB closed" << QT_ENDL;
227 //qDebug() << "DataBase::reConnect: DB: " << dbDir << QT_ENDL;
228 bool sqlOK = createConnection(Q_FUNC_INFO);
229 if (!sqlOK)
230 {
231 //// emit debugLog(Q_FUNC_INFO, "1", 7);
232 }
233 return sqlOK;
234 //qDebug() << "DataBase::reConnect: END" << QT_ENDL;
235 }
236
createConnection(const QString & function,bool newDB)237 bool DataBase::createConnection(const QString &function, bool newDB)
238 {
239 //qDebug() << "DataBase::createConnection: " << function << "-" << QString::number(dbVersion) << "/" << softVersion << QT_ENDL;
240 QString stringQuery;
241 QSqlQuery query;
242
243 if (!db.isOpen())
244 {
245 //qDebug() << "DataBase::createConnection: DB NOT Opened" << QT_ENDL;
246 if (db.isValid())
247 {
248 //qDebug() << "DataBase::createConnection: DB is Valid" << QT_ENDL;
249 }
250 else
251 {
252 //qDebug() << "DataBase::createConnection: DB is not valid, let's call addDataBase" << QT_ENDL;
253 if (db.isOpen())
254 {
255 //qDebug() << "DataBase::createConnection: DB is already open" << QT_ENDL;
256 }
257 else
258 {
259 //qDebug() << "DataBase::createConnection: DB is NOT open, let's open: connection name" << db.connectionName()<< QT_ENDL;
260 QSqlDatabase::removeDatabase("qt_sql_default_connection");
261 db = QSqlDatabase::addDatabase("QSQLITE");
262 }
263
264 //qDebug() << "DataBase::createConnection: Now we call setDatabaseName" << QT_ENDL;
265 db.setDatabaseName(dbName);
266 //qDebug() << "DataBase::createConnection: end of not valid" << QT_ENDL;
267 }
268 //qDebug() << "DataBase::createConnection: end of valid check, let's try if it is open" << QT_ENDL;
269 if (!db.open()) /* Flawfinder: ignore */
270 {
271 //qDebug() << "DataBase::createConnection:Not open " << QT_ENDL;
272 QMessageBox::warning(nullptr, QObject::tr("Database Error"), db.lastError().text());
273 //qDebug() << "DataBase::createConnection: DB creation ERROR" << QT_ENDL;
274 //// emit debugLog(Q_FUNC_INFO, "1", 7);
275 return false;
276 }
277 else
278 {
279 //qDebug() << "DataBase::createConnection: created and opened after the creation" << QT_ENDL;
280 if (isTheDBCreated())
281 {
282 //qDebug() << "DataBase::createConnection: DB Exists" << QT_ENDL;
283 }
284 else
285 {
286 //qDebug() << "DataBase::createConnection: DB does not exist" << QT_ENDL;
287 createDataBase();
288 //qDebug() << "DataBase::createConnection: After creation" << QT_ENDL;
289 stringQuery ="PRAGMA main.page_size = 4096;";
290 query.exec(stringQuery);
291 stringQuery ="PRAGMA main.cache_size=10000;";
292 query.exec(stringQuery);
293 stringQuery ="PRAGMA main.locking_mode=EXCLUSIVE;";
294 query.exec(stringQuery);
295 stringQuery ="PRAGMA main.synchronous=NORMAL;";
296 query.exec(stringQuery);
297 stringQuery ="PRAGMA main.journal_mode=WAL;";
298 query.exec(stringQuery);
299 stringQuery ="PRAGMA main.cache_size=5000;";
300 query.exec(stringQuery);
301 stringQuery ="PRAGMA synchronous=OFF;";
302 query.exec(stringQuery);
303 stringQuery ="PRAGMA main.temp_store = MEMORY;";
304 query.exec(stringQuery);
305 //stringQuery="PRAGMA auto_vacuum = FULL;";
306 //query.exec(stringQuery);
307 stringQuery ="PRAGMA case_sensitive_like=OFF;";
308 query.exec(stringQuery);
309 }
310 }
311 }
312 else
313 {
314 //qDebug() << "DataBase::createConnection: No Error, DB is open" << QT_ENDL;
315 }
316 //qDebug() << "DataBase::createConnection: Going to run - createBandModeMaps " << QT_ENDL;
317
318 if (createBandModeMaps())
319 {
320 //qDebug() << "DataBase::createConnection: createBandModeMaps true" << QT_ENDL;
321 }
322 else
323 {
324 //qDebug() << "DataBase::createConnection: createBandModeMaps false Stop" << QT_ENDL;
325 }
326 //created = true;
327 //qDebug() << "DataBase::createConnection -------------------------------------------- END" << QT_ENDL;
328
329 return unMarkAllQSO();
330 }
331
isTheDBCreated()332 bool DataBase::isTheDBCreated()
333 {
334 //qDebug() << "DataBase::isTheDBCreated: Called from: " << QString::number(constrid) << QT_ENDL;
335 QSqlQuery query;
336 int _num = 0;
337
338 QString stringQuery ("SELECT count(id) FROM softwarecontrol");
339 bool sqlOK = query.exec(stringQuery);
340
341 if (sqlOK)
342 {
343 //qDebug() << "DataBase::isTheDBCreated - SQL OK" << QT_ENDL;
344 query.next();
345 if (query.isValid())
346 {
347 //qDebug() << "DataBase::isTheDBCreated - valid" << QT_ENDL;
348 _num = (query.value(0)).toInt();
349 if (_num > 0)
350 {
351 //qDebug() << "DataBase::isTheDBCreated - DB Exists" << QT_ENDL;
352 //qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END TRUE" << QT_ENDL;
353 query.finish();
354 return true;
355 }
356 else
357 {
358 //qDebug() << "DataBase::isTheDBCreated - DB does not Exist" << QT_ENDL;
359 //qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END FALSE-1" << QT_ENDL;
360 query.finish();
361 //// emit debugLog(Q_FUNC_INFO, "1", 7);
362 return false;
363 }
364 }
365 else
366 {
367 //qDebug() << "DataBase::isTheDBCreated - not valid" << QT_ENDL;
368 //qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END FALSE-2" << QT_ENDL;
369 query.finish();
370 //// emit debugLog(Q_FUNC_INFO, "2", 7);
371 return false;
372 }
373 }
374 else
375 { //ERROR in Query execution
376 //qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------ ERROR IN QUERY EXECUTION" << QT_ENDL;
377 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
378 query.finish();
379 //// emit debugLog(Q_FUNC_INFO, "3", 7);
380 return false;
381 }
382 //query.finish();
383 //qDebug() << "DataBase::isTheDBCreated: ------------------------------------------------- END FALSE-X" << QT_ENDL;
384 //return false;
385 }
386
recreateTableLog()387 bool DataBase::recreateTableLog()
388 {
389 //qDebug() << "DataBase::recreateTableLog" << QT_ENDL;
390
391 if (!createTableLog(false)) // Create modetemp
392 {
393 //qDebug() << "DataBase::recreateTableLog: CreateTableLog returned false" << QT_ENDL;
394 //// emit debugLog(Q_FUNC_INFO, "1", 7);
395 return false;
396 }
397
398 QString queryString;
399 queryString.clear();
400 QStringList columns;
401 columns.clear();
402 columns << getColumnNamesFromTable("log");
403
404 queryString = columns.first();
405
406 for (int i=1;i<columns.size()-1;i++)
407 {
408 if ( !(columns.at(i) == "time_on") && !(columns.at(i) == "time_off") )
409 {
410 queryString = queryString + ", " + columns.at(i);
411 }
412 }
413
414 queryString = "INSERT INTO logtemp (" + queryString + ", " + columns.last() + ") SELECT " + queryString + ", " + columns.last() + " FROM log";
415
416 if (execQuery(Q_FUNC_INFO, queryString))
417 {
418 if (execQuery(Q_FUNC_INFO, "DROP table log"))
419 {
420 if (execQuery(Q_FUNC_INFO, "ALTER TABLE logtemp RENAME TO log"))
421 {
422 return true;
423 }
424 else
425 {
426 //qDebug() << "recreateTableLog ERROR - logTemp not renamed" << QT_ENDL;
427 //// emit debugLog(Q_FUNC_INFO, "2", 7);
428 return false;
429 }
430 }
431 else
432 {
433 //qDebug() << "recreateTableLog ERROR - log table not dropped" << QT_ENDL;
434 }
435 }
436 else
437 {
438 //qDebug() << "recreateTableLog ERROR - Data not moved" << QT_ENDL;
439 //// emit debugLog(Q_FUNC_INFO, "3", 7);
440 return false;
441 }
442 //qDebug() << "recreateTableLog END" << QT_ENDL;
443 return true;
444 }
445
createTableLog(bool temp)446 bool DataBase::createTableLog(bool temp)
447 { //Creates a temporal table or the normal one.
448 QString stringQuery = QString();
449 if (temp)
450 {
451 stringQuery = "CREATE TABLE log" ;
452 //qDebug() << "DataBase::createTableLog: log" << QT_ENDL;
453 }
454 else
455 {
456 stringQuery = "CREATE TABLE logtemp" ;
457 //qDebug() << "DataBase::createTableLog: logtemp" << QT_ENDL;
458 }
459 stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
460 "qso_date DATETIME NOT NULL, " // 2020-01-01 10:12:01
461 "call VARCHAR(40) NOT NULL, "
462 "rst_sent VARCHAR, "
463 "rst_rcvd VARCHAR, "
464 "bandid INTEGER NOT NULL, "
465 "modeid INTEGER NOT NULL, "
466 "cqz INTEGER, "
467 "ituz INTEGER, "
468 "dxcc INTEGER, "
469 "address VARCHAR, "
470 "age INTEGER, "
471 "cnty VARCHAR, "
472 "comment VARCHAR, "
473 "a_index INTEGER, "
474 "ant_az INTEGER, "
475 "ant_el INTEGER, "
476 "ant_path INTEGER, "
477 "arrl_sect INTEGER, "
478 "award_submitted VARCHAR, "
479 "award_granted VARCHAR, "
480 "band_rx INTEGER, "
481 "checkcontest VARCHAR, "
482 "class VARCHAR, "
483 "clublog_qso_upload_date DATETIME, "
484 "clublog_qso_upload_status VARCHAR(1), "
485 "cont VARCHAR(2), "
486 "contacted_op VARCHAR(40), "
487 "contest_id VARCHAR, "
488 "country VARCHAR, "
489 "credit_submitted VARCHAR, "
490 "credit_granted VARCHAR, "
491 "darc_dok VARCHAR,"
492 "distance INTEGER, "
493 "email VARCHAR, "
494 "eq_call VARCHAR, "
495 "eqsl_qslrdate DATETIME, "
496 "eqsl_qslsdate DATETIME, "
497 "eqsl_qsl_rcvd VARCHAR(1), "
498 "eqsl_qsl_sent VARCHAR(1), "
499 "fists INTEGER, "
500 "fists_cc INTEGER, "
501 "force_init INTEGER, "
502 "freq VARCHAR, "
503 "freq_rx VARCHAR, "
504 "gridsquare VARCHAR, "
505 "guest_op VARCHAR,"
506 "hrdlog_qso_upload_date DATETIME, "
507 "hrdlog_qso_upload_status VARCHAR(1), "
508 "iota VARCHAR(6), "
509 "iota_island_id VARCHAR, "
510 "k_index INTEGER, "
511 "lat VARCHAR(11), "
512 "lon VARCHAR(11), "
513 "lotw_qslrdate DATETIME, "
514 "lotw_qslsdate DATETIME, "
515 "lotw_qsl_rcvd VARCHAR(1), "
516 "lotw_qsl_sent VARCHAR(1), "
517 "max_bursts INTEGER, "
518 "multiplier INTEGER,"
519 "ms_shower VARCHAR, "
520 "my_antenna VARCHAR,"
521 "my_city VARCHAR, "
522 "my_cnty VARCHAR, "
523 "my_country INTEGER, "
524 "my_cq_zone INTEGER, "
525 "my_dxcc INTEGER, "
526 "my_fists INTEGER, "
527 "my_gridsquare VARCHAR, "
528 "my_iota VARCHAR(6), "
529 "my_iota_island_id VARCHAR, "
530 "my_itu_zone INTEGER ,"
531 "my_lat VARCHAR(11), "
532 "my_lon VARCHAR(11), "
533 "my_name VARCHAR, "
534 "my_postal_code VARCHAR ,"
535 "my_rig VARCHAR, "
536 "my_sig VARCHAR, "
537 "my_sig_info VARCHAR, "
538 "my_sota_ref VARCHAR, "
539 "my_state VARCHAR, "
540 "my_street VARCHAR, "
541 "my_usaca_counties VARCHAR, "
542 "my_vucc_grids VARCHAR, "
543 "name VARCHAR, "
544 "notes VARCHAR, "
545 "nr_bursts INTEGER, "
546 "nr_pings INTEGER, "
547 "operator VARCHAR, "
548 "owner_callsign VARCHAR, "
549 "pfx VARCHAR, "
550 "points INTEGER,"
551 "precedence VARCHAR, "
552 "prop_mode VARCHAR, "
553 "public_key VARCHAR, "
554 "qrzcom_qso_upload_date DATETIME, "
555 "qrzcom_qso_upload_status VARCHAR(1), "
556 "qslmsg VARCHAR, "
557 "qslrdate DATETIME, "
558 "qslsdate DATETIME, "
559 "qsl_rcvd VARCHAR(1), "
560 "qsl_sent VARCHAR(1), "
561 "qsl_rcvd_via VARCHAR(1), "
562 "qsl_sent_via VARCHAR(1), "
563 "qsl_via VARCHAR, "
564 "qso_complete VARCHAR(1), "
565 "qso_random INTEGER, "
566 "qth VARCHAR, "
567 "region VARCHAR, "
568 "rig VARCHAR, "
569 "rx_pwr REAL, "
570 "sat_mode VARCHAR, "
571 "sat_name VARCHAR, "
572 "sfi INTEGER, "
573 "sig VARCHAR, "
574 "sig_info VARCHAR, "
575 "silent_key VARCHAR(1), "
576 "skcc VARCHAR, "
577 "sota_ref VARCHAR, "
578 "srx_string VARCHAR, "
579 "srx VARCHAR(10), "
580 "stx_string VARCHAR, "
581 "stx VARCHAR(10), "
582 "state VARCHAR, "
583 "station_callsign VARCHAR, "
584 "submode VARCHAR,"
585 "swl INTEGER, "
586 "uksmg INTEGER, "
587 "usaca_counties VARCHAR, "
588 "ve_prov VARCHAR, "
589 "vucc_grids VARCHAR, "
590 "ten_ten INTEGER, "
591 "tx_pwr REAL, "
592 "web VARCHAR, "
593 "qso_date_off DATETIME, " //2020-01-01
594 "transmiterid VARCHAR, "
595 "marked VARCHAR(1), "
596 "lognumber INTEGER NOT NULL, "
597
598 "UNIQUE (call, qso_date, bandid, modeid, lognumber), "
599 "FOREIGN KEY (qso_complete) REFERENCES qso_complete_enumeration, "
600 "FOREIGN KEY (qsl_rcvd_via) REFERENCES qsl_via_enumeration, "
601 "FOREIGN KEY (qsl_sent_via) REFERENCES qsl_via_enumeration, "
602 "FOREIGN KEY (qsl_rcvd) REFERENCES qsl_rec_status, "
603 "FOREIGN KEY (qsl_sent) REFERENCES qsl_sent_status, "
604 "FOREIGN KEY (prop_mode) REFERENCES prop_mode_enumeration, "
605 "FOREIGN KEY (my_country) REFERENCES entity, "
606 "FOREIGN KEY (lotw_qsl_rcvd) REFERENCES qsl_rec_status, "
607 "FOREIGN KEY (lotw_qsl_sent) REFERENCES qsl_sent_status, "
608 "FOREIGN KEY (eqsl_qsl_rcvd) REFERENCES qsl_rec_status, "
609 "FOREIGN KEY (eqsl_qsl_sent) REFERENCES qsl_sent_status, "
610 "FOREIGN KEY (credit_submitted) REFERENCES award_enumeration, "
611 "FOREIGN KEY (credit_granted) REFERENCES award_enumeration, "
612 "FOREIGN KEY (country) REFERENCES entity, "
613 "FOREIGN KEY (ant_path) REFERENCES ant_path_enumeration, "
614 "FOREIGN KEY (arrl_sect) REFERENCES arrl_sect_enumeration, "
615 "FOREIGN KEY (band_rx) REFERENCES band, "
616 "FOREIGN KEY (modeid) REFERENCES mode, "
617 "FOREIGN KEY (submode) REFERENCES mode, "
618 "FOREIGN KEY (dxcc) REFERENCES entity, "
619 "FOREIGN KEY (bandid) REFERENCES band)");
620
621 //qDebug() << "DataBase::createTableLog: " << stringQuery << QT_ENDL;
622
623 if (execQuery(Q_FUNC_INFO, stringQuery))
624 {
625 return true;
626 }
627 else
628 {
629 //// emit debugLog(Q_FUNC_INFO, "1", 7);
630 return false;
631 }
632 /*
633 bool sqlOK = query.exec(stringQuery);
634
635 while (query.isActive())
636 {query.finish();}
637 if (sqlOK)
638 {
639 return true;
640 }
641 else
642 {
643 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
644 return false;
645 }
646 */
647 }
648
createDataBase()649 bool DataBase::createDataBase()
650 {
651 //qDebug() << "DataBase::createDataBase ------------------------------------- START" << QString::number(constrid) << QT_ENDL;
652 //QSqlQuery query;
653 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists log");
654 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists band");
655 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists mode");
656 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists prefixesofentity");
657 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists continent");
658 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists entity");
659 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists softwarecontrol");
660
661 QString stringQuery = QString ("CREATE TABLE softwarecontrol ("
662 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
663 "dateupgrade VARCHAR(10) NOT NULL, "
664 "softversion REAL NOT NULL, "
665 "dbversion REAL NOT NULL)");
666
667 execQuery(Q_FUNC_INFO, stringQuery);
668
669 updateDBVersion(softVersion, QString::number(DBVersionf));
670
671 createTableBand(true);
672 populateTableBand(true);
673
674 createTableMode(true);
675 populateTableMode(true);
676
677 createTableSatellites(true);
678 populateTableSatellites(true);
679
680 createTableLog(true);
681
682 createTableEntity(true);
683 createTableSubdivision(true);
684
685 //http://www.sqlite.org/lang_datefunc.html
686 /*
687 "confirmed INTEGER NOT NULL, "
688 confirmed means:
689 confirmed = 0 Set as Worked
690 confirmed = 1 Set as Confirmed
691 */
692
693 stringQuery = QString("CREATE TABLE continent ("
694 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
695 "shortname VARCHAR(2) NOT NULL, "
696 "name VARCHAR(15) NOT NULL)");
697 execQuery(Q_FUNC_INFO, stringQuery);
698 stringQuery = QString("CREATE TABLE ant_path_enumeration ("
699 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
700 "shortname VARCHAR(1) NOT NULL, "
701 "name VARCHAR(15) NOT NULL)");
702 execQuery(Q_FUNC_INFO, stringQuery);
703 stringQuery = QString("CREATE TABLE arrl_sect_enumeration ("
704 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
705 "shortname VARCHAR(2) NOT NULL, "
706 "name VARCHAR(30) NOT NULL)");
707
708 execQuery(Q_FUNC_INFO, stringQuery);
709 stringQuery = QString("CREATE TABLE qso_complete_enumeration ("
710 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
711 "shortname VARCHAR(3) NOT NULL, "
712 "name VARCHAR(10) NOT NULL)");
713 execQuery(Q_FUNC_INFO, stringQuery);
714
715 createTableContest();
716
717 stringQuery = QString("CREATE TABLE contestcategory ("
718 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
719 "shortname VARCHAR(20) NOT NULL, "
720 "name VARCHAR(40) NOT NULL)");
721 execQuery(Q_FUNC_INFO, stringQuery);
722
723 stringQuery = QString("CREATE TABLE award_enumeration ("
724 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
725 "name VARCHAR(15) NOT NULL)");
726
727 execQuery(Q_FUNC_INFO, stringQuery);
728 stringQuery = QString("CREATE TABLE prefixesofentity ("
729 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
730 "prefix VARCHAR(15) NOT NULL,"
731 "dxcc INTEGER NOT NULL,"
732 "cqz INTEGER NOT NULL,"
733 "ituz INTEGER NOT NULL,"
734 "UNIQUE (prefix, dxcc), "
735 "FOREIGN KEY (dxcc) REFERENCES entity)");
736 execQuery(Q_FUNC_INFO, stringQuery);
737
738 createTableAwardDXCC();
739 createTableAwardWAZ();
740
741 stringQuery = QString("CREATE TABLE qsl_rec_status ("
742 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
743 "shortname VARCHAR(1) NOT NULL, "
744 "name VARCHAR(15) NOT NULL)");
745 execQuery(Q_FUNC_INFO, stringQuery);
746
747 stringQuery = QString("CREATE TABLE qsl_sent_status ("
748 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
749 "shortname VARCHAR(1) NOT NULL, "
750 "name VARCHAR(15) NOT NULL)");
751 execQuery(Q_FUNC_INFO, stringQuery);
752
753 createTableQSL_Via_enumeration();
754 populateTableQSL_Via_enumeration();
755
756
757 createTablePropModes();
758 createTableLogs(true);
759 createTableClubLogStatus();
760 populateTableClubLogStatus();
761
762 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_sent_status (shortname, name) VALUES ('Y', 'Yes')");
763 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_sent_status (shortname, name) VALUES ('N', 'No')");
764 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_sent_status (shortname, name) VALUES ('R', 'Requested')");
765 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_sent_status (shortname, name) VALUES ('Q', 'Queued')");
766 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_sent_status (shortname, name) VALUES ('I', 'Ignore/Invalid')");
767
768
769 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_rec_status (shortname, name) VALUES ('Y', 'Yes')");
770 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_rec_status (shortname, name) VALUES ('N', 'No')");
771 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_rec_status (shortname, name) VALUES ('R', 'Requested')");
772 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_rec_status (shortname, name) VALUES ('I', 'Ignore/Invalid')");
773 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_rec_status (shortname, name) VALUES ('V', 'Validated')");
774
775
776 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('AF', 'Africa')");
777 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('AS', 'Asia')");
778 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('EU', 'Europe')");
779 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('NA', 'North America')");
780 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('OC', 'Oceania')");
781 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('SA', 'South America')");
782 execQuery(Q_FUNC_INFO, "INSERT INTO continent (shortname, name) VALUES ('AN', 'Antartica')");
783
784 populateContestData();
785 populatePropagationModes();
786
787 execQuery(Q_FUNC_INFO, "INSERT INTO ant_path_enumeration (shortname, name) VALUES ('G', 'GrayLine')");
788 execQuery(Q_FUNC_INFO, "INSERT INTO ant_path_enumeration (shortname, name) VALUES ('O', 'Other')");
789 execQuery(Q_FUNC_INFO, "INSERT INTO ant_path_enumeration (shortname, name) VALUES ('S', 'ShortPath')");
790 execQuery(Q_FUNC_INFO, "INSERT INTO ant_path_enumeration (shortname, name) VALUES ('L', 'LongPath')");
791
792 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('AL', 'Alabama')");
793 /*
794 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('AK', 'Alaska')");
795 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('AB', 'Alberta')");
796 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('AR', 'Arkansas')");
797 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('AZ', 'Arizona')");
798 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('BC', 'British Columbia')");
799 execQuery(Q_FUNC_INFO, "INSERT INTO arrl_sect_enumeration (shortname, name) VALUES ('CO', 'Colorado')");
800 */
801
802 //TODO: Awards are deprecated
803 execQuery(Q_FUNC_INFO, "INSERT INTO award_enumeration (name) VALUES ('AJA')");
804 execQuery(Q_FUNC_INFO, "INSERT INTO award_enumeration (name) VALUES ('CQDX')");
805 execQuery(Q_FUNC_INFO, "INSERT INTO award_enumeration (name) VALUES ('CQDXFIELD')");
806 execQuery(Q_FUNC_INFO, "INSERT INTO award_enumeration (name) VALUES ('DXCC')");
807
808 execQuery(Q_FUNC_INFO, "INSERT INTO qso_complete_enumeration (shortname, name) VALUES ('Y', 'Yes')");
809 execQuery(Q_FUNC_INFO, "INSERT INTO qso_complete_enumeration (shortname, name) VALUES ('N', 'No')");
810 execQuery(Q_FUNC_INFO, "INSERT INTO qso_complete_enumeration (shortname, name) VALUES ('NIL', 'Not heard')");
811 execQuery(Q_FUNC_INFO, "INSERT INTO qso_complete_enumeration (shortname, name) VALUES ('?', 'Uncertain')");
812
813 //qDebug() << "DataBase::createDataBase ------------------------------------- END" << QT_ENDL;
814 return true;
815 }
816
recreateTableDXCC()817 bool DataBase::recreateTableDXCC()
818 {
819 //QSqlQuery query;
820 if (execQuery(Q_FUNC_INFO, "DROP TABLE awarddxcc"))
821 {
822 return createTableAwardDXCC();
823 }
824 return true;
825 }
826
createTableAwardDXCC()827 bool DataBase::createTableAwardDXCC()
828 {
829 return execQuery(Q_FUNC_INFO, "CREATE TABLE awarddxcc ("
830 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
831 "dxcc INTEGER NOT NULL,"
832 "band INTEGER NOT NULL, "
833 "mode INTEGER NOT NULL, "
834 "confirmed INTEGER, "
835 "qsoid INTEGER NOT NULL, "
836 "lognumber INTEGER, "
837 "UNIQUE (dxcc, band, mode, lognumber), "
838 "FOREIGN KEY (dxcc) REFERENCES entity, "
839 "FOREIGN KEY (band) REFERENCES band, "
840 "FOREIGN KEY (mode) REFERENCES mode, "
841 "FOREIGN KEY (qsoid) REFERENCES log)");
842
843 /*
844 In awarddxcc confirmed means:
845 confirmed = 0 Set as Worked
846 confirmed = 1 Set as Confirmed
847 */
848 }
849
recreateTableWAZ()850 bool DataBase::recreateTableWAZ()
851 {
852 //QSqlQuery query;
853
854 if (execQuery(Q_FUNC_INFO, "DROP TABLE awardwaz"))
855 {
856 return createTableAwardWAZ();
857 }
858 return true;
859 }
860
createTableAwardWAZ()861 bool DataBase::createTableAwardWAZ()
862 {
863 return execQuery(Q_FUNC_INFO, "CREATE TABLE awardwaz ("
864 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
865 "cqz INTEGER NOT NULL,"
866 "band INTEGER NOT NULL, "
867 "mode INTEGER NOT NULL, "
868 "confirmed INTEGER, "
869 "qsoid INTEGER NOT NULL, "
870 "lognumber INTEGER, "
871 "UNIQUE (cqz, band, mode, lognumber), "
872 "FOREIGN KEY (band) REFERENCES band, "
873 "FOREIGN KEY (mode) REFERENCES mode, "
874 "FOREIGN KEY (qsoid) REFERENCES log)");
875 /*
876 In awardwaz confirmed means:
877 confirmed = 0 Set as Worked
878 confirmed = 1 Set as Confirmed
879 */
880 }
881
882
883
createTableSubdivision(const bool NoTmp)884 bool DataBase::createTableSubdivision(const bool NoTmp)
885 {
886 //qDebug() << "DataBase::createTableSubdivisions" << QT_ENDL;
887 // NoTmp = false => TMP data table to operate and be deleted afterwards
888 //qDebug() << "DataBase::createTableSubdivisions" << QT_ENDL;
889
890 QString stringQuery = QString();
891 QString table = QString();
892 if (NoTmp)
893 {
894 table = "primary_subdivisions" ;
895 }
896 else
897 {
898 table = "primary_subdivisionstemp" ;
899 }
900
901 stringQuery = "CREATE TABLE "+ table;
902
903 stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
904 "dxcc INTEGER NOT NULL, "
905 "name VARCHAR NOT NULL, "
906 "shortname VARCHAR NOT NULL, "
907 "prefix VARCHAR, "
908 "cqz INTEGER NOT NULL, "
909 "ituz INTEGER NOT NULL, "
910 "regionalgroup VARCHAR, "
911 "regionalid INTEGER, "
912 "start_date DATETIME, "
913 "end_date DATETIME, "
914 "deleted VARCHAR, "
915 "UNIQUE (id, shortname, name), "
916 "FOREIGN KEY (cqz) REFERENCES entity, "
917 "FOREIGN KEY (ituz) REFERENCES entity, "
918 "FOREIGN KEY (dxcc) REFERENCES entity)");
919
920 QString delS = QString();
921 delS = "DROP TABLE IF exists " + table;
922 execQuery(Q_FUNC_INFO, delS);
923 //qDebug() << "DataBase::createTableSubdivision - END" << QT_ENDL;
924 return execQuery(Q_FUNC_INFO, stringQuery);
925
926 //qDebug() << "DataBase::createTableSubdivision - END" << QT_ENDL;
927 }
928
929
getBandIdFromName(const QString & b)930 int DataBase::getBandIdFromName(const QString &b)
931 {
932 //qDebug() << "DataBase::getBandIdFromName: " << b << QT_ENDL;
933 QString band = b.toUpper();
934 QSqlQuery query;
935 if (isValidBand(band))
936 {
937 QString queryString = QString("SELECT id FROM band WHERE name='%1'").arg(band);
938
939 bool sqlOK = query.exec(queryString);
940
941 if (sqlOK)
942 {
943 query.next();
944 if ( query.isValid() )
945 {
946 //qDebug() << "DataBase::getBandIdFromName: OK" << QString::number((query.value(0)).toInt()) << QT_ENDL;
947 int v = (query.value(0)).toInt();
948 query.finish();
949 return v;
950 }
951 else
952 {
953 //qDebug() << "DataBase::getBandIdFromName: NOK 1" << QT_ENDL;
954 query.finish();
955 return -1;
956 }
957 }
958 else
959 {
960 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
961 query.finish();
962 return -2;
963 }
964 //qDebug() << "DataBase::getBandIdFromName: NOK 3" << QT_ENDL;
965 }
966 else
967 {
968 //qDebug() << "DataBase::getBandIdFromName: BAND NOT VALID: " << band << QT_ENDL;
969 }
970 //qDebug() << "DataBase::getBandIdFromName: Will return -3 from: " << band << QT_ENDL;
971 query.finish();
972 return -3;
973 }
974
getModeIdFromName(const QString & b)975 int DataBase::getModeIdFromName(const QString &b)
976 {
977 //qDebug() << "DataBase::getModeIdFromName: " << b << QT_ENDL;
978 QSqlQuery query;
979 if (isValidMode(b, false))
980 {
981 QString queryString = QString("SELECT id FROM mode WHERE name='%1'").arg(b);
982 //qDebug() << "DataBase::getModeIdFromName: queryString: " << queryString << QT_ENDL;
983 bool sqlOK = query.exec(queryString);
984
985 if (sqlOK)
986 {
987 query.next();
988 if ( query.isValid() )
989 {
990 //qDebug() << "DataBase::getModeIdFromName: OK" << QString::number((query.value(0)).toInt()) << QT_ENDL;
991 return (query.value(0)).toInt();
992 }
993 else
994 {
995 //qDebug() << "DataBase::getModeIdFromName: NOK 1" << QT_ENDL;
996 query.finish();
997 return -1;
998 }
999 }
1000 else
1001 {
1002 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1003 query.finish();
1004 }
1005 }
1006 //qDebug() << "DataBase::getModeIdFromName: NOK 3" << QT_ENDL;
1007 query.finish();
1008 return -1;
1009 }
1010
1011
getModeIdFromSubMode(const QString & b)1012 int DataBase::getModeIdFromSubMode(const QString &b)
1013 {
1014 //qDebug() << "DataBase::getModeIdFromSubMode: " << b << QT_ENDL;
1015 QSqlQuery query;
1016 QString queryString = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
1017 /*
1018 if (_tmp)
1019 {
1020 queryString = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(b);
1021 }
1022 else
1023 {
1024 queryString = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
1025 }
1026 */
1027 bool sqlOK = query.exec(queryString);
1028
1029 if (sqlOK)
1030 {
1031 query.next();
1032 if (query.isValid())
1033 {
1034 //qDebug() << "DataBase::getModeIdFromName: OK - Mode: " << b << " - " << (query.value(0)).toString() << QT_ENDL;
1035 return (query.value(0)).toInt();
1036 }
1037 else
1038 {
1039 //qDebug() << "DataBase::getModeIdFromName: NOK 1" << "-------- END"<< QT_ENDL;
1040 query.finish();
1041 return -1;
1042 }
1043 }
1044 else
1045 {
1046 //qDebug() << "DataBase::getModeIdFromName: NOK 2" << "-------- END"<< QT_ENDL;
1047 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1048 query.finish();
1049 return -1;
1050 }
1051 //qDebug() << "DataBase::getModeIdFromName: NOK 3" << "-------- END"<< QT_ENDL;
1052 //query.finish();
1053 //return -1;
1054 }
1055
getBandNameFromNumber(const int _n)1056 QString DataBase::getBandNameFromNumber(const int _n)
1057 {
1058 //qDebug() << "DataBase::getBandNameFromNumber: " << QString::number(_n) << QT_ENDL;
1059 QSqlQuery query;
1060 QString queryString = QString("SELECT name FROM band WHERE id='%1'").arg(_n);
1061
1062 bool sqlOK = query.exec(queryString);
1063
1064 if (sqlOK)
1065 {
1066 query.next();
1067 if ( query.isValid() )
1068 {
1069 if ( isValidBand((query.value(0)).toString()) )
1070 {
1071 //qDebug() << "DataBase::getBandNameFromNumber: " << (query.value(0)).toString() << "-------- END" << QT_ENDL;
1072 return (query.value(0)).toString();
1073 }
1074 else
1075 {
1076 //qDebug() << "DataBase::getBandNameFromNumber: " << "-------- END-1" << QT_ENDL;
1077 query.finish();
1078 return QString();
1079 }
1080 }
1081 else
1082 {
1083 //qDebug() << "DataBase::getBandNameFromNumber: " << "-------- END-2" << QT_ENDL;
1084 query.finish();
1085 return QString();
1086 }
1087 }
1088 else
1089 {
1090 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1091 }
1092 query.finish();
1093 return QString();
1094 }
1095
1096
1097
getModeNameFromNumber(const int _n,bool _tmp)1098 QString DataBase::getModeNameFromNumber(const int _n, bool _tmp)
1099 {
1100 //TODO May fail to identify the sumbode(mode/modetemp... (Review STEP-2 o 3)
1101 //qDebug() << "DataBase::getModeNameFromNumber: " << QString::number(_n) << QT_ENDL;
1102 QSqlQuery query;
1103 QString queryString;
1104 if (_tmp)
1105 {
1106 queryString = QString("SELECT name FROM modetemp WHERE id='%1'").arg(_n);
1107 }
1108 else
1109 {
1110 queryString = QString("SELECT name FROM mode WHERE id='%1'").arg(_n);
1111 }
1112
1113 bool sqlOK = query.exec(queryString);
1114
1115
1116 if (!sqlOK)
1117 {
1118 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1119 query.finish();
1120 }
1121 query.next();
1122 //qDebug() << "DataBase::getModeNameFromNumber: " << QString::number(_n) <<" - " << isValidMode((query.value(0)).toString(), _tmp) << QT_ENDL;
1123 if ( query.isValid() )
1124 {
1125 //qDebug() << "DataBase::getModeNameFromNumber: ------ END-1" << QT_ENDL;
1126 return (query.value(0)).toString();
1127 /* In a version when I change the mode table to include submode, this comparison may need to be checked in both versions
1128 * at once, failing the query as old version was not having the column submode
1129 *
1130 if ( isValidMode((query.value(0)).toString(), _tmp))
1131 {
1132 //qDebug() << "DataBase::getModeNameFromNumber - Found: " << (query.value(0)).toString() << QT_ENDL;
1133 return (query.value(0)).toString();
1134 }
1135 else
1136 {
1137 //qDebug() << "DataBase::getModeNameFromNumber - Not Valid Mode: " << (query.value(0)).toString() << QT_ENDL;
1138 return QString();
1139 }
1140 */
1141 }
1142 else
1143 {
1144 //qDebug() << "DataBase::getModeNameFromNumber - Not Valid record" << QT_ENDL;
1145 //qDebug() << "DataBase::getModeNameFromNumber: ------ END-2" << QT_ENDL;
1146 query.finish();
1147 return QString();
1148 }
1149 }
1150
getSubModeNameFromNumber(const int _n,bool _tmp)1151 QString DataBase::getSubModeNameFromNumber(const int _n, bool _tmp)
1152 {
1153 //qDebug() << "DataBase::getSubModeNameFromNumber: " << QString::number(_n) << QT_ENDL;
1154 QSqlQuery query;
1155 QString queryString;
1156 if (_tmp)
1157 {
1158 queryString = QString("SELECT submode FROM modetemp WHERE id='%1'").arg(_n);
1159 }
1160 else
1161 {
1162 queryString = QString("SELECT submode FROM mode WHERE id='%1'").arg(_n);
1163 }
1164
1165 bool sqlOk = query.exec(queryString);
1166
1167 //qDebug() << "DataBase::getSubModeNameFromNumber - query: " << query.lastQuery() << QT_ENDL;
1168
1169 if (sqlOk)
1170 {
1171 if (query.next())
1172 {
1173 if ( query.isValid() )
1174 {
1175 if ( isValidMode((query.value(0)).toString(), _tmp) )
1176 {
1177 //qDebug() << "DataBase::getSubModeNameFromNumber: RETURN: " << (query.value(0)).toString() << QT_ENDL;
1178 return (query.value(0)).toString();
1179 }
1180 else
1181 {
1182 //qDebug() << "DataBase::getSubModeNameFromNumber: NO valid mode - END" << QT_ENDL;
1183 query.finish();
1184 return QString();
1185 }
1186 }
1187 else
1188 {
1189 //qDebug() << "DataBase::getSubModeNameFromNumber: query not valid - END" << QT_ENDL;
1190 query.finish();
1191 return QString();
1192 }
1193 }
1194 else
1195 {
1196 //qDebug() << "DataBase::getSubModeNameFromNumber: query not next - END" << QT_ENDL;
1197 query.finish();
1198 return QString();
1199 }
1200 }
1201 else
1202 {
1203 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1204 //qDebug() << "DataBase::getSubModeNameFromNumber: SQL FALSE - END" << QT_ENDL;
1205 query.finish();
1206 return QString();
1207 }
1208 //qDebug() << "DataBase::getSubModeNameFromNumber: - END-X" << QT_ENDL;
1209 //query.finish();
1210 //return QString();
1211 }
1212
isValidBand(const QString & b)1213 bool DataBase::isValidBand (const QString &b)
1214 {
1215 //qDebug() << "DataBase::isValidBand: " << b << QT_ENDL;
1216 if (b.length()<1)
1217 {
1218 //// emit debugLog(Q_FUNC_INFO, "1", 7);
1219 return false;
1220 }
1221 QString _band = b.toUpper();
1222
1223 QSqlQuery query;
1224 QString stringQuery = QString("SELECT id FROM band WHERE name='%1'").arg(_band);
1225 bool sqlOK = query.exec(stringQuery);
1226 if (sqlOK)
1227 {
1228 query.next();
1229 if (query.isValid())
1230 {
1231 query.finish();
1232 return true;
1233 }
1234 else
1235 {
1236 query.finish();
1237 //// emit debugLog(Q_FUNC_INFO, "2", 7);
1238 return false;
1239 }
1240 }
1241 else
1242 {
1243 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1244 query.finish();
1245 }
1246 //emit debugLog(Q_FUNC_INFO, "3", 7);
1247 return false;
1248 }
1249
isValidMode(const QString & b,const bool _tmp)1250 bool DataBase::isValidMode (const QString &b, const bool _tmp)
1251 {
1252 //qDebug() << "DataBase::isValidMode: " << b << QT_ENDL;
1253 QString stringQuery;
1254 if (b.length()<2)
1255 {
1256 //qDebug() << "DataBase::isValidMode: (length<2) FALSE" << QT_ENDL;
1257 //emit debugLog(Q_FUNC_INFO, "1", 7);
1258 return false;
1259 }
1260
1261 if (_tmp)
1262 {
1263 stringQuery = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(b);
1264 }
1265 else
1266 {
1267 stringQuery = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
1268 }
1269
1270 //stringQuery = QString("SELECT id FROM mode WHERE submode='%1'").arg(b);
1271 QSqlQuery query;
1272 bool sqlOK = query.exec(stringQuery);
1273
1274 if (!sqlOK)
1275 {
1276 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1277 query.finish();
1278 }
1279 query.next();
1280 return query.isValid();
1281 }
1282
isValidBandNumber(const int b)1283 bool DataBase::isValidBandNumber (const int b)
1284 {
1285 //qDebug() << "DataBase::isValidBandNumber: " << QString::number(b)<< QT_ENDL;
1286 return isValidBand(getBandNameFromNumber(b));
1287 }
1288
isValidModeNumber(const int b)1289 bool DataBase::isValidModeNumber (const int b)
1290 {
1291 //qDebug() << "DataBase::isValidModeNumber: " << QString::number(b)<< QT_ENDL;
1292 return isValidMode(getModeNameFromNumber(b, false), false);
1293 }
1294
getBandIdFromFreq(const QString & fr)1295 int DataBase::getBandIdFromFreq(const QString &fr)
1296 {
1297 //qDebug() << "DataBase::getBandIdFromFreq: " << fr << QT_ENDL;
1298 //Freq should be in MHz
1299
1300 QString queryString = QString("SELECT id FROM band WHERE lower <= '%1' and upper >= '%2'").arg(fr, fr);
1301 QSqlQuery query;
1302
1303 bool sqlOK = query.exec(queryString);
1304
1305 //qDebug() << "DataBase::getBandIdFromFreq: Query: " << query.lastQuery() << QT_ENDL;
1306 if (sqlOK)
1307 {
1308 //qDebug() << "DataBase::getBandIdFromFreq: Query OK" << QT_ENDL;
1309 query.next();
1310
1311
1312 if (query.isValid())
1313 {
1314 //qDebug() << "DataBase::getBandIdFromFreq: Query OK - END" << QT_ENDL;
1315 return (query.value(0)).toInt();
1316 }
1317 else
1318 {
1319 //qDebug() << "DataBase::getBandIdFromFreq: Valid NOK - END" << QT_ENDL;
1320 query.finish();
1321 return -1;
1322 }
1323 }
1324 else
1325 {
1326 //qDebug() << "DataBase::getBandIdFromFreq: Query NOK" << QT_ENDL;
1327 //qDebug() << "DataBase::getBandIdFromFreq: Query NOK: " << query.lastError().text() << QT_ENDL;
1328 //qDebug() << "DataBase::getBandIdFromFreq: Query NOK: " << query.lastError().nativeErrorCode() << QT_ENDL;
1329 if (query.lastError().isValid())
1330 {
1331 //qDebug() << "DataBase::getBandIdFromFreq: Query NOK - Error VALID" << QT_ENDL;
1332 }
1333 else
1334 {
1335 //qDebug() << "DataBase::getBandIdFromFreq: Query NOK - Error NOT-VALID" << QT_ENDL;
1336 }
1337 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1338 queryErrorManagement(Q_FUNC_INFO, query.lastError().text(), query.lastError().nativeErrorCode(), query.lastQuery());
1339 query.finish();
1340 return -2;
1341 }
1342 //qDebug() << "DataBase::getBandIdFromFreq: END-X" << QT_ENDL;
1343 //query.finish();
1344 //return -3;
1345 }
1346
1347
isThisFreqInBand(const QString & b,const QString & fr)1348 bool DataBase::isThisFreqInBand(const QString &b, const QString &fr)
1349 {//Freq should be in MHz
1350 //qDebug() << "DataBase::isThisFreqInBand: " << b << "/" << fr << QT_ENDL;
1351 if (b.length()<2)
1352 {
1353 //qDebug() << "DataBase::isThisFreqInBand returning false" << QT_ENDL;
1354 return false;
1355 }
1356 int bandNf = getBandIdFromFreq(fr);
1357 int bandN = getBandIDFromName2(b);
1358 //qDebug() << "DataBase::isThisFreqInBand: (b/f)" << QString::number(bandN) << "/" << QString::number(bandNf) << QT_ENDL;
1359 if (bandNf == bandN)
1360 {
1361 //qDebug() << "DataBase::isThisFreqInBand: OK " << b << "/" << fr << QT_ENDL;
1362 return true;
1363 }
1364 else
1365 {
1366 //qDebug() << "DataBase::isThisFreqInBand: NOK " << b << "/" << fr << QT_ENDL;
1367 //// emit debugLog(Q_FUNC_INFO, "1", 7);
1368 return false;
1369 }
1370 //qDebug() << "DataBase::isThisFreqInBand: END" << QT_ENDL;
1371 //return false;
1372 }
1373
1374
unMarkAllQSO()1375 bool DataBase::unMarkAllQSO()
1376 {
1377 //qDebug() << "DataBase::unMarkAllQSO" << QT_ENDL;
1378 QString stringQuery = QString("UPDATE log SET marked = 'N' WHERE 1");
1379 return execQuery(Q_FUNC_INFO, stringQuery);
1380 }
1381
1382
updateIfNeeded()1383 bool DataBase::updateIfNeeded()
1384 {
1385 //qDebug() << "DataBase::updateIfNeeded - Version: " << QString::number(dbVersion) << QT_ENDL;
1386
1387
1388 /**************************************************************************************
1389 * This function should call to bool updateToXXX () being XXX dbVersion and
1390 *
1391 */
1392
1393 //float aux = 0.0;
1394
1395 //int nameCol = -1;
1396 //int errorCode = -1;
1397 //bool toBeUpdated = false;
1398 //bool sqlOK;
1399
1400 QSqlQuery query;
1401 QString stringQuery = QString("SELECT MAX (dbversion) FROM softwarecontrol");
1402 bool sqlOK = query.exec(stringQuery);
1403
1404 if (sqlOK)
1405 {
1406 query.next();
1407 latestReaded = (query.value(0)).toFloat();
1408 }
1409 else
1410 {
1411 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1412 query.finish();
1413 //// emit debugLog(Q_FUNC_INFO, "1", 7);
1414 return false;
1415 }
1416
1417 //QSqlQuery query("SELECT dbversion FROM softwarecontrol");
1418 //QSqlRecord rec = query.record();
1419 //query.next();
1420 //latestReaded = (query.value(0)).toFloat();
1421 query.finish();
1422 //qDebug() << "DataBase::updateIfNeeded - LatestReaded: " << QString::number(latestReaded) << QT_ENDL;
1423
1424 if (latestReaded >= dbVersion)
1425 { // DB is updated, no update is needed
1426 //qDebug() << "DataBase::updateIfNeeded - DB updated (no need to update anything!) " << QT_ENDL;
1427
1428 //toBeUpdated = false;
1429 //qDebug() << "DataBase::updateIfNeeded - TRUE - END " << QT_ENDL;
1430 return true;
1431 }
1432 else
1433 { // DB is outdated. We need to update!!
1434 //qDebug() << "DataBase::updateIfNeeded - DB outdated... upgrade starts now! " << QT_ENDL;
1435 QMessageBox msgBox;
1436 msgBox.setWindowTitle("KLog");
1437 msgBox.setText( QObject::tr("KLog DB needs to be upgraded."));
1438 msgBox.setInformativeText( QObject::tr("Do you want to upgrade it now?") + "\n"+ QObject::tr("If DB is not upgraded KLog may not work properly."));
1439 msgBox.setStandardButtons(QMessageBox::Apply | QMessageBox::Discard);
1440 msgBox.setDefaultButton(QMessageBox::Apply);
1441 msgBox.setIcon(QMessageBox::Warning);
1442 msgBox.raise();
1443 //this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
1444 msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
1445
1446 int ret = msgBox.exec();
1447
1448 switch (ret)
1449 {
1450 case QMessageBox::Apply:
1451 // Save was clicked
1452 backupB4Update();
1453 break;
1454 case QMessageBox::Discard:
1455 // Discard was clicked
1456 break;
1457 default:
1458 // should never be reached
1459 //qDebug() << "DataBase::updateIfNeeded - FALSE - CHECK IF SEEN, shoud not be here! - END " << QT_ENDL;
1460 //// emit debugLog(Q_FUNC_INFO, "2", 7);
1461 return false;
1462 //break;
1463 }
1464 }
1465 // If the DB needs to be updated... we update it! :-)
1466 //qDebug() << "DataBase::updateIfNeeded - END!" << QT_ENDL;
1467 return true;
1468 }
1469
backupB4Update()1470 void DataBase::backupB4Update()
1471 {
1472 //qDebug() << "DataBase::backupB4Update - Start" << QT_ENDL;
1473 QMessageBox msgBox;
1474 msgBox.setWindowTitle("KLog backup");
1475 msgBox.setText( QObject::tr("Upgrading software may potentially cause problems. Backing up your DB, before upgrading, is always a good idea."));
1476 msgBox.setInformativeText( QObject::tr("Do you want to backup your DB now?") );
1477 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
1478 msgBox.setDefaultButton(QMessageBox::Yes);
1479 msgBox.setIcon(QMessageBox::Warning);
1480 msgBox.raise();
1481 //this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
1482 msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
1483
1484 int ret = msgBox.exec();
1485
1486 switch (ret)
1487 {
1488 case QMessageBox::Yes:
1489 // Save was clicked
1490 logBackup();
1491 break;
1492 case QMessageBox::No:
1493 // NO backup was selected
1494 updateToLatest();
1495 break;
1496 }
1497 //qDebug() << "DataBase::backupB4Update - END" << QT_ENDL;
1498 }
1499
logBackup()1500 void DataBase::logBackup()
1501 {
1502 //qDebug() << "DataBase::logBackup - Start" << QT_ENDL;
1503
1504 QFile DBFile(util->getKLogDBFile());
1505 QString newFile = util->getKLogDBBackupFile();
1506 bool copied = DBFile.copy(newFile);
1507 //qDebug() << "DataBase::logBackup copy: " << newFile << QT_ENDL;
1508 QMessageBox msgBox;
1509 msgBox.setWindowTitle("KLog DB backup");
1510 msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
1511 msgBox.setStandardButtons(QMessageBox::Ok);
1512 msgBox.setDefaultButton(QMessageBox::Ok);
1513
1514 if (copied)
1515 {
1516 //qDebug() << "DataBase::logBackup - DB backup was OK" << QT_ENDL;
1517 msgBox.setText( QObject::tr("The backup finished successfully."));
1518 msgBox.setInformativeText( QObject::tr("You can find the backup in this file: %1").arg(newFile) );
1519 msgBox.setIcon(QMessageBox::Information);
1520 msgBox.raise();
1521 msgBox.exec();
1522 updateToLatest();
1523 }
1524 else
1525 {
1526 //qDebug() << "DataBase::logBackup - DB backup was NOK" << QT_ENDL;
1527 msgBox.setText( QObject::tr("The backup was not properly done."));
1528 msgBox.setInformativeText( QObject::tr("You will be sent back to the starting point."));
1529 msgBox.setIcon(QMessageBox::Warning);
1530 msgBox.raise();
1531 msgBox.exec();
1532 updateIfNeeded();
1533 }
1534 /*
1535 QMessageBox msgBox;
1536 msgBox.setWindowTitle("KLog DB backup");
1537 msgBox.setText( QObject::tr("KLog is backing up the DB to a file..."));
1538 msgBox.setInformativeText( QObject::tr("Did the DB backup worked well?") );
1539 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
1540 msgBox.setDefaultButton(QMessageBox::Yes);
1541 msgBox.setIcon(QMessageBox::Information);
1542 msgBox.raise();
1543 //this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
1544 msgBox.setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Popup);
1545
1546 int ret = msgBox.exec();
1547 switch (ret)
1548 {
1549 case QMessageBox::Yes:
1550 // Save was clicked
1551 updateToLatest();
1552
1553 break;
1554 case QMessageBox::No:
1555 // NO backup was DONE
1556 msgBox.setWindowTitle("KLog DB backup not done.");
1557 msgBox.setText( QObject::tr("KLog DB backup was not done."));
1558 msgBox.setInformativeText( QObject::tr("You will be redirected to the first message.") );
1559 msgBox.setStandardButtons(QMessageBox::Ok);
1560 msgBox.setDefaultButton(QMessageBox::Ok);
1561 msgBox.setIcon(QMessageBox::Warning);
1562 msgBox.raise();
1563 msgBox.exec();
1564 updateIfNeeded();
1565
1566 break;
1567 default:
1568 // should never be reached
1569 //qDebug() << "DataBase::backupB4Update - FALSE - CHECK IF SEEN, shoud not be here! - END " << QT_ENDL;
1570 //lse;
1571 //break;
1572 }
1573 */
1574 //qDebug() << "DataBase::logBackup - END" << QT_ENDL;
1575 }
1576
createTheBandQuickReference()1577 bool DataBase::createTheBandQuickReference()
1578 {
1579 /*
1580 KEY Value
1581 QHash<QString, int> bandIDHash;
1582 QHash<QString, int> modeIDHash;
1583 QHash<int, QString> IDBandHash;
1584 QHash<int, QString> IDModeHash
1585 QHash<int, QString> freqBandIdHash;
1586
1587 */
1588 //qDebug() << "DataBase::createTheBandQuickReference: " << QT_ENDL;
1589 QString st = "NULL";
1590 int in = 0;
1591
1592 QString stringQuery = QString("SELECT id, name, lower FROM band");
1593 QString fr = QString();
1594 bandIDHash.clear();
1595 IDBandHash.clear();
1596 QSqlQuery query;
1597 bool sqlOK = query.exec(stringQuery);
1598
1599 if (!sqlOK)
1600 {
1601 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1602 query.finish();
1603 //// emit debugLog(Q_FUNC_INFO, "1", 7);
1604 return false;
1605 }
1606
1607 while (query.next())
1608 {
1609 if (query.isValid())
1610 {
1611 st = (query.value(1)).toString();
1612 in = (query.value(0)).toInt();
1613 fr = (query.value(2)).toString();
1614 bandIDHash.insert(st, in );
1615 IDBandHash.insert(in, st);
1616 freqBandIdHash.insert(in, fr);
1617 //qDebug() << "DataBase::createTheBandQuickReference: " << st <<"/" << QString::number(in)<< QT_ENDL;
1618 }
1619 else
1620 {
1621 //qDebug() << "DataBase::createTheBandQuickReference: Query not valid -'RETURN FALSE - END" << QT_ENDL;
1622 // QMessageBox::warning(0, QObject::tr("Database Error (DataBase::createTheBandQuickReference)"),
1623 // query.lastError().text());
1624 query.finish();
1625 //// emit debugLog(Q_FUNC_INFO, "2", 7);
1626 return false;
1627 //TODO: Manage this error, in case the query is NOK.
1628 }
1629 //qDebug() << "DataBase::createTheBandQuickReference: Go for the next one!" << QT_ENDL;
1630 }
1631 query.finish();
1632 //qDebug() << "DataBase::createTheBandQuickReference: END" << QT_ENDL;
1633 return true;
1634 }
1635
1636
createTheModeQuickReference()1637 bool DataBase::createTheModeQuickReference()
1638 {
1639 /*
1640 KEY Value
1641 QHash<QString, int> modeIDHash;
1642 QHash<int, QString> IDModeHash
1643
1644 */
1645 //qDebug() << "DataBase::createTheModeQuickReference: " << QT_ENDL;
1646
1647 if (getDBVersion().toFloat()<0.01f)
1648 {
1649 // If the version is not updated we don't create the reference
1650 return true;
1651 }
1652 QString st = QString();
1653 QString sm = QString();
1654 int in = 0;
1655 modeIDHash.clear();
1656 IDModeHash.clear();
1657 subModeIDHash.clear();
1658 IDSubModeHash.clear();
1659 QString stringQuery = QString("SELECT id, name, submode FROM mode");
1660 QSqlQuery query;
1661
1662 bool sqlOK = query.exec(stringQuery);
1663
1664 if (!sqlOK)
1665 {
1666 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1667 query.finish();
1668 //// emit debugLog(Q_FUNC_INFO, "1", 7);
1669 return false;
1670 }
1671 while (query.next())
1672 {
1673 if (query.isValid())
1674 {
1675 in = (query.value(0)).toInt();
1676 st = (query.value(1)).toString();
1677 sm = (query.value(2)).toString();
1678
1679 modeIDHash.insert(st, in );
1680 IDModeHash.insert(in, st);
1681 subModeIDHash.insert(sm, in );
1682 IDSubModeHash.insert(in, sm);
1683 //qDebug() << "DataBase::createTheModeQuickReference: " << st <<"/" << QString::number(in)<< QT_ENDL;
1684 }
1685 else
1686 {
1687 //qDebug() << "DataBase::createTheModeQuickReference: Query not valid - END" << QT_ENDL;
1688
1689 //QMessageBox::warning(0, QObject::tr("Database Error (DataBase::createTheModeQuickReference)"),
1690 // query.lastError().text());
1691 query.finish();
1692 //// emit debugLog(Q_FUNC_INFO, "2", 7);
1693 return false;
1694 //TODO: Manage this error, in case the query is NOK.
1695 }
1696 }
1697 query.finish();
1698 //qDebug() << "DataBase::createTheModeQuickReference: END" << QT_ENDL;
1699 return true;
1700 }
1701
1702
getBandIDFromName2(const QString & b)1703 int DataBase::getBandIDFromName2(const QString &b)
1704 {//KEY, value
1705 //name, id
1706 /*
1707 KEY Value
1708 QHash<QString, int> bandIDHash;
1709 QHash<QString, int> modeIDHash;
1710 QHash<int, QString> IDBandHash;
1711 QHash<int, QString> IDModeHash
1712 */
1713 //qDebug() << "DataBase::getBandIDFromName2: " << b << QT_ENDL;
1714 //qDebug() << "DataBase::getBandIDFromName2: This line should be the last one... " << QT_ENDL;
1715 return getBandIdFromName(b);
1716 //qDebug() << "DataBase::getBandIDFromName2: CHECK IF THIS LINE IS SEEN" << QT_ENDL;
1717 /*
1718
1719 if (b.length()<1)
1720 {
1721 return -3;
1722 }
1723
1724 if (bandIDHash.contains(b))
1725 {
1726 //qDebug() << "DataBase::getBandIDFromName2: " << b << ":" << bandIDHash.value(b) << QT_ENDL;
1727 return bandIDHash.value(b);
1728 }
1729 else
1730 {
1731 //qDebug() << "DataBase::getBandIDFromName2: Contains - False" << QT_ENDL;
1732 return -1;
1733 }
1734 //qDebug() << "DataBase::getBandIDFromName2: Safety exit" << QT_ENDL;
1735 */
1736 }
1737
getModeIDFromName2(const QString & b)1738 int DataBase::getModeIDFromName2(const QString &b)
1739 {
1740 //qDebug() << "DataBase::getModeIDFromName2: " << b << QT_ENDL;
1741 return getModeIdFromSubMode(b);
1742 /*
1743 if (b.length()<2)
1744 {
1745 //qDebug() << "DataBase::getModeIDFromName2: END -3" << QT_ENDL;
1746 return -3;
1747 }
1748
1749 if (modeIDHash.contains(b))
1750 {
1751 //qDebug() << "DataBase::getModeIDFromName2: END - " << b << ":" << modeIDHash.value(b) << QT_ENDL;
1752 return modeIDHash.value(b);
1753 }
1754 else
1755 {
1756 //qDebug() << "DataBase::getModeIDFromName2: Contains - False - END" << QT_ENDL;
1757 return -1;
1758 }
1759 //qDebug() << "DataBase::getModeIDFromName2: Safety exit - END" << QT_ENDL;
1760 */
1761 }
1762
1763
getSubModeIDFromName2(const QString & b)1764 int DataBase::getSubModeIDFromName2(const QString &b)
1765 {
1766 //qDebug() << "DataBase::getSubModeIDFromName2: " << b << QT_ENDL;
1767
1768 return getModeIdFromSubMode(b);
1769 }
1770
getBandNameFromID2(const int _i)1771 QString DataBase::getBandNameFromID2(const int _i)
1772 {
1773 //qDebug() << "DataBase::getBandNameFromid2: " << QString::number(_i) << QT_ENDL;
1774 return getBandNameFromNumber(_i);
1775 /*
1776 if (IDBandHash.contains(_i))
1777 {
1778 //qDebug() << "DataBase::getBandNameFromid2: END OK" << QT_ENDL;
1779 return IDBandHash.value(_i);
1780 }
1781 else
1782 {
1783 //qDebug() << "DataBase::getBandNameFromid2: END-1" << QT_ENDL;
1784 return "-1";
1785 }
1786 */
1787 //qDebug() << "DataBase::getBandNameFromid2: END-2" << QT_ENDL;
1788 //return "-2";
1789 }
1790
getModeNameFromID2(const int _i)1791 QString DataBase::getModeNameFromID2(const int _i)
1792 {
1793 //qDebug() << "DataBase::getModeNameFromId2: " << QString::number(_i) << QT_ENDL;
1794 return getSubModeNameFromNumber(_i);
1795 /*
1796 if (IDModeHash.contains(_i))
1797 {
1798 //qDebug() << "DataBase::getModeNameFromId2: END OK - " << IDModeHash.value(_i) << QT_ENDL;
1799 return IDModeHash.value(_i);
1800 }
1801 else
1802 {
1803 //qDebug() << "DataBase::getModeNameFromId2: END-1" << QT_ENDL;
1804 return "-1";
1805 }
1806 */
1807 //qDebug() << "DataBase::getModeNameFromId2: END-2" << QT_ENDL;
1808 //return "-2";
1809 }
1810
getSubModeNameFromID2(const int _i)1811 QString DataBase::getSubModeNameFromID2(const int _i)
1812 {
1813 //qDebug() << "DataBase::getSubModeNameFromId2: " << QString::number(_i) << QT_ENDL;
1814 return getSubModeNameFromNumber(_i);
1815 /*
1816 if (IDSubModeHash.contains(_i))
1817 {
1818 //qDebug() << "DataBase::getSubModeNameFromId2: END OK - " << IDModeHash.value(_i) << QT_ENDL;
1819 return IDSubModeHash.value(_i);
1820 }
1821 else
1822 {
1823 //qDebug() << "DataBase::getSubModeNameFromId2: END-1" << QT_ENDL;
1824 return "-1";
1825 }
1826 //qDebug() << "DataBase::getSubModeNameFromId2: END-2" << QT_ENDL;
1827 */
1828 }
1829
createBandModeMaps()1830 bool DataBase::createBandModeMaps()
1831 {
1832 //qDebug() << "DataBase::createBandModeMaps" << QT_ENDL;
1833 bool b = false;
1834 bool m = false;
1835
1836 //return (b && m);
1837 if (isTheDBCreated())
1838 {
1839 b = createTheBandQuickReference();
1840 m = createTheModeQuickReference();
1841
1842 //qDebug() << "DataBase::createBandModeMaps - isTheDbCreated TRUE" << QT_ENDL;
1843 if (!b)
1844 {
1845 //emit debugLog(Q_FUNC_INFO, "1", 7);
1846 }
1847 if (!m)
1848 {
1849 //emit debugLog(Q_FUNC_INFO, "2", 7);
1850 }
1851 //qDebug() << "DataBase::createBandModeMaps END 1" << QT_ENDL;
1852 return (b && m);
1853 }
1854 else
1855 {
1856 //qDebug() << "DataBase::createBandModeMaps - isTheDbCreated FALSE" << QT_ENDL;
1857 //emit debugLog(Q_FUNC_INFO, "3", 7);
1858 return false;
1859 }
1860 //return false;
1861 //qDebug() << "DataBase::createBandModeMaps END" << QT_ENDL;
1862 }
1863
getFreqFromBandId(const int _i)1864 QString DataBase::getFreqFromBandId(const int _i)
1865 {
1866 //qDebug() << "DataBase::getFreqFromBandId" << QT_ENDL;
1867
1868 if (freqBandIdHash.contains(_i))
1869 {
1870 //qDebug() << "DataBase::getFreqFromBandId OK END" << QT_ENDL;
1871 return freqBandIdHash.value(_i);
1872 }
1873 else
1874 {
1875 //qDebug() << "DataBase::getFreqFromBandId END-1" << QT_ENDL;
1876 return "-1.0";
1877 }
1878 //qDebug() << "DataBase::getFreqFromBandId END-2" << QT_ENDL;
1879 //return "-2.0";
1880 }
1881
1882 /*
1883 int DataBase::getLogTypeNumber(const QString &_logType)
1884 {
1885 //qDebug() << "DataBase::getLogTypeNumber: " << _logType << QT_ENDL;
1886 QSqlQuery query;
1887 QString queryString = QString("SELECT id FROM supportedcontests WHERE name='%1'").arg(_logType);
1888
1889 bool sqlOK = query.exec(queryString);
1890
1891
1892 if(!sqlOK)
1893 {
1894 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1895 query.finish();
1896 }
1897 query.next();
1898 if ( query.isValid() )
1899 {
1900 return (query.value(0)).toInt();
1901 }
1902 else
1903 {
1904 query.finish();
1905 return -1;
1906 }
1907 //query.finish();
1908 //return -2;
1909 }
1910
1911 QString DataBase::getLogTypeName(const int _logType)
1912 {
1913 //qDebug() << "DataBase::getLogTypeName: " << QString::number(_logType) << QT_ENDL;
1914 QSqlQuery query;
1915 QString queryString = QString("SELECT name FROM supportedcontests WHERE id='%1'").arg(_logType);
1916 bool sqlOK = query.exec(queryString);
1917
1918 if(!sqlOK)
1919 {
1920 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
1921 query.finish();
1922 }
1923 query.next();
1924 if ( query.isValid() )
1925 {
1926 return (query.value(0)).toString();
1927 }
1928 else
1929 {
1930 query.finish();
1931 return QString();
1932 }
1933 //query.finish();
1934 //return QString();
1935 }
1936 */
updateToLatest()1937 bool DataBase::updateToLatest()
1938 {
1939 /*
1940 * With the DB updates, the function that is called from here should be also updated.
1941 * The updateXXX are recursive calls that calls the previous one.
1942 *
1943 */
1944 //qDebug() << "DataBase::updateToLatest " << QT_ENDL;
1945 if (requiresManualUpgrade())
1946 {
1947 //qDebug() << "DataBase::updateToLatest requires" << QT_ENDL;
1948 exit(1);
1949 //return false;
1950 }
1951 return updateTo022();
1952 }
1953
requiresManualUpgrade()1954 bool DataBase::requiresManualUpgrade()
1955 {
1956 // If DB version <= 0.006, DB can't be upgraded automatically.
1957 // Recomendation is to export to ADIF in an olf KLog version (before KLog 1.1);
1958 // Install new KLog version
1959 // import ADIF file
1960 float ver = getDBVersion().toFloat();
1961 //qDebug() << "DataBase::requiresManualUpgrade - ver: " << QString::number(ver) << QT_ENDL;
1962 if (ver >= 0.007f)
1963 {
1964 //qDebug() << "DataBase::requiresManualUpgrade false" << QT_ENDL;
1965 return false;
1966 }
1967 else
1968 {
1969 //qDebug() << "DataBase::requiresManualUpgrade true" << QT_ENDL;
1970 QMessageBox msgBox;
1971 msgBox.setIcon(QMessageBox::Critical);
1972 msgBox.setWindowTitle(QObject::tr("KLog - DB can't be updated automatically"));
1973 QString aux = QObject::tr("You are upgrading from a too old KLog version and this upgrade can't be upgraded automatically from that version.");
1974 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.");
1975
1976 msgBox.setText(aux);
1977 msgBox.setDetailedText(aux2);
1978 msgBox.setStandardButtons(QMessageBox::Ok);
1979 msgBox.setDefaultButton(QMessageBox::Ok);
1980 msgBox.exec();
1981 }
1982 return true;
1983 }
1984
updateTo003()1985 bool DataBase::updateTo003()
1986 {// Updates the DB to 0.0.3
1987 /*
1988 * This function should be used as a template to create the all the update functions implementing the needed changes
1989 * in the dB to update from one version to the following one.
1990 *
1991 * // dbVersion shows the DB version that is being deployed
1992 * // latestReaded shows the DB version that is currently deployed.
1993 *i.e.:
1994 * QString stringQuery = QString ("ALTER TABLE award_enumeration ADD COLUMN dxcc INTEGER;");
1995 *
1996 */
1997 //qDebug() << "DataBase::updateTo003: latestRead: " << QString::number(latestReaded) << QT_ENDL;
1998 bool IAmIn003 = false;
1999 bool IAmIn002 = false;
2000 bool ErrorUpdating = false;
2001
2002 latestReaded = getDBVersion().toFloat();
2003 if (latestReaded >= 0.003f)
2004 {
2005 //IAmIn003 = true;
2006 return true;
2007 }
2008 else
2009 {
2010 IAmIn003 = false;
2011 }
2012
2013 while (!IAmIn003 && !ErrorUpdating)
2014 {
2015 while (!IAmIn002 && !ErrorUpdating)
2016 {
2017 //IAmIn002 = updateTo002();
2018 IAmIn002 = true;
2019 }
2020 if (ErrorUpdating)
2021 {
2022 //// emit debugLog(Q_FUNC_INFO, "1", 7);
2023 return false;
2024 }
2025 //DO ALL THE TASKS TO BE IN 0.003 from 0.002 HERE and set ErrorUpdating if it is not possible.
2026 IAmIn003 = true;
2027 }
2028 return IAmIn003;
2029 }
2030
updateTo004()2031 bool DataBase::updateTo004()
2032 {// Updates the DB to 0.0.41
2033 //qDebug() << "DataBase::updateTo004: latestRead: " << getDBVersion() << QT_ENDL;
2034 //qDebug() << "DataBase::updateTo004: latestRead: " << QString::number(latestReaded) << QT_ENDL;
2035 bool IAmIn004 = false;
2036 bool IAmIn003 = false;
2037 bool ErrorUpdating = false;
2038 QString stringQuery = QString();
2039 QSqlQuery query;
2040
2041 bool sqlOk = false;
2042 latestReaded = getDBVersion().toFloat();
2043 if (latestReaded >= 0.004f)
2044 {
2045 //qDebug() << "DataBase::updateTo004: - I am in 004" << QT_ENDL;
2046 return true;
2047 }
2048 else
2049 {
2050 //qDebug() << "DataBase::updateTo004: - I am not in 004" << QT_ENDL;
2051 IAmIn004 = false;
2052 }
2053
2054 while (!IAmIn004 && !ErrorUpdating)
2055 {
2056 //qDebug() << "DataBase::updateTo004: - And I am not in 004 nor ErrorUpdating" << QT_ENDL;
2057 while (!IAmIn003 && !ErrorUpdating)
2058 {
2059 //qDebug() << "DataBase::updateTo004: - And I am not in 003" << QT_ENDL;
2060 //IAmIn002 = updateTo002();
2061 IAmIn003 = true;
2062 }
2063 if (ErrorUpdating)
2064 {
2065 //// emit debugLog(Q_FUNC_INFO, "1", 7);
2066 return false;
2067 }
2068 //qDebug() << "DataBase::updateTo004: - And I am in 003" << QT_ENDL;
2069 sqlOk = updateDBVersion(softVersion, "0.004");
2070 //qDebug() << "DataBase::updateTo004: - Update Version" << QT_ENDL;
2071 if (sqlOk)
2072 { // Version updated
2073 //qDebug() << "DataBase::updateTo004: - Update OK" << QT_ENDL;
2074 sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE award_enumeration");
2075 }
2076 else
2077 { // Version not updated
2078 //qDebug() << "DataBase::updateTo004: - Update NOK" << QT_ENDL;
2079 }
2080 //DO ALL THE TASKS TO BE IN 0.004 from 0.003 HERE and set ErrorUpdating if it is not possible.
2081 //qDebug() << "DataBase::updateTo004: - IAmIn004 = true" << QT_ENDL;
2082 IAmIn004 = true;
2083 }
2084
2085 if (IAmIn004)
2086 {
2087 //qDebug() << "DataBase::updateTo004: - Return... TRUE" << QT_ENDL;
2088 }
2089 else
2090 {
2091 //qDebug() << "DataBase::updateTo004: - Return... FALSE" << QT_ENDL;
2092 }
2093 //qDebug() << "DataBase::updateTo004: UPDATED OK!" << QT_ENDL;
2094 return IAmIn004;
2095 }
2096
2097
updateTo005()2098 bool DataBase::updateTo005()
2099 {// Updates the DB to 0.0.5
2100 //qDebug() << "DataBase::updateTo005: latestRead: " << getDBVersion() << QT_ENDL;
2101 bool IAmIn005 = false;
2102 bool IAmIn004 = false;
2103 bool ErrorUpdating = false;
2104 QString stringQuery = QString();
2105 QSqlQuery query;
2106 QMessageBox msgBox;
2107 msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
2108 msgBox.setIcon(QMessageBox::Information);
2109 //int errorCode;
2110
2111 bool sqlOk = false;
2112 latestReaded = getDBVersion().toFloat();
2113
2114 if (latestReaded >= 0.005f)
2115 {
2116 //qDebug() << "DataBase::updateTo005 - Already in 005" << QT_ENDL;
2117 return true;
2118 }
2119 else
2120 {
2121 //qDebug() << "DataBase::updateTo005 - 005 update false" << QT_ENDL;
2122 IAmIn005 = false;
2123 }
2124
2125
2126 while (!IAmIn005 && !ErrorUpdating)
2127 {
2128 //qDebug() << "DataBase::updateTo005 - I am not in 005" << QT_ENDL;
2129 while (!IAmIn004 && !ErrorUpdating)
2130 {
2131 //qDebug() << "DataBase::updateTo005 - I am not in 004" << QT_ENDL;
2132 IAmIn004 = updateTo004();
2133 }
2134 //qDebug() << "DataBase::updateTo005 - I am in 004" << QT_ENDL;
2135 if (ErrorUpdating)
2136 {
2137 //qDebug() << "DataBase::updateTo005 - 005 update false2" << QT_ENDL;
2138 //// emit debugLog(Q_FUNC_INFO, "1", 7);
2139 return false;
2140 }
2141 sqlOk = updateDBVersion(softVersion, "0.005");
2142
2143 if (sqlOk)
2144 { // Version updated
2145 if (recreateContestData())
2146 {
2147 //qDebug() << "DataBase::updateTo005 - recreateContestData OK" << QT_ENDL;
2148
2149 sqlOk = execQuery(Q_FUNC_INFO, "DROP table logs");
2150
2151 sqlOk = createTableLogs(true);
2152 if (!sqlOk)
2153 {
2154 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2155 //qDebug() << "DataBase::updateTo005 - logs table do not created" << QT_ENDL;
2156 }
2157
2158
2159 if (howManyQSOsInLog(0)>0)
2160 { // If the user has QSOs that were added with previous versions...
2161 // We need to create a new log and rename all QSOs to that QSO.
2162 //stringQuery = QString("UPDATE log SET lognumber='1' WHERE lognumber='0'");
2163
2164
2165 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."));
2166 msgBox.exec();
2167
2168 if (execQuery(Q_FUNC_INFO, "UPDATE log SET lognumber='1' WHERE lognumber='0'"))
2169 {}
2170 else
2171 {
2172 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2173 //showError(QObject::tr("QSOs not updated to main log"));
2174 //qDebug() << "DataBase::updateTo005 - QSOs not updated to main log" << QT_ENDL;
2175 }
2176
2177 QString dateString = (QDate::currentDate()).toString("yyyy-MM-dd");
2178 QString callToUse = QString();
2179 bool ok;
2180 //QString text;
2181
2182 //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);
2183 QString text = (QInputDialog::getText(nullptr, QObject::tr("KLog: Enter Station callsign"),
2184 QObject::tr("Enter the station callsign used in this log"), QLineEdit::Normal,
2185 QObject::tr("Station Callsign"), &ok)).toUpper();
2186 text = text.toUpper();
2187 if (ok && !text.isEmpty())
2188 {
2189 callToUse = text;
2190 }
2191 else
2192 {
2193 callToUse = "N0CALL";
2194 }
2195
2196 stringQuery = QString("INSERT INTO logs (logdate, stationcall, logtype, logtypen) values('%1','%2','DX', '1')").arg(dateString).arg(callToUse);
2197 sqlOk = execQuery(Q_FUNC_INFO, stringQuery);
2198
2199
2200 if (!sqlOk)
2201 {
2202 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2203 //showError(QObject::tr("New Log not created"));
2204 //qDebug() << "DataBase::updateTo005 - New Log not created" << QT_ENDL;
2205 //qDebug() << "DataBase::clearLog: Log deleted FAILED" << QT_ENDL;
2206 }
2207 }
2208 IAmIn005 = true;
2209 }
2210 else
2211 {
2212 //qDebug() << "DataBase::updateTo005 - recreateContestData FAILED" << QT_ENDL;
2213 ErrorUpdating = true;
2214 }
2215 }
2216 else
2217 { // Version not updated
2218 //qDebug() << "DataBase::updateTo005 - 005 update false6" << QT_ENDL;
2219 ErrorUpdating = true;
2220 }
2221 }
2222 //qDebug() << "DataBase::updateTo005 - 005 updated 3" << QT_ENDL;
2223
2224 //TODO: Delete the table and recreate it
2225 if (IAmIn005)
2226 {
2227 msgBox.setText(QObject::tr("All the data was migrated correctly. You should now go to Setup->Preferences->Logs to check that everything is okay."));
2228 msgBox.exec();
2229 }
2230 else
2231 {
2232 //// emit debugLog(Q_FUNC_INFO, "2", 7);
2233 }
2234 //qDebug() << "DataBase::updateTo005 - I am in 005 already!! " << QT_ENDL;
2235 //qDebug() << "DataBase::updateTo005: UPDATED OK!" << QT_ENDL;
2236 return IAmIn005;
2237 }
2238
recreateSatelliteData()2239 bool DataBase::recreateSatelliteData()
2240 {
2241 //qDebug() << "DataBase::recreateSatelliteData" << QT_ENDL;
2242 QSqlQuery query;
2243
2244 if (isTheTableExisting("satellites"))
2245 {
2246 if (execQuery(Q_FUNC_INFO, "DROP TABLE satellites"))
2247 {
2248 if (createTableSatellites(true))
2249 {
2250 //qDebug() << "DataBase::recreateSatelliteData SAT table created" << QT_ENDL;
2251 return populateTableSatellites(true);
2252 }
2253 else
2254 {
2255 //qDebug() << "DataBase::recreateSatelliteData SAT table NOT created" << QT_ENDL;
2256 }
2257 }
2258 else
2259 {
2260 //qDebug() << "DataBase::recreateSatelliteData execQuery FAILED" << QT_ENDL;
2261 }
2262 }
2263 else
2264 {
2265 if (createTableSatellites(true))
2266 {
2267 //qDebug() << "DataBase::recreateSatelliteData SAT table created" << QT_ENDL;
2268 return populateTableSatellites(true);
2269 }
2270 else
2271 {
2272 //qDebug() << "DataBase::recreateSatelliteData SAT table NOT created" << QT_ENDL;
2273 }
2274 }
2275
2276 //qDebug() << "DataBase::recreateSatelliteData END FALSE" << QT_ENDL;
2277 return false;
2278 }
2279
recreateContestData()2280 bool DataBase::recreateContestData()
2281 {
2282 //qDebug() << "DataBase::recreateContestData" << QT_ENDL;
2283 if (isTheTableExisting("contest"))
2284 {
2285 QSqlQuery query;
2286 bool sqlOk = false;
2287 sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE contest");
2288 if (sqlOk)
2289 {
2290 if (createTableContest())
2291 {
2292 return populateContestData();
2293 }
2294 }
2295 }
2296 else
2297 {
2298 if (createTableContest())
2299 {
2300 return populateContestData();
2301 }
2302 }
2303 return false;
2304 }
2305
recreateSupportedContest()2306 bool DataBase::recreateSupportedContest()
2307 {
2308 //qDebug() << "DataBase::recreateSupportedContest" << QT_ENDL;
2309 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists supportedcontests");
2310
2311 if (isTheTableExisting("supportedcontests"))
2312 {
2313 QSqlQuery query;
2314 bool sqlOk = false;
2315 sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE supportedcontests");
2316 if (sqlOk)
2317 {
2318 //qDebug() << "DataBase::recreateSupportedContest SQLOK" << QT_ENDL;
2319 if (createTableSupportedContest())
2320 {
2321 //qDebug() << "DataBase::recreateSupportedContest - createTable OK" << QT_ENDL;
2322 return populateTableSupportedContest();
2323 }
2324 else
2325 {
2326 //qDebug() << "DataBase::recreateSupportedContest createTableSupportContest FALSE" << QT_ENDL;
2327 return false;
2328 }
2329 }
2330 else
2331 {
2332 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2333 }
2334 }
2335 else
2336 {
2337 if (createTableSupportedContest())
2338 {
2339 //qDebug() << "DataBase::recreateSupportedContest - createTable OK" << QT_ENDL;
2340 return populateTableSupportedContest();
2341 }
2342 else
2343 {
2344 //qDebug() << "DataBase::recreateSupportedContest createTableSupportContest FALSE" << QT_ENDL;
2345 return false;
2346 }
2347 }
2348 //qDebug() << "DataBase::recreateSupportedContest - FALSE end" << QT_ENDL;
2349 return false;
2350 }
2351
2352
recreatePropModes()2353 bool DataBase::recreatePropModes()
2354 {
2355 //qDebug() << "DataBase::recreatePropModes" << QT_ENDL;
2356 if (isTheTableExisting("prop_mode_enumeration"))
2357 {
2358 //qDebug() << "DataBase::recreatePropModes: Table Exist" << QT_ENDL;
2359 bool sqlOk = false;
2360 sqlOk = execQuery(Q_FUNC_INFO, "DROP TABLE prop_mode_enumeration");
2361
2362 if (sqlOk)
2363 {
2364 //qDebug() << "DataBase::recreatePropModes SQLOK" << QT_ENDL;
2365 if (createTablePropModes())
2366 {
2367 //qDebug() << "DataBase::recreatePropModes - createTable OK" << QT_ENDL;
2368 if (populatePropagationModes())
2369 {
2370 //qDebug() << "DataBase::recreatePropModes - populatePropModes OK" << QT_ENDL;
2371 return true;
2372 }
2373 else
2374 {
2375 //qDebug() << "DataBase::recreatePropModes - populatePropModes NOK" << QT_ENDL;
2376 return false;
2377 }
2378 }
2379 else
2380 {
2381 //qDebug() << "DataBase::recreatePropModes createTableSupportContest FALSE-1" << QT_ENDL;
2382 return false;
2383 }
2384 }
2385 else
2386 {
2387 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2388 //qDebug() << "DataBase::recreatePropModes - prop_mode_enumeration table has not been dropped" << QT_ENDL;
2389 //qDebug() << "DataBase::recreatePropModes : Table creation FAILED" << QT_ENDL;
2390 }
2391 }
2392 else
2393 {
2394 //qDebug() << "DataBase::recreatePropModes: Table does NOT Exist" << QT_ENDL;
2395 if (createTablePropModes())
2396 {
2397 //qDebug() << "DataBase::recreatePropModes - createTable OK" << QT_ENDL;
2398 if (populatePropagationModes())
2399 {
2400 //qDebug() << "DataBase::recreatePropModes - populatePropModes OK" << QT_ENDL;
2401 return true;
2402 }
2403 else
2404 {
2405 //qDebug() << "DataBase::recreatePropModes - populatePropModes NOK" << QT_ENDL;
2406 return false;
2407 }
2408 }
2409 else
2410 {
2411 //qDebug() << "DataBase::recreatePropModes createTableSupportContest FALSE-2" << QT_ENDL;
2412 }
2413 }
2414
2415 //qDebug() << "DataBase::recreatePropModes - FALSE end" << QT_ENDL;
2416 return false;
2417 }
2418
2419
createTableLogs(const bool real)2420 bool DataBase::createTableLogs(const bool real)
2421 { // NoTmp = false => TMP data table to operate and be deleted afterwards
2422 //Creating the Sats DB to be able to include satellites to the LOTW
2423
2424 //qDebug() << "DataBase::createTableLogs" << QT_ENDL;
2425
2426 QString stringQuery = QString();
2427 //QSqlQuery query;
2428 if (real)
2429 {
2430 //qDebug() << "DataBase::createTableLogs - logs" << QT_ENDL;
2431 stringQuery = "CREATE TABLE logs" ;
2432 }
2433 else
2434 {
2435 //qDebug() << "DataBase::createTableLogs - logstemp" << QT_ENDL;
2436 stringQuery = "CREATE TABLE logstemp" ;
2437 }
2438
2439 stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
2440 "logdate VARCHAR(10), "
2441 "stationcall VARCHAR(15) NOT NULL, "
2442 "operators VARCHAR, "
2443 "comment VARCHAR, "
2444 "logtype VARCHAR, "
2445 "logtypen INTEGER, "
2446 "FOREIGN KEY (logtypen) REFERENCES supportedcontests(id),"
2447 "FOREIGN KEY (logtype) REFERENCES supportedcontests(name))");
2448
2449
2450
2451 //qDebug() << "DataBase::createTableLogs - END" << QT_ENDL;
2452
2453 return execQuery(Q_FUNC_INFO, stringQuery);
2454 }
2455
2456
createTablePropModes()2457 bool DataBase::createTablePropModes()
2458 {
2459 //qDebug() << "DataBase::createTablePropModes" << QT_ENDL;
2460
2461 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists prop_mode_enumeration");
2462 return execQuery(Q_FUNC_INFO, "CREATE TABLE prop_mode_enumeration (id INTEGER PRIMARY KEY AUTOINCREMENT, shortname VARCHAR(8), name VARCHAR(55) )");
2463 }
2464
createTableSupportedContest()2465 bool DataBase::createTableSupportedContest()
2466 {
2467 //qDebug() << "DataBase::createTableSupportedContest" << QT_ENDL;
2468 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists supportedcontests");
2469
2470 QString st = QString("CREATE TABLE supportedcontests ("
2471 "id INTEGER PRIMARY KEY, "
2472 "longname VARCHAR,"
2473 "name VARCHAR)");
2474 return execQuery(Q_FUNC_INFO, st);
2475 }
2476
createTableContest()2477 bool DataBase::createTableContest()
2478 {
2479 //qDebug() << "DataBase::createTableContest" << QT_ENDL;
2480 //QSqlQuery query;
2481
2482 createTableSupportedContest();
2483
2484 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists contest");
2485
2486 execQuery(Q_FUNC_INFO, "CREATE TABLE contest ("
2487 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
2488 "contest INTEGER NOT NULL,"
2489 "catoperator INTEGER NOT NULL,"
2490 "catassisted INTEGER NOT NULL,"
2491 "catpower INTEGER NOT NULL,"
2492 "catband INTEGER NOT NULL,"
2493 "catoverlay INTEGER NOT NULL,"
2494 "catmode INTEGER NOT NULL,"
2495 "FOREIGN KEY (contest) REFERENCES supportedcontests(id), "
2496 "FOREIGN KEY (catoperator) REFERENCES contestcatoperator(id), "
2497 "FOREIGN KEY (catassisted) REFERENCES contestcatassisted(id), "
2498 "FOREIGN KEY (catpower) REFERENCES contestcatpower(id), "
2499 "FOREIGN KEY (catband) REFERENCES contestcatband(id), "
2500 "FOREIGN KEY (catoverlay) REFERENCES contestcatoverlay(id), "
2501 "FOREIGN KEY (catmode) REFERENCES contestcatmode(id))");
2502
2503
2504
2505 execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatoperator ("
2506 "id INTEGER PRIMARY KEY, "
2507 "name VARCHAR)");
2508
2509 execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatassisted ("
2510 "id INTEGER PRIMARY KEY, "
2511 "name VARCHAR)");
2512
2513 execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatpower ("
2514 "id INTEGER PRIMARY KEY, "
2515 "name VARCHAR)");
2516
2517 execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatband ("
2518 "id INTEGER PRIMARY KEY, "
2519 "name VARCHAR)");
2520
2521 execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatoverlay ("
2522 "id INTEGER PRIMARY KEY, "
2523 "name VARCHAR)");
2524
2525 execQuery(Q_FUNC_INFO, "CREATE TABLE contestcatmode ("
2526 "id INTEGER PRIMARY KEY, "
2527 "name VARCHAR)");
2528
2529 populateTableSupportedContest();
2530
2531 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('0', 'N/A')");
2532 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('1', 'Single-Operator')");
2533 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('2', 'Multi-One')");
2534 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('3', 'Multi-Two')");
2535 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('4', 'Multi-Unlimited')");
2536 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoperator (id, name) VALUES ('5', 'CheckLog')");
2537
2538 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatassisted (id, name) VALUES ('0', 'N/A')");
2539 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatassisted (id, name) VALUES ('1', 'Non-Assisted')");
2540 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatassisted (id, name) VALUES ('2', 'Assisted')");
2541
2542 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('0', 'N/A')");
2543 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('1', 'High-Power')");
2544 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('2', 'Low-Power')");
2545 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatpower (id, name) VALUES ('3', 'QRP')");
2546
2547 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatband (id, name) VALUES ('0', 'N/A')");
2548 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatband (id, name) VALUES ('1', 'All-Band')");
2549 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatband (id, name) VALUES ('2', 'Single-Band')");
2550
2551 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoverlay (id, name) VALUES ('0', 'N/A')");
2552 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoverlay (id, name) VALUES ('1', 'Classic')");
2553 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatoverlay (id, name) VALUES ('2', 'Rookie')");
2554
2555 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('0', 'N/A')");
2556 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('1', 'SSB')");
2557 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('2', 'CW')");
2558 execQuery(Q_FUNC_INFO, "INSERT INTO contestcatmode (id, name) VALUES ('3', 'MIXED')");
2559
2560 //qDebug() << "DataBase::createTableContest END" << QT_ENDL;
2561 return true;
2562 }
2563
populateTableSupportedContest()2564 bool DataBase::populateTableSupportedContest()
2565 {
2566 //qDebug() << "DataBase::populateTableSupportedContest" << QT_ENDL;
2567 // ADDING ALL THE CATEGORIES OPTIONS
2568 return execQuery(Q_FUNC_INFO, "INSERT INTO supportedcontests (id, longname, name) VALUES ('0', 'Normal log', 'DX')");
2569 }
2570
createTableQSL_Via_enumeration()2571 bool DataBase::createTableQSL_Via_enumeration()
2572 {
2573 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists qsl_via_enumeration");
2574 QString st = QString("CREATE TABLE qsl_via_enumeration ("
2575 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
2576 "shortname VARCHAR(1) NOT NULL, "
2577 "name VARCHAR(15) NOT NULL)");
2578 return execQuery(Q_FUNC_INFO, st);
2579 }
2580
populateTableQSL_Via_enumeration()2581 bool DataBase::populateTableQSL_Via_enumeration()
2582 {
2583 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('B', 'Bureau')");
2584 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('D', 'Direct')");
2585 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('E', 'Electronic')");
2586 execQuery(Q_FUNC_INFO, "INSERT INTO qsl_via_enumeration (shortname, name) VALUES ('M', 'Manager')");
2587 return true;
2588 }
2589
2590
createTableMode(const bool NoTmp)2591 bool DataBase::createTableMode(const bool NoTmp)
2592 { // NoTmp = false => TMP data table to operate and be deleted afterwards
2593 //qDebug() << "DataBase::createTableMode" << QT_ENDL;
2594 QString stringQuery = QString();
2595 QSqlQuery query;
2596 if (NoTmp)
2597 {
2598 stringQuery = "CREATE TABLE mode" ;
2599 }
2600 else
2601 {
2602 stringQuery = "CREATE TABLE modetemp" ;
2603 }
2604
2605 stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
2606 "cabrillo VARCHAR(2) NOT NULL, "
2607 "name VARCHAR(40) NOT NULL, "
2608 "submode VARCHAR(40) NOT NULL, "
2609 "deprecated VARCHAR(1) NOT NULL)");
2610
2611 //qDebug() << "DataBase::createTableMode END" << QT_ENDL;
2612
2613 return execQuery(Q_FUNC_INFO, stringQuery);
2614 }
2615
populateTableMode(const bool NoTmp)2616 bool DataBase::populateTableMode(const bool NoTmp)
2617 {
2618 //qDebug() << "DataBase::populateTableMode" << QT_ENDL;
2619 //QSqlQuery query;
2620 QString tableName = QString();
2621 QString squery = QString();
2622 if (NoTmp)
2623 {
2624 tableName = "mode";
2625 }
2626 else
2627 {
2628 tableName = "modetemp";
2629 }
2630
2631
2632 bool sqlOK = execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('AM', 'AM', 'PH', '0')").arg(tableName));
2633
2634 //int errorCode = -1;
2635 if (!sqlOK)
2636 {
2637 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
2638 //qDebug() << "DataBase::populateTableMode: Mode table population FAILED" << QT_ENDL;
2639 //errorCode = query.lastError().nativeErrorCode();
2640 }
2641 else
2642 {
2643 //qDebug() << "DataBase::populateTableMode: Mode table population OK" << QT_ENDL;
2644 }
2645
2646 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ARDOP', 'ARDOP', 'NO', '0')").arg(tableName));
2647 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('AMTORFEC', 'TOR', 'NO', '1')").arg(tableName));
2648 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ASCI', 'RTTY', 'NO', '1')").arg(tableName));
2649 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ATV', 'ATV', 'NO', '0')").arg(tableName));
2650 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('C4FM', 'C4FM', 'NO', '0')").arg(tableName));
2651 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CHIP', 'CHIP', 'NO', '0')").arg(tableName));
2652 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CHIP64', 'CHIP', 'NO', '1')").arg(tableName));
2653 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CHIP128', 'CHIP', 'NO', '1')").arg(tableName));
2654 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CLO', 'CLO', 'NO', '0')").arg(tableName));
2655 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CONTESTI', 'CONTESTI', 'NO', '0')").arg(tableName));
2656 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('CW', 'CW', 'CW', '0')").arg(tableName));
2657 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DIGITALVOICE', 'DIGITALVOICE', 'NO', '0')").arg(tableName));
2658 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DSTAR', 'DSTAR', 'NO', '0')").arg(tableName));
2659 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DOMINO', 'DOMINO', 'NO', '0')").arg(tableName));
2660 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DOMINOEX', 'DOMINO', 'NO', '0')").arg(tableName));
2661 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('DOMINOF', 'DOMINO', 'NO', '1')").arg(tableName));
2662 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FAX', 'FAX', 'NO', '0')").arg(tableName));
2663 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FM', 'FM', 'PH', '0')").arg(tableName));
2664 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FMHELL', 'HELL', 'NO', '1')").arg(tableName));
2665 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FT4', 'MFSK', 'DG', '0')").arg(tableName));
2666 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FST4', 'MFSK', 'DG', '0')").arg(tableName));
2667 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FST4W', 'MFSK', 'DG', '0')").arg(tableName));
2668 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FT8', 'FT8', 'DG', '0')").arg(tableName));
2669 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSK31', 'PSK', 'DG', '1')").arg(tableName));
2670 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSK441', 'FSK441', 'DG', '0')").arg(tableName));
2671 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSKHELL', 'HELL', 'NO', '0')").arg(tableName));
2672 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('FSQCALL', 'MFSK', 'NO', '0')").arg(tableName));
2673 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('GTOR', 'TOR', 'NO', '1')").arg(tableName));
2674 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('HELL', 'HELL', 'NO', '0')").arg(tableName));
2675 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('HELL80', 'HELL', 'NO', '1')").arg(tableName));
2676 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('HFSK', 'HELL', 'NO', '1')").arg(tableName));
2677 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ISCAT', 'ISCAT', 'NO', '0')").arg(tableName));
2678 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ISCAT-A', 'ISCAT', 'NO', '0')").arg(tableName));
2679 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ISCAT-B', 'ISCAT', 'NO', '0')").arg(tableName));
2680 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JS8', 'MFSK', 'DG', '0')").arg(tableName));
2681 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4', 'JT4', 'DG', '0')").arg(tableName));
2682 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4A', 'JT4', 'DG', '1')").arg(tableName));
2683 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4B', 'JT4', 'DG', '1')").arg(tableName));
2684 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4C', 'JT4', 'DG', '1')").arg(tableName));
2685 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4D', 'JT4', 'DG', '1')").arg(tableName));
2686 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4E', 'JT4', 'DG', '1')").arg(tableName));
2687 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4F', 'JT4', 'DG', '1')").arg(tableName));
2688 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT4G', 'JT4', 'DG', '1')").arg(tableName));
2689 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT6M', 'JT6M', 'DG', '0')").arg(tableName));
2690 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9', 'JT9', 'DG', '0')").arg(tableName));
2691 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-1', 'JT9', 'DG', '0')").arg(tableName));
2692 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-2', 'JT9', 'DG', '0')").arg(tableName));
2693 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-5', 'JT9', 'DG', '0')").arg(tableName));
2694 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-10', 'JT9', 'DG', '0')").arg(tableName));
2695 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9-30', 'JT9', 'DG', '0')").arg(tableName));
2696 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9A', 'JT9', 'DG', '0')").arg(tableName));
2697 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9B', 'JT9', 'DG', '0')").arg(tableName));
2698 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9C', 'JT9', 'DG', '0')").arg(tableName));
2699 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9D', 'JT9', 'DG', '0')").arg(tableName));
2700 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9E', 'JT9', 'DG', '0')").arg(tableName));
2701 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9E FAST', 'JT9', 'DG', '0')").arg(tableName));
2702 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9F', 'JT9', 'DG', '0')").arg(tableName));
2703 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9F FAST', 'JT9', 'DG', '0')").arg(tableName));
2704 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9G', 'JT9', 'DG', '0')").arg(tableName));
2705 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9G FAST', 'JT9', 'DG', '0')").arg(tableName));
2706 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9H', 'JT9', 'DG', '0')").arg(tableName));
2707 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT9H FAST', 'JT9', 'DG', '0')").arg(tableName));
2708 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT44', 'JT44', 'DG', '0')").arg(tableName));
2709 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65', 'JT65', 'DG', '0')").arg(tableName));
2710 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65A', 'JT65', 'DG', '1')").arg(tableName));
2711 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65B', 'JT65', 'DG', '1')").arg(tableName));
2712 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65B2', 'JT65', 'DG', '0')").arg(tableName));
2713 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65C', 'JT65', 'DG', '1')").arg(tableName));
2714 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('JT65C2', 'JT65', 'DG', '0')").arg(tableName));
2715 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK', 'MFSK', 'DG', '0')").arg(tableName));
2716 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK4', 'MFSK', 'DG', '0')").arg(tableName));
2717 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK8', 'MFSK', 'DG', '1')").arg(tableName));
2718 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK11', 'MFSK', 'DG', '0')").arg(tableName));
2719 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK16', 'MFSK', 'DG', '1')").arg(tableName));
2720 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK22', 'MFSK', 'DG', '0')").arg(tableName));
2721 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK31', 'MFSK', 'DG', '0')").arg(tableName));
2722 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK32', 'MFSK', 'DG', '0')").arg(tableName));
2723 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK64', 'MFSK', 'DG', '0')").arg(tableName));
2724 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MFSK128', 'MFSK', 'DG', '0')").arg(tableName));
2725 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MSK144', 'MSK144', 'DG', '0')").arg(tableName));
2726 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('MT63', 'MT63', 'DG', '0')").arg(tableName));
2727 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA', 'OLIVIA', 'DG', '0')").arg(tableName));
2728 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 4/125', 'OLIVIA', 'DG', '0')").arg(tableName));
2729 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 4/250', 'OLIVIA', 'DG', '0')").arg(tableName));
2730 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 8/250', 'OLIVIA', 'DG', '0')").arg(tableName));
2731 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 8/500', 'OLIVIA', 'DG', '0')").arg(tableName));
2732 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 16/500', 'OLIVIA', 'DG', '0')").arg(tableName));
2733 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 16/1000', 'OLIVIA', 'DG', '0')").arg(tableName));
2734 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OLIVIA 32/1000', 'OLIVIA', 'DG', '0')").arg(tableName));
2735 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OPERA', 'OPERA', 'DG', '0')").arg(tableName));
2736 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OPERA-BEACON', 'OPERA', 'DG', '0')").arg(tableName));
2737 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('OPERA-QSO', 'OPERA', 'DG', '0')").arg(tableName));
2738 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC', 'PAC', 'NO', '0')").arg(tableName));
2739 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC2', 'PAC', 'NO', '1')").arg(tableName));
2740 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC3', 'PAC', 'NO', '1')").arg(tableName));
2741 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAC4', 'PAC', 'NO', '0')").arg(tableName));
2742 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAX', 'PAX', 'NO', '0')").arg(tableName));
2743 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PAX2', 'PAX', 'NO', '1')").arg(tableName));
2744 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PCW', 'CW', 'NO', '1')").arg(tableName));
2745 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PKT', 'PKT', 'DG', '0')").arg(tableName));
2746 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK', 'PSK', 'DG', '0')").arg(tableName));
2747 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK10', 'PSK', 'DG', '1')").arg(tableName));
2748 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK31', 'PSK', 'DG', '1')").arg(tableName));
2749 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK63', 'PSK', 'DG', '1')").arg(tableName));
2750 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK63F', 'PSK', 'DG', '1')").arg(tableName));
2751 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK125', 'PSK', 'DG', '1')").arg(tableName));
2752 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK250', 'PSK', 'DG', '0')").arg(tableName));
2753 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK500', 'PSK', 'DG', '0')").arg(tableName));
2754 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK1000', 'PSK', 'DG', '0')").arg(tableName));
2755 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKAM10', 'PSK', 'NO', '1')").arg(tableName));
2756 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKAM31', 'PSK', 'NO', '1')").arg(tableName));
2757 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKAM50', 'PSK', 'NO', '1')").arg(tableName));
2758 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKFEC31', 'PSK', 'NO', '1')").arg(tableName));
2759 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSK2K', 'PSK2K', 'NO', '0')").arg(tableName));
2760 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('PSKHELL', 'HELL', 'NO', '0')").arg(tableName));
2761 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('Q15', 'Q15', 'DG', '0')").arg(tableName));
2762 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('Q65', 'MFSK', 'DG', '0')").arg(tableName));
2763 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK31', 'PSK', 'DG', '1')").arg(tableName));
2764 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK63', 'PSK', 'DG', '1')").arg(tableName));
2765 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK125', 'PSK', 'DG', '1')").arg(tableName));
2766 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK250', 'PSK', 'DG', '0')").arg(tableName));
2767 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QPSK500', 'PSK', 'DG', '0')").arg(tableName));
2768 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64', 'QRA64', 'DG', '0')").arg(tableName));
2769 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64A', 'QRA64', 'DG', '0')").arg(tableName));
2770 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64B', 'QRA64', 'DG', '0')").arg(tableName));
2771 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64C', 'QRA64', 'DG', '0')").arg(tableName));
2772 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64D', 'QRA64', 'DG', '0')").arg(tableName));
2773 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('QRA64E', 'QRA64', 'DG', '0')").arg(tableName));
2774 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS', 'ROS', 'DG', '0')").arg(tableName));
2775 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS-EME', 'ROS', 'DG', '0')").arg(tableName));
2776 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS-HF', 'ROS', 'DG', '0')").arg(tableName));
2777 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('ROS-MF', 'ROS', 'DG', '0')").arg(tableName));
2778 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('RTTY', 'RTTY', 'RY', '0')").arg(tableName));
2779 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('RTTYM', 'RTTYM', 'RY', '0')").arg(tableName));
2780 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('SSB', 'SSB', 'PH', '0')").arg(tableName));
2781 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('LSB', 'SSB', 'PH', '0')").arg(tableName));
2782 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('USB', 'SSB', 'PH', '0')").arg(tableName));
2783 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('SIM31', 'PSK', 'NO', '0')").arg(tableName));
2784 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('SSTV', 'SSTV', 'NO', '0')").arg(tableName));
2785 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('T10', 'T10', 'NO', '0')").arg(tableName));
2786 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('THRB', 'THRB', 'NO', '0')").arg(tableName));
2787 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('THRBX', 'THRB', 'NO', '1')").arg(tableName));
2788 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('THOR', 'THOR', 'NO', '0')").arg(tableName));
2789 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('TOR', 'TOR', 'NO', '0')").arg(tableName));
2790 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('V4', 'V4', 'NO', '0')").arg(tableName));
2791 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('VOI', 'VOI', 'NO', '0')").arg(tableName));
2792 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('WINMOR', 'WINMOR', 'NO', '0')").arg(tableName));
2793 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (submode, name, cabrillo, deprecated) VALUES ('WSPR', 'WSPR', 'NO', '0')").arg(tableName));
2794
2795
2796 createTheModeQuickReference();
2797 //qDebug() << "DataBase::populateTableMode END" << QT_ENDL;
2798 return true;
2799 }
2800
2801
createTableSatellites(const bool NoTmp)2802 bool DataBase::createTableSatellites(const bool NoTmp)
2803 { // NoTmp = false => TMP data table to operate and be deleted afterwards
2804 //Creating the Sats DB to be able to include satellites to the LOTW
2805
2806 //qDebug() << "DataBase::createTableSatellites" << QT_ENDL;
2807
2808 // The satmode column has the following format: {Up/down-mode;Up/down-mode}
2809 // this way we can implement several freqs/modes per sat
2810 // Initially I will implement Up/Down only but KLog should be prepared to work with "-mode" also
2811 // being mode "SSB, CW, ... and other ADIF modes
2812
2813 QString stringQuery = QString();
2814
2815
2816 QString table = QString();
2817 if (NoTmp)
2818 {
2819 table = "satellites" ;
2820 }
2821 else
2822 {
2823 table = "satellitestemp" ;
2824 }
2825 stringQuery = "CREATE TABLE "+ table;
2826
2827 stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
2828 "satarrlid VARCHAR, "
2829 "satname VARCHAR, "
2830 "uplink VARCHAR,"
2831 "downlink VARCHAR,"
2832 "satmode VARCHAR, "
2833 "UNIQUE (satarrlid) )");
2834 /*
2835 *
2836 * uplink/downlink format is the following:
2837 * Single frecuency: 145.950
2838 * Segment: 145.950-145.975
2839 * Several freqs: 145.950,435.950
2840 * Several segments: 145.950-145.975,435.950-435.975
2841 *
2842 * satmode format:
2843 * Single mode: FM
2844 * Modes complex Up/Downlink: USB/LSB
2845 * Several modes (one per uplink/downlink pair): FM,SSB
2846 * Several complex modes (one per uplink/downlink pair): USB/LSB,LSB/USB,FM
2847 *
2848 */
2849 QString delS = QString();
2850 delS = "DROP TABLE IF exists " + table;
2851 execQuery(Q_FUNC_INFO, delS);
2852
2853 return execQuery(Q_FUNC_INFO, stringQuery);
2854 }
2855
populateTableSatellites(const bool NoTmp)2856 bool DataBase::populateTableSatellites(const bool NoTmp)
2857 {
2858 // Data must come from:
2859 // https://lotw.arrl.org/lotw-help/frequently-asked-questions/#sats
2860 //qDebug() << "DataBase::populateTableSatellites" << QT_ENDL;
2861
2862 //QSqlQuery query;
2863 QString tableName = QString();
2864 QString squery = QString();
2865 if (NoTmp)
2866 {
2867 tableName = "satellites";
2868 }
2869 else
2870 {
2871 tableName = "satellitestemp";
2872 }
2873
2874 // The satmode column has the following format: {Up/down-mode;Up/down-mode}
2875 // this way we can implement several freqs/modes per sat
2876 // Initially I will implement Up/Down only but KLog should be prepared to work with "-mode" also
2877 // being mode "SSB, CW, ... and other ADIF modes
2878 //To add a band, just create another line:
2879
2880
2881 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));
2882 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));
2883 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));
2884 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));
2885 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('AO-24', 'Arsene-OSCAR 24', '', '145.975', 'PKT')").arg(tableName));
2886 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));
2887 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));
2888 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));
2889 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));
2890 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));
2891 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));
2892 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));
2893 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));
2894 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));
2895 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));
2896 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));
2897 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));
2898 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));
2899 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));
2900 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));
2901 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));
2902 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));
2903 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));
2904 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('DO-64', 'Delfi OSCAR-64', '', '145.870', 'CW')").arg(tableName));
2905 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));
2906 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));
2907 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));
2908 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));
2909 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));
2910 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));
2911 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));
2912 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));
2913 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));
2914 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));
2915 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));
2916 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));
2917 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));
2918 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));
2919 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-1', 'Radio Sputnik 1', '145', '29', '')").arg(tableName));
2920 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));
2921 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));
2922 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));
2923 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));
2924 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));
2925 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, uplink, downlink, satmode) VALUES ('RS-2', 'Radio Sputnik 2', '145', '29', '')").arg(tableName));
2926 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));
2927 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-5', 'Radio Sputnik 5', 'CW')").arg(tableName));
2928 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-6', 'Radio Sputnik 6', '')").arg(tableName));
2929 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-7', 'Radio Sputnik 7', 'CW')").arg(tableName));
2930 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (satarrlid, satname, satmode) VALUES ('RS-8', 'Radio Sputnik 8', '')").arg(tableName));
2931 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));
2932 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));
2933 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));
2934 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));
2935 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));
2936 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));
2937 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));
2938 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));
2939 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));
2940 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));
2941 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));
2942 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));
2943 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));
2944 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));
2945 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));
2946 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));
2947 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));
2948 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));
2949 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));
2950
2951
2952 //qDebug() << "DataBase::populateTableSatellites - END" << QT_ENDL;
2953 return true;
2954 }
2955
createTableEntity(const bool NoTmp)2956 bool DataBase::createTableEntity(const bool NoTmp)
2957 { // NoTmp = false => TMP data table to operate and be deleted afterwards
2958 //qDebug() << "DataBase::createTableEntity" << QT_ENDL;
2959
2960 QString stringQuery = QString();
2961 //QSqlQuery query;
2962 if (NoTmp)
2963 {
2964 stringQuery = "CREATE TABLE entity" ;
2965 }
2966 else
2967 {
2968 stringQuery = "CREATE TABLE entitytemp" ;
2969 }
2970
2971 stringQuery = stringQuery + QString( " (id INTEGER PRIMARY KEY AUTOINCREMENT, "
2972 "name VARCHAR(40) NOT NULL,"
2973 "cqz INTEGER NOT NULL, "
2974 "ituz INTEGER NOT NULL, "
2975 "continent INTEGER NOT NULL, "
2976 "latitude REAL NOT NULL, "
2977 "longitude REAL NOT NULL, "
2978 "utc INTEGER NOT NULL, "
2979 "dxcc INTEGER NOT NULL, "
2980 "mainprefix VARCHAR(15) NOT NULL, "
2981 "deleted INTEGER, "
2982 "sincedate VARCHAR(10), "
2983 "todate VARCHAR(10), "
2984 "isoname VARCHAR(10), "
2985 "UNIQUE (dxcc, mainprefix), "
2986 "FOREIGN KEY (continent) REFERENCES continent(shortname) )");
2987
2988 //qDebug() << "DataBase::createTableEntity END" << QT_ENDL;
2989 return execQuery(Q_FUNC_INFO, stringQuery);
2990 //TODO: To add some columns in this the table to mark if worked/confirmed/band/Mode
2991 }
2992
2993
createTableBand(const bool NoTmp)2994 bool DataBase::createTableBand(const bool NoTmp)
2995 { // NoTmp = false => TMP data table to operate and be deleted afterwards
2996 //qDebug() << "DataBase::createTableBand" << QT_ENDL;
2997 QString stringQuery = QString();
2998 //QSqlQuery query;
2999 if (NoTmp)
3000 {
3001 stringQuery = "CREATE TABLE band" ;
3002 }
3003 else
3004 {
3005 stringQuery = "CREATE TABLE bandtemp" ;
3006 }
3007 stringQuery = stringQuery + QString(" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
3008 "lower REAL NOT NULL, "
3009 "upper REAL NOT NULL, "
3010 "cabrillo VARCHAR(6) NOT NULL, "
3011 "name VARCHAR(40) NOT NULL, "
3012 "UNIQUE (lower, upper, cabrillo, name) )");
3013
3014 //qDebug() << "DataBase::createTableBand END" << QT_ENDL;
3015 return execQuery(Q_FUNC_INFO, stringQuery);
3016 }
3017
syncLogQSOsOnBandTableChange()3018 bool DataBase::syncLogQSOsOnBandTableChange()
3019 {
3020 //qDebug() << Q_FUNC_INFO << QT_ENDL;
3021 QString stringQuery;
3022 QSqlQuery query;
3023
3024 stringQuery = "SELECT DISTINCT log.bandid FROM log ORDER BY bandid DESC";
3025
3026 if (!query.exec(stringQuery))
3027 {
3028 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3029 query.finish();
3030 return false;
3031 }
3032
3033 QList<int> bandIDs;
3034 bandIDs.clear();
3035 int bandid = -1;
3036 while(query.next())
3037 {
3038 if (!query.isValid())
3039 {
3040 query.finish();
3041 return false;
3042 }
3043 bandid = (query.value(0)).toInt();
3044 if (bandid>0)
3045 {
3046 bandIDs.append (bandid);
3047 bandid = -1;
3048 }
3049 }
3050
3051 if (bandIDs.length ()>0)
3052 {
3053 foreach(int i, bandIDs)
3054 {
3055 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);
3056 //qDebug() << Q_FUNC_INFO << ": " << stringQuery << QT_ENDL;
3057 if (!query.exec(stringQuery))
3058 {
3059 query.finish();
3060 return false;
3061 }
3062 }
3063 }
3064 query.finish ();
3065
3066 //qDebug() << Q_FUNC_INFO << " - END" << QT_ENDL;
3067 return true;
3068 }
3069
populateTableBand(const bool NoTmp)3070 bool DataBase::populateTableBand(const bool NoTmp)
3071 {
3072 // Cabrillo definition: http://wwrof.org/cabrillo/cabrillo-specification-v3/
3073
3074 //qDebug() << "DataBase::populateTableBand" << QT_ENDL;
3075
3076
3077 QString tableName = QString();
3078 QString squery = QString();
3079 if (NoTmp)
3080 {
3081 tableName = "band";
3082 }
3083 else
3084 {
3085 tableName = "bandtemp";
3086 }
3087
3088
3089 //To add a band, just create another line:
3090 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('0', '0', '0', 'Light')").arg(tableName));
3091 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('1mm', '241000', '250000', '241G')").arg(tableName));
3092 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2mm', '142000', '149000', '142G')").arg(tableName));
3093 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2.5mm', '119980', '120020', '119G')").arg(tableName));
3094 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('4mm', '75500', '81000', '75G')").arg(tableName));
3095 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('6mm', '47000', '47200', '47G')").arg(tableName));
3096 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('1.25CM', '24000', '24250', '24G')").arg(tableName));
3097 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('3CM', '10000', '10500', '10G')").arg(tableName));
3098 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('6CM', '5650', '5925', '5.7G')").arg(tableName));
3099 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('9CM', '3300', '3500', '3.4G')").arg(tableName));
3100 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('13CM', '2340', '2450', '2.3G')").arg(tableName));
3101 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('23CM', '1240', '1300', '1.2G')").arg(tableName));
3102 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('33CM', '902', '928', '902')").arg(tableName));
3103 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('70CM', '420', '450', '432')").arg(tableName));
3104 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('1.25M', '222', '225', '222')").arg(tableName));
3105 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2M', '144', '148', '2M')").arg(tableName));
3106 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('4M', '70', '71', '4M')").arg(tableName));
3107 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('5M', '54.000001', '69.9', '5M')").arg(tableName));
3108 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('6M', '50', '54', '6M')").arg(tableName));
3109 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('8M', '40', '45', '8M')").arg(tableName));
3110 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('10M', '28.0', '29.7', '10M')").arg(tableName));
3111 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('12M', '24.89', '24.99', '12M')").arg(tableName));
3112 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('15M', '21.0', '21.45', '15M')").arg(tableName));
3113 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('17M', '18.068', '18.168', '17M')").arg(tableName));
3114 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('20M', '14.0', '14.35', '20M')").arg(tableName));
3115 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('30M', '10.0', '10.15', '40M')").arg(tableName));
3116 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('40M', '7.0', '7.3', '40M')").arg(tableName));
3117 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('60M', '5.102', '5.404', '60M')").arg(tableName));
3118 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('80M', '3.5', '4.0', '80M')").arg(tableName));
3119 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('160M', '1.8', '2.0', '160M')").arg(tableName));
3120 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('560M', '0.501', '0.504', '560M')").arg(tableName));
3121 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('630M', '0.472', '0.479', '630M')").arg(tableName));
3122 execQuery(Q_FUNC_INFO, QString("INSERT INTO %1 (name, lower, upper, cabrillo) VALUES ('2190M', '0.1357', '0.1378', '2190M')").arg(tableName));
3123
3124 createTheBandQuickReference();
3125
3126 //qDebug() << "DataBase::populateTableBand END" << QT_ENDL;
3127 return true;
3128 }
3129
3130
populatePropagationModes()3131 bool DataBase::populatePropagationModes()
3132 {
3133 //qDebug() << "DataBase::populatePropagationModes" << QT_ENDL;
3134 //QSqlQuery query;
3135
3136 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AS', 'Aircraft Scatter')"));
3137 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AUR', 'Aurora')"));
3138 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AUE', 'Aurora-E')"));
3139 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('BS', 'Back scatter')"));
3140 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('ECH', 'EchoLink')"));
3141 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('EME', 'Earth-Moon-Earth')"));
3142 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('ES', 'Sporadic E')"));
3143 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('FAI', 'Field Aligned Irregularities')"));
3144 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('F2', 'F2 Reflection')"));
3145 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('INTERNET', 'Internet-assisted')"));
3146 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('ION', 'Ionoscatter')"));
3147 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('IRL', 'IRLP')"));
3148 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('MS', 'Meteor scatter')"));
3149 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('RPT', 'Terrestrial or atmospheric repeater or transponder')"));
3150 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('RS', 'Rain scatter')"));
3151 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('SAT', 'Satellite')"));
3152 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('TEP', 'Trans-equatorial')"));
3153 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('TR', 'Tropospheric ducting')"));
3154
3155 //qDebug() << "DataBase::populatePropagationModes END" << QT_ENDL;
3156 return true;
3157 }
3158
3159
populateContestData()3160 bool DataBase::populateContestData()
3161 {
3162 //qDebug() << "DataBase::populateContestData" << QT_ENDL;
3163
3164
3165
3166 // CONTEST DEFINITIONS START HERE
3167
3168 // DX
3169 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (0, 0, 0, 0, 0, 0, 0)");
3170
3171 // DX START
3172 /*
3173 // CQ WW DX SSB START
3174 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 1, 0, 1)");
3175 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 2, 0, 1)");
3176 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 1, 0, 1)");
3177 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 2, 0, 1)");
3178 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 1, 0, 1)");
3179 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 2, 0, 1)");
3180 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 1, 0, 1)");
3181 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 2, 0, 1)");
3182 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 1, 0, 1)");
3183 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 2, 0, 1)");
3184 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 1, 0, 1)");
3185 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 2, 0, 1)");
3186
3187
3188 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 1, 1, 1)");
3189 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 2, 1, 1)");
3190 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 1, 1, 1)");
3191 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 2, 1, 1)");
3192 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 1, 1, 1)");
3193 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 2, 1, 1)");
3194 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 1, 1, 1)");
3195 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 2, 1, 1)");
3196 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 1, 1, 1)");
3197 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 2, 1, 1)");
3198 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 1, 1, 1)");
3199 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 2, 1, 1)");
3200
3201 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 1, 2, 1)");
3202 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 1, 2, 2, 1)");
3203 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 1, 2, 1)");
3204 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 2, 2, 2, 1)");
3205 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 1, 2, 1)");
3206 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 1, 3, 2, 2, 1)");
3207 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 1, 2, 1)");
3208 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 1, 2, 2, 1)");
3209 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 1, 2, 1)");
3210 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 2, 2, 2, 1)");
3211 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 1, 2, 1)");
3212 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 1, 2, 3, 2, 2, 1)");
3213
3214 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 2, 0, 1, 1, 0, 1)");
3215 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 2, 0, 2, 1, 0, 1)");
3216 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 3, 0, 1, 1, 0, 1)");
3217 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 3, 0, 2, 1, 0, 1)");
3218 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 4, 0, 1, 1, 0, 1)");
3219 execQuery(Q_FUNC_INFO, "INSERT INTO contest (contest, catoperator, catassisted, catpower, catband, catoverlay, catmode) VALUES (1, 5, 0, 0, 0, 0, 1)");
3220 // CQ WW DX SSB END
3221 */
3222
3223 //qDebug() << "DataBase::populateContestData END" << QT_ENDL;
3224 return true;
3225 }
3226
howManyQSOsInLog(const int i)3227 bool DataBase::howManyQSOsInLog(const int i)
3228 {
3229 //qDebug() << "DataBase::howManyQSOsInLog" << QT_ENDL;
3230
3231 QSqlQuery query;
3232 QString sqlQueryString = QString("SELECT COUNT(id) from log WHERE lognumber='%1'").arg(i);
3233 bool sqlOK = query.exec(sqlQueryString);
3234
3235 if (sqlOK)
3236 {
3237 query.next();
3238 if (query.isValid())
3239 {
3240 //qDebug() << "DataBase::howManyQSOsInLog OK END" << QT_ENDL;
3241 return (query.value(0)).toInt();
3242 }
3243 else
3244 {
3245 //qDebug() << "DataBase::howManyQSOsInLog END-1" << QT_ENDL;
3246 query.finish();
3247 return false;
3248 }
3249 }
3250 else
3251 {
3252 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3253 query.finish();
3254 //qDebug() << "DataBase::howManyQSOsInLog END-2" << QT_ENDL;
3255 return false;
3256 }
3257 //query.finish();
3258 //return -2;
3259 }
3260
updateTo006()3261 bool DataBase::updateTo006()
3262 {// Updates the DB to 0.0.6
3263 //qDebug() << "DataBase::updateTo006: latestRead: " << getDBVersion() << QT_ENDL;
3264 bool IAmIn006 = false;
3265 bool IAmIn005 = false;
3266 bool ErrorUpdating = false;
3267 QString stringQuery = QString();
3268
3269 bool sqlOk = false;
3270 latestReaded = getDBVersion().toFloat();
3271 if (latestReaded >= 0.006f)
3272 {
3273 return true;
3274 }
3275 else
3276 {
3277 IAmIn006 = false;
3278 }
3279
3280 while (!IAmIn006 && !ErrorUpdating)
3281 {
3282 //qDebug() << "DataBase::updateTo006: - Still not in 006" << QT_ENDL;
3283 while (!IAmIn005 && !ErrorUpdating)
3284 {
3285 //qDebug() << "DataBase::updateTo006: - And still not in 005" << QT_ENDL;
3286 IAmIn005 = updateTo005();
3287 }
3288 //qDebug() << "DataBase::updateTo006: - Already in 005" << QT_ENDL;
3289 if (ErrorUpdating)
3290 {
3291 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(0)" << QT_ENDL;
3292 return false;
3293 }
3294
3295 sqlOk = updateDBVersion(softVersion, "0.006");
3296
3297 if(sqlOk)
3298 {
3299 //qDebug() << "DataBase::updateTo006: - DB Updated" << QT_ENDL;
3300 sqlOk = recreatePropModes();
3301
3302 if(sqlOk)
3303 {
3304 //qDebug() << "DataBase::updateTo006: - recreatePropModes OK" << QT_ENDL;
3305 sqlOk = updateTableLog(6); // We copy the log into logtemp
3306 }
3307 else
3308 {
3309 //qDebug() << "DataBase::updateTo006: - recreatePropModes NOK" << QT_ENDL;
3310 ErrorUpdating = true;
3311 IAmIn006 = false;
3312 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(1)" << QT_ENDL;
3313 return false;
3314 }
3315
3316 sqlOk = createTableBand(false); // We create the bandTemp
3317 if (sqlOk)
3318 {
3319 //qDebug() << "DataBase::updateTo006: - createTableBand OK" << QT_ENDL;
3320 }
3321 else
3322 {
3323 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(2)" << QT_ENDL;
3324 ErrorUpdating = true;
3325 //return false;
3326 }
3327
3328 sqlOk = populateTableBand(false); // Populate the bandTemp
3329 if (sqlOk)
3330 {
3331 //qDebug() << "DataBase::updateTo006: - populateTableBand OK" << QT_ENDL;
3332 }
3333 else
3334 {
3335 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(3)" << QT_ENDL;
3336 ErrorUpdating = true;
3337 }
3338
3339 sqlOk = updateBandIdTableLogToNewOnes();
3340 if (sqlOk)
3341 {
3342 //qDebug() << "DataBase::updateTo006: - updateBandIdTableLogToNewOnes OK" << QT_ENDL;
3343 }
3344 else
3345 {
3346 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(4)" << QT_ENDL;
3347 ErrorUpdating = true;
3348 }
3349
3350 sqlOk = updateBandIdTableAward(1); // DXCC
3351 if (sqlOk)
3352 {
3353 //qDebug() << "DataBase::updateTo006: - updateBandIdTableAward 1 OK" << QT_ENDL;
3354 }
3355 else
3356 {
3357 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(5)" << QT_ENDL;
3358 ErrorUpdating = true;
3359 }
3360
3361 sqlOk = updateBandIdTableAward(2); // WAZ
3362 if (sqlOk)
3363 {
3364 //qDebug() << "DataBase::updateTo006: - updateBandIdTableAward 2 OK" << QT_ENDL;
3365 }
3366 else
3367 {
3368 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(6)" << QT_ENDL;
3369 ErrorUpdating = true;
3370 }
3371
3372
3373 if (execQuery(Q_FUNC_INFO, "DROP TABLE band"))
3374 {
3375 if (execQuery(Q_FUNC_INFO, "ALTER TABLE bandtemp RENAME TO band"))
3376 {
3377 //qDebug() << "DataBase::updateTo006 - bandtemp renamed" << QT_ENDL;
3378 }
3379 else
3380 {
3381 //qDebug() << "DataBase::updateTo006 - ERROR - bandtemp not renamed" << QT_ENDL;
3382 ErrorUpdating = true;
3383 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(7)" << QT_ENDL;
3384 }
3385 }
3386 else
3387 {
3388 //qDebug() << "DataBase::updateTo006 - ERROR - bandtemp not dropped" << QT_ENDL;
3389 ErrorUpdating = true;
3390 IAmIn006 = false;
3391 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(8)" << QT_ENDL;
3392 ErrorUpdating = true;
3393 }
3394
3395 sqlOk = updateTheModeTableAndSyncLog();
3396 if (sqlOk)
3397 {
3398 //qDebug() << "DataBase::updateTo006: - updateTheModeTableAndSyncLog OK" << QT_ENDL;
3399 }
3400 else
3401 {
3402 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(9)" << QT_ENDL;
3403 ErrorUpdating = true;
3404 }
3405
3406 sqlOk = createTableClubLogStatus();
3407 if (sqlOk)
3408 {
3409 //qDebug() << "DataBase::updateTo006: - createTableClubLogStatus OK" << QT_ENDL;
3410 sqlOk = populateTableClubLogStatus();
3411 if (sqlOk)
3412 {
3413 //qDebug() << "DataBase::updateTo006: - populateTableClubLogStatus OK" << QT_ENDL;
3414 }
3415 else
3416 {
3417 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(10)" << QT_ENDL;
3418 ErrorUpdating = true;
3419 }
3420 }
3421 else
3422 {
3423 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(11)" << QT_ENDL;
3424 ErrorUpdating = true;
3425 }
3426 }
3427 else
3428 {// Version not updated
3429 //qDebug() << "DataBase::updateTo006: - DB NOT Updated" << QT_ENDL;
3430 ErrorUpdating = true;
3431 IAmIn006 = false;
3432 //qDebug() << "DataBase::updateTo006: UPDATED NOK!(12)" << QT_ENDL;
3433 ErrorUpdating = true;
3434 }
3435 //qDebug() << "DataBase::updateTo006: - IAmIn006 = TRUE" << QT_ENDL;
3436 IAmIn006 = true;
3437 }
3438 //DO ALL THE TASKS TO BE IN 0.006 from 0.005 HERE and set ErrorUpdating if it is not possible.
3439 //qDebug() << "DataBase::updateTo006 - I am in 006 " << QT_ENDL;
3440 //qDebug() << "DataBase::updateTo006 - END " << QT_ENDL;
3441 //qDebug() << "DataBase::updateTo006: UPDATED OK!" << QT_ENDL;
3442 if (!IAmIn006)
3443 {
3444 // emit debugLog(Q_FUNC_INFO, "2", 7);
3445 }
3446 return IAmIn006;
3447 }
3448
updateTableLog(const int _v)3449 bool DataBase::updateTableLog(const int _v)
3450 {
3451 //qDebug() << "DataBase::updateTableLog " << QT_ENDL;
3452 createTableLog(false);
3453 QString queryString;
3454 switch (_v)
3455 {
3456 case 6: // If 6, we copy in logtemp the full data coming from the old log. This way, the structure of
3457 // the log table is updated without any data loss.
3458 queryString = QString ("INSERT INTO logtemp (qso_date, call, rst_sent, rst_rcvd, bandid, modeid, srx, stx, points, multiplier, 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, transmiterid, marked, lognumber) SELECT qso_date, call, rst_sent, rst_rcvd, bandid, modeid, srx, stx, points, multiplier, 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, transmiterid, marked, lognumber FROM log");
3459 break;
3460 default:
3461 //qDebug() << "DataBase::updateTableLog FALSE END" << QT_ENDL;
3462 return false;
3463 //break;
3464 }
3465
3466 if (execQuery(Q_FUNC_INFO, queryString))
3467 {
3468 //qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Query executed" << QT_ENDL;
3469 queryString = "DROP TABLE log";
3470 if (execQuery(Q_FUNC_INFO, queryString))
3471 {
3472 //qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Table log dropped" << QT_ENDL;
3473
3474 queryString = "ALTER TABLE logtemp RENAME TO log" ;
3475 if (execQuery(Q_FUNC_INFO, queryString))
3476 {
3477 //qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - tmp renamed - END" << QT_ENDL;
3478 return true;
3479 }
3480 else
3481 {
3482 //qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Renaming failed" << QT_ENDL;
3483 }
3484 }
3485 else
3486 {
3487 //qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - Table log Not dropped" << QT_ENDL;
3488 }
3489 }
3490 else
3491 {
3492 //qDebug() << "DataBase::updateTableLog: " << QString::number(_v) << " - query failed" << QT_ENDL;
3493 }
3494 //qDebug() << "DataBase::updateTableLog END" << QT_ENDL;
3495 return false;
3496 }
3497
3498
createTableClubLogStatus()3499 bool DataBase::createTableClubLogStatus()
3500 {
3501 //qDebug() << "createTableClubLogStatus" << QT_ENDL;
3502
3503 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists clublog_status");
3504 QString queryString = QString("CREATE TABLE clublog_status ("
3505 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
3506 "shortname VARCHAR(1) NOT NULL, "
3507 "name VARCHAR(15) NOT NULL)");
3508
3509 return execQuery(Q_FUNC_INFO, queryString);
3510 }
3511
populateTableClubLogStatus()3512 bool DataBase::populateTableClubLogStatus()
3513 {
3514 //qDebug() << "populateTableClubLogStatus" << QT_ENDL;
3515
3516 QString queryString = "INSERT INTO clublog_status (shortname, name) VALUES ('Y', 'Uploaded')";
3517
3518
3519 if (execQuery(Q_FUNC_INFO, queryString))
3520 {
3521 queryString = "INSERT INTO clublog_status (shortname, name) VALUES ('N', 'Do not upload')";
3522 if (execQuery(Q_FUNC_INFO, queryString))
3523 {
3524 queryString = "INSERT INTO clublog_status (shortname, name) VALUES ('M', 'Modified')";
3525 //qDebug() << "populateTableClubLogStatus END" << QT_ENDL;
3526 return execQuery(Q_FUNC_INFO, queryString);
3527 }
3528 }
3529 //qDebug() << "populateTableClubLogStatus FALSE END" << QT_ENDL;
3530 return false;
3531 }
3532
updateTableEntity()3533 bool DataBase::updateTableEntity()
3534 {
3535 //qDebug() << "DataBase::updateTableEntity" << QT_ENDL;
3536 bool result = false;
3537 QString stringQuery;
3538 bool sqlOk;
3539
3540 result = createTableEntity(false); // Now we have a temp entity table with the correct format
3541 if (result)
3542 {
3543 //qDebug() << "DataBase::updateTableEntity: Table entitytemp created!" << QT_ENDL;
3544 // Now we need to move all the data from the old to the temp entity table.
3545
3546 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");
3547
3548 sqlOk = execQuery(Q_FUNC_INFO, stringQuery);
3549
3550 if (sqlOk)
3551 {
3552 //qDebug() << "DataBase::updateTableEntity: Data copied from entity to entitytemp!" << QT_ENDL;
3553 stringQuery = "DROP TABLE entity";
3554 if (execQuery(Q_FUNC_INFO, stringQuery))
3555 {
3556 //qDebug() << "DataBase::updateTableEntity: Table entity DELETED" << QT_ENDL;
3557 stringQuery = "ALTER TABLE entitytemp RENAME TO entity";
3558 return execQuery(Q_FUNC_INFO, stringQuery);
3559 }
3560 else
3561 {
3562 return false;
3563 }
3564 }
3565 else
3566 {
3567 //qDebug() << "DataBase::updateTableEntity: Data NOT copied from entity to entitytemp!" << QT_ENDL;
3568 //TODO: If it fails, we should manage errors...
3569 return false;
3570 }
3571 }
3572 else
3573 {
3574 //qDebug() << "DataBase::updateTableEntity: Table entitytemp NOT created!" << QT_ENDL;
3575 return false;
3576 }
3577
3578 //return false;
3579 }
3580
updateTableLogs()3581 bool DataBase::updateTableLogs()
3582 {
3583 //qDebug() << "DataBase::updateTableLogs" << QT_ENDL;
3584 bool result = false;
3585 QString stringQuery;
3586 bool sqlOk;
3587
3588 result = createTableLogs(false); // Now we have a temp entity table with the correct format
3589
3590 if (result)
3591 {
3592 //qDebug() << "DataBase::updateTableLogs: Table logstemp created!" << QT_ENDL;
3593 // Now we need to move all the data from the old to the temp logs table.
3594
3595 stringQuery = QString("INSERT INTO logstemp (logdate, stationcall, comment, logtype, logtypen) SELECT logdate, stationcall, comment, logtype, logtypen FROM logs");
3596
3597 sqlOk = execQuery(Q_FUNC_INFO, stringQuery);
3598
3599 if (sqlOk)
3600 {
3601 //qDebug() << "DataBase::updateTableLogs: data copied" << QT_ENDL;
3602
3603 stringQuery = "DROP TABLE logs";
3604 if (execQuery(Q_FUNC_INFO, stringQuery))
3605 {
3606 //qDebug() << "DataBase::updateTableLogs: Table logs DELETED" << QT_ENDL;
3607 stringQuery = "ALTER TABLE logstemp RENAME TO logs";
3608 return execQuery(Q_FUNC_INFO, stringQuery);
3609 }
3610 else
3611 {
3612 //qDebug() << "DataBase::updateTableLogs: Table logs NOT DELETED" << QT_ENDL;
3613 return false;
3614 }
3615 }
3616 else
3617 {
3618 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3619 //qDebug() << "DataBase::updateTableLogs: data NOT copied" << QT_ENDL;
3620 //TODO: If it fails, we should manage errors...
3621 return false;
3622 }
3623 }
3624 else
3625 {
3626 //qDebug() << "DataBase::updateTableLogs: Table logstemp NOT created!" << QT_ENDL;
3627 return false;
3628 }
3629
3630 //qDebug() << "DataBase::updateTableLogs: END" << QT_ENDL;
3631 //return false;
3632 }
3633
updateModeIdFromSubModeId()3634 bool DataBase::updateModeIdFromSubModeId()
3635 {// Updates the log with the new mode IDs in each QSO:
3636 // STEP-1: Get the modeid and QSOid from the log
3637 // STEP-2: uses the modeid to get the name of the mode in the mode table (the old one)
3638 // STEP-3: uses the name of the mode in the modetemp table (the new one) to get the new ID
3639 // STEP-4: Updates the new ID in the QSO in the log
3640 //TODO: Optimize this function
3641
3642 //qDebug() << "DataBase::updateModeIdFromSubModeId: " << QT_ENDL;
3643 bool cancel = false;
3644 bool alreadyCancelled = false;
3645 QString modetxt = QString();
3646 QString sq = QString();
3647 bool sqlOk2 = false;
3648 bool sqlOk3 = false;
3649 int modeFound = -1;
3650 int id = -1;
3651
3652 int qsos;
3653 int i = 0;
3654 QString aux;
3655 QSqlQuery query, query2;
3656 bool sqlOk = query.exec("SELECT COUNT (*) FROM log");
3657
3658 if (sqlOk)
3659 {
3660 //QSqlDatabase::database().commit();
3661 query.next();
3662 qsos = (query.value(0)).toInt();
3663 query.finish();
3664 }
3665 else
3666 {
3667 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3668 query.finish();
3669 //qDebug() << "DataBase::updateModeIdFromSubModeId: FALSE END" << QT_ENDL;
3670 return false;
3671 }
3672
3673 int step = util->getProgresStepForDialog(qsos);
3674
3675 QProgressDialog progress(QObject::tr("Updating mode information..."), QObject::tr("Abort updating"), 0, qsos);
3676 progress.setMaximum(qsos);
3677 progress.setWindowModality(Qt::WindowModal);
3678
3679 sqlOk = query.exec("SELECT modeid, id FROM log ORDER BY modeid"); // STEP-1
3680
3681 if (sqlOk)
3682 {
3683 while (query.next())
3684 {
3685 modetxt = QString();
3686 modeFound = -1;
3687
3688 if (query.isValid())
3689 {
3690 i++;
3691
3692 if (( (i % step )== 0) )
3693 { // To update the speed I will only show the progress once each X QSOs
3694 aux = QObject::tr("Updating mode information...") + "\n" + QObject::tr("QSO: ") + QString::number(i) + "/" + QString::number(qsos);
3695 progress.setLabelText(aux);
3696 progress.setValue(i);
3697 }
3698
3699 modeFound = (query.value(0)).toInt();
3700 id = (query.value(1)).toInt();
3701 //qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-1) modeFound (numb): " << QString::number(modeFound) << QT_ENDL;
3702
3703 modetxt = getModeNameFromNumber(modeFound, false); //STEP-2
3704
3705 //qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-2) mode found (txt): " << modetxt << QT_ENDL;
3706
3707 //TODO The following query can be executed in: getModeIdFromSubMode()
3708
3709 sq = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(modetxt); // STEP-3
3710 sqlOk2 = query2.exec(sq);
3711
3712 if (sqlOk2)
3713 {
3714 //qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-3) sqlOK2 TRUE" << QT_ENDL;
3715 if (query2.next())
3716 {
3717 if (query2.isValid())
3718 {
3719 modeFound = query2.value(0).toInt();
3720 query2.finish();
3721 sq = QString ("UPDATE log SET modeid='%1' WHERE id='%2'").arg(modeFound).arg(id); // STEP-4
3722 sqlOk3 = execQuery(Q_FUNC_INFO, sq);
3723
3724 if (sqlOk3)
3725 {
3726 //qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-4) ID: " << QString::number(id) << " updated to: " << QString::number(modeFound) <<"/"<< modetxt << QT_ENDL;
3727 }
3728 else
3729 {
3730 //queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
3731 //qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-4) ID: " << QString::number(id) << " NOT updated-2" << QT_ENDL;
3732 }
3733 }
3734 else
3735 {
3736 query2.finish();
3737 //qDebug() << "DataBase::updateModeIdFromSubModeId: (STEP-3) query2 not valid " << QT_ENDL;
3738 }
3739 }
3740 else
3741 {
3742 //qDebug() << "DataBase::updateModeIdFromSubModeId: query2 not next " << QT_ENDL;
3743 }
3744 }
3745 else
3746 {
3747 queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
3748 query2.finish();
3749 //qDebug() << "DataBase::updateModeIdFromSubModeId: ID: " << QString::number(id) << " NOT updated-1" << QT_ENDL;
3750 }
3751 }
3752
3753 if ( progress.wasCanceled() )
3754 {
3755 if (!alreadyCancelled)
3756 {
3757 alreadyCancelled = true;
3758
3759 QMessageBox msgBox;
3760 msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
3761 aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
3762 msgBox.setText(aux);
3763 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
3764 msgBox.setDefaultButton(QMessageBox::No);
3765 int ret = msgBox.exec();
3766 switch (ret) {
3767 case QMessageBox::Yes:
3768 // Yes was clicked
3769 cancel = true;
3770 break;
3771
3772 case QMessageBox::No:
3773 // No Save was clicked
3774 cancel = false;
3775 progress.setCancelButton(nullptr);
3776 break;
3777 default:
3778 // should never be reached
3779 cancel = false;
3780 break;
3781 }
3782 }
3783 }
3784 }
3785 query.finish();
3786 if (cancel && (!alreadyCancelled))
3787 {
3788 //qDebug() << "DataBase::updateModeIdFromSubModeId: FALSE END 2" << QT_ENDL;
3789 query.finish();
3790 return false;
3791 }
3792
3793 //qDebug() << "DataBase::updateModeIdFromSubModeId: END" << QT_ENDL;
3794
3795 query.finish();
3796 return true;
3797 }
3798 else
3799 {
3800 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3801 //qDebug() << "DataBase::updateModeIdFromSubModeId: FALSE END 3" << QT_ENDL;
3802 query.finish();
3803 return false;
3804 }
3805 //qDebug() << "DataBase::updateModeIdFromSubModeId: CHECK IF this is seen - END" << QT_ENDL;
3806 //query.finish();
3807 //return false;
3808 }
3809
3810
updateBandIdTableLogToNewOnes()3811 bool DataBase::updateBandIdTableLogToNewOnes()
3812 {
3813 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: " << QT_ENDL;
3814
3815 QString bandtxt = QString();
3816
3817 bool cancel = false;
3818 bool alreadyCancelled = false;
3819 //int errorCode = -1;
3820
3821 QString sq = QString();
3822 bool sqlOk2 = false;
3823 bool sqlOk3 = false;
3824 int bandFound = -1;
3825 int id = -1;
3826 int qsos;
3827 int i = 0;
3828 QString aux;
3829 QSqlQuery query, query2;
3830 bool sqlOk = query.exec("SELECT COUNT (*) FROM log");
3831
3832 if (sqlOk)
3833 {
3834 query.next();
3835 qsos = (query.value(0)).toInt();
3836 query.finish();
3837 }
3838 else
3839 {
3840 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3841 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: FALSE END" << QT_ENDL;
3842 query.finish();
3843 return false;
3844 }
3845
3846 int step = util->getProgresStepForDialog(qsos);
3847
3848 QProgressDialog progress(QObject::tr("Updating bands information..."), QObject::tr("Abort updating"), 0, qsos);
3849 progress.setMaximum(qsos);
3850 progress.setWindowModality(Qt::WindowModal);
3851
3852 sqlOk = query.exec("SELECT bandid, id FROM log ORDER BY bandid DESC");
3853
3854 if (sqlOk)
3855 {
3856 while (query.next() && (!cancel) )
3857 {
3858 bandtxt = QString();
3859 bandFound = -1;
3860
3861 if (query.isValid())
3862 {
3863 i++;
3864
3865 if (( (i % step )== 0) )
3866 { // To update the speed I will only show the progress once each X QSOs
3867 aux = QObject::tr("Updating bands information...") + "\n" + QObject::tr("QSO: ") + QString::number(i) + "/" + QString::number(qsos);
3868 progress.setLabelText(aux);
3869 progress.setValue(i);
3870 }
3871
3872
3873 bandFound = (query.value(0)).toInt();
3874 id = (query.value(1)).toInt();
3875 bandtxt = getBandNameFromNumber(bandFound);
3876
3877 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: band found: " << bandtxt << QT_ENDL;
3878
3879 sq = QString("SELECT id FROM bandtemp WHERE name='%1'").arg(bandtxt);
3880 sqlOk2 = query2.exec(sq);
3881
3882 if (sqlOk2)
3883 {
3884 if (query2.next())
3885 {
3886 if (query2.isValid())
3887 {
3888 bandFound = query2.value(0).toInt();
3889
3890 sq = QString ("UPDATE log SET bandid='%1' WHERE id='%2'").arg(bandFound).arg(id);
3891 query.finish();
3892 sqlOk3 = execQuery(Q_FUNC_INFO, sq);
3893 if (sqlOk3)
3894 {
3895 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt << QT_ENDL;
3896 }
3897 else
3898 {
3899 //queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
3900 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-2" << QT_ENDL;
3901 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes - QSOs not updated to main log" << QT_ENDL;
3902 }
3903 }
3904 else
3905 {
3906 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: query2 not valid " << QT_ENDL;
3907 }
3908 }
3909 else
3910 {
3911 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: query2 not next " << QT_ENDL;
3912 }
3913 query2.finish();
3914 }
3915 else
3916 {
3917 queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
3918 query2.finish();
3919 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-1" << QT_ENDL;
3920 }
3921 }
3922
3923 if ( progress.wasCanceled() )
3924 {
3925 if (!alreadyCancelled)
3926 {
3927 alreadyCancelled = true;
3928
3929 QMessageBox msgBox;
3930 msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
3931 aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
3932 msgBox.setText(aux);
3933 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
3934 msgBox.setDefaultButton(QMessageBox::No);
3935 int ret = msgBox.exec();
3936 switch (ret) {
3937 case QMessageBox::Yes:
3938 // Yes was clicked
3939 cancel = true;
3940 break;
3941
3942 case QMessageBox::No:
3943 // No Save was clicked
3944 cancel = false;
3945 progress.setCancelButton(nullptr);
3946 break;
3947 default:
3948 // should never be reached
3949 cancel = false;
3950 break;
3951 }
3952 }
3953 }
3954 }
3955 query.finish();
3956 if (cancel && (!alreadyCancelled))
3957 {
3958 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: FALSE END 2" << QT_ENDL;
3959 return false;
3960 }
3961 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: END OK" << QT_ENDL;
3962 return true;
3963 }
3964 else
3965 {
3966 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
3967 query.finish();
3968 //qDebug() << "DataBase::updateBandIdTableLogToNewOnes: FALSE END 3" << QT_ENDL;
3969 return false;
3970 }
3971 }
3972
updateBandIdTableAward(const int _db)3973 bool DataBase::updateBandIdTableAward(const int _db)
3974 {
3975 //qDebug() << "DataBase::updateBandIdTableAward: " << QT_ENDL;
3976
3977 QString table = QString();
3978 QString field = QString();
3979 QString awardSelected = QString();
3980
3981 switch (_db) {
3982 case 1: //
3983 table = "awarddxcc";
3984 field = "band";
3985 awardSelected = "DXCC";
3986 break;
3987
3988 case 2:
3989 table = "awardwaz";
3990 field = "band";
3991 awardSelected = "WAZ";
3992 break;
3993 default:
3994 //qDebug() << "DataBase::updateBandIdTableAward: FALSE END" << QT_ENDL;
3995 return false;
3996 //break;
3997 }
3998
3999 QString bandtxt = QString();
4000
4001 bool cancel = false;
4002 bool alreadyCancelled = false;
4003 //int errorCode = -1;
4004
4005
4006 QString sq = QString();
4007 bool sqlOk2 = false;
4008 bool sqlOk3 = false;
4009 int bandFound = -1;
4010 int id = -1;
4011 int qsos;
4012 int i = 0;
4013 QString aux;
4014 QSqlQuery query, query2;
4015
4016
4017 sq = QString("SELECT COUNT (*) FROM %1").arg(table);
4018
4019 bool sqlOk = query.exec(sq);
4020
4021 if (sqlOk)
4022 {
4023 query.next();
4024 qsos = (query.value(0)).toInt();
4025 query.finish();
4026 }
4027 else
4028 {
4029 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4030 query.finish();
4031 //qDebug() << "DataBase::updateBandIdTableAward: FALSE END-2" << QT_ENDL;
4032 return false;
4033 }
4034
4035 int step = util->getProgresStepForDialog(qsos);
4036 QString progressmsg = QString(QObject::tr("Updating bands information in %1 status...")).arg(awardSelected);
4037
4038 QProgressDialog progress(progressmsg, QObject::tr("Abort updating"), 0, qsos);
4039 progress.setMaximum(qsos);
4040 progress.setWindowModality(Qt::WindowModal);
4041
4042
4043 sq = QString("SELECT %1, id FROM %2 ORDER BY %3 DESC").arg(field).arg(table).arg(field);
4044
4045 sqlOk = query.exec(sq);
4046
4047 if (sqlOk)
4048 {
4049 while (query.next() && (!cancel) )
4050 {
4051 bandtxt = QString();
4052 bandFound = -1;
4053
4054 if (query.isValid())
4055 {
4056 i++;
4057
4058 if (( (i % step )== 0) )
4059 { // To update the speed I will only show the progress once each X QSOs
4060 aux = QObject::tr("Updating bands information...") + "\n" + QObject::tr("Progress: ") + QString::number(i) + "/" + QString::number(qsos);
4061 progress.setLabelText(aux);
4062 progress.setValue(i);
4063 }
4064
4065
4066 bandFound = (query.value(0)).toInt();
4067 id = (query.value(1)).toInt();
4068 bandtxt = getBandNameFromNumber(bandFound);
4069
4070 //qDebug() << "DataBase::updateBandIdTableAward: band found: " << bandtxt << QT_ENDL;
4071
4072 sq = QString("SELECT id FROM bandtemp WHERE name='%1'").arg(bandtxt);
4073 sqlOk2 = query2.exec(sq);
4074
4075 if (sqlOk2)
4076 {
4077 if (query2.next())
4078 {
4079 if (query2.isValid())
4080 {
4081 bandFound = query2.value(0).toInt();
4082 query2.finish();
4083 sq = QString ("UPDATE %1 SET %2='%3' WHERE id='%4'").arg(table).arg(field).arg(bandFound).arg(id);
4084
4085 sqlOk3 = execQuery(Q_FUNC_INFO, sq);
4086 if (sqlOk3)
4087 {
4088 //qDebug() << "DataBase::updateBandIdTableAward: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt << QT_ENDL;
4089 }
4090 else
4091 {
4092 //queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
4093 //qDebug() << "DataBase::updateBandIdTableAward: ID: " << QString::number(id) << " NOT updated-2" << QT_ENDL;
4094
4095 //qDebug() << "DataBase::updateBandIdTableAward - QSOs not updated to main log" << QT_ENDL;
4096 }
4097 }
4098 else
4099 {
4100 //qDebug() << "DataBase::updateBandIdTableAward: query2 not valid " << QT_ENDL;
4101 }
4102 }
4103 else
4104 {
4105 //qDebug() << "DataBase::updateBandIdTableAward: query2 not next " << QT_ENDL;
4106 }
4107 query2.finish();
4108 }
4109 else
4110 {
4111 queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
4112 query2.finish();
4113 //qDebug() << "DataBase::updateBandIdTableAward: ID: " << QString::number(id) << " NOT updated-1" << QT_ENDL;
4114 }
4115 }
4116 if ( progress.wasCanceled() )
4117 {
4118 if (!alreadyCancelled)
4119 {
4120 alreadyCancelled = true;
4121
4122 QMessageBox msgBox;
4123 msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
4124 aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
4125 msgBox.setText(aux);
4126 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
4127 msgBox.setDefaultButton(QMessageBox::No);
4128 int ret = msgBox.exec();
4129 switch (ret) {
4130 case QMessageBox::Yes:
4131 // Yes was clicked
4132 cancel = true;
4133 break;
4134
4135 case QMessageBox::No:
4136 // No Save was clicked
4137 cancel = false;
4138 progress.setCancelButton(nullptr);
4139 break;
4140 default:
4141 // should never be reached
4142 cancel = false;
4143 break;
4144 }
4145 }
4146 }
4147 }
4148 if (cancel && (!alreadyCancelled))
4149 {
4150 //qDebug() << "DataBase::updateBandIdTableAward: FALSE END-3" << QT_ENDL;
4151 query.finish();
4152 return false;
4153 }
4154 //qDebug() << "DataBase::updateBandIdTableAward: END OK" << QT_ENDL;
4155 query.finish();
4156 return true;
4157 }
4158 else
4159 {
4160 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4161 //qDebug() << "DataBase::updateBandIdTableAward: FALSE END-4" << QT_ENDL;
4162 query.finish();
4163 return false;
4164 }
4165 //qDebug() << "DataBase::updateBandIdTableAward: CHECK IF SEEN END" << QT_ENDL;
4166 //query.finish();
4167 //return false;
4168 }
4169
updateModeIdTableAward(const int _db)4170 bool DataBase::updateModeIdTableAward(const int _db)
4171 {
4172 //qDebug() << "DataBase::updateModeIdTableAward: " << QString::number(_db) << QT_ENDL;
4173
4174 QString table = QString();
4175 QString field = "mode";
4176 QString awardSelected = QString();
4177
4178 switch (_db) {
4179 case 1: //
4180 table = "awarddxcc";
4181 awardSelected = "DXCC";
4182 break;
4183
4184 case 2:
4185 table = "awardwaz";
4186 awardSelected = "WAZ";
4187 break;
4188 default:
4189 //qDebug() << "DataBase::updateModeIdTableAward: FALSE END" << QT_ENDL;
4190 return false;
4191 //break;
4192 }
4193
4194 QString bandtxt = QString();
4195
4196 bool cancel = false;
4197 bool alreadyCancelled = false;
4198 //int errorCode = -1;
4199
4200
4201 QString sq = QString();
4202 bool sqlOk2 = false;
4203 bool sqlOk3 = false;
4204 int bandFound = -1;
4205 int id = -1;
4206 int qsos;
4207 int i = 0;
4208 QString aux;
4209 QSqlQuery query, query2;
4210
4211
4212 sq = QString("SELECT COUNT (*) FROM %1").arg(table);
4213
4214 bool sqlOk = query.exec(sq);
4215
4216 if (sqlOk)
4217 {
4218 query.next();
4219 qsos = (query.value(0)).toInt();
4220 query.finish();
4221 }
4222 else
4223 {
4224 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4225 //qDebug() << "DataBase::updateModeIdTableAward: FALSE END-2" << QT_ENDL;
4226 query.finish();
4227 return false;
4228 }
4229
4230 int step = util->getProgresStepForDialog(qsos);
4231 QString progressmsg = QString(QObject::tr("Updating mode information in %1 status...")).arg(awardSelected);
4232
4233 QProgressDialog progress(progressmsg, QObject::tr("Abort updating"), 0, qsos);
4234 progress.setMaximum(qsos);
4235 progress.setWindowModality(Qt::WindowModal);
4236
4237
4238 sq = QString("SELECT %1, id FROM %2 ORDER BY %3 DESC").arg(field).arg(table).arg(field);
4239
4240 sqlOk = query.exec(sq);
4241
4242 //qDebug() << "DataBase::updateModeIdTableAward (query): " << query.lastQuery() << QT_ENDL;
4243 if (sqlOk)
4244 {
4245 while (query.next() && (!cancel) )
4246 {
4247 bandtxt = QString();
4248 bandFound = -1;
4249
4250 if (query.isValid())
4251 {
4252 i++;
4253
4254 if (( (i % step )== 0) )
4255 { // To update the speed I will only show the progress once each X QSOs
4256 aux = QObject::tr("Updating bands information...") + "\n" + QObject::tr("Progress: ") + QString::number(i) + "/" + QString::number(qsos);
4257 progress.setLabelText(aux);
4258 progress.setValue(i);
4259 }
4260
4261
4262 bandFound = (query.value(0)).toInt();
4263 id = (query.value(1)).toInt();
4264 //qDebug() << "DataBase::updateModeIdTableAward: bandfound: " << QString::number(bandFound) << QT_ENDL;
4265 //qDebug() << "DataBase::updateModeIdTableAward: id: " << QString::number(id) << QT_ENDL;
4266
4267 bandtxt = getSubModeNameFromNumber(bandFound, true);
4268
4269 //qDebug() << "DataBase::updateModeIdTableAward: mode found: " << bandtxt << "/" << QString::number(bandFound) << QT_ENDL;
4270
4271 sq = QString("SELECT id FROM modetemp WHERE submode='%1'").arg(bandtxt);
4272 sqlOk2 = query2.exec(sq);
4273
4274
4275 //qDebug() << "DataBase::updateModeIdTableAward (query2): " << query2.lastQuery() << QT_ENDL;
4276 if (sqlOk2)
4277 {
4278 if (query2.next())
4279 {
4280 if (query2.isValid())
4281 {
4282 bandFound = query2.value(0).toInt();
4283 query2.finish();
4284
4285 sq = QString ("UPDATE %1 SET %2='%3' WHERE id='%4'").arg(table).arg(field).arg(bandFound).arg(id);
4286 sqlOk3 = execQuery(Q_FUNC_INFO, sq);
4287
4288 if (sqlOk3)
4289 {
4290 //qDebug() << "DataBase::updateModeIdTableAward: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt << QT_ENDL;
4291 }
4292 else
4293 {
4294 //queryErrorManagement(Q_FUNC_INFO, query3.lastError().databaseText(), query3.lastError().nativeErrorCode(), query3.lastQuery());
4295 //qDebug() << "DataBase::updateModeIdTableAward: ID: " << QString::number(id) << " NOT updated-2" << QT_ENDL;
4296
4297 //qDebug() << "DataBase::updateModeIdTableAward - QSOs not updated to main log" << QT_ENDL;
4298 }
4299 }
4300 else
4301 {
4302 //qDebug() << "DataBase::updateModeIdTableAward: query2 not valid " << QT_ENDL;
4303 }
4304 }
4305 else
4306 {
4307 //qDebug() << "DataBase::updateModeIdTableAward: query2 not next " << QT_ENDL;
4308 }
4309 }
4310 else
4311 {
4312 queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
4313 query2.finish();
4314 //qDebug() << "DataBase::updateModeIdTableAward: ID: " << QString::number(id) << " NOT updated-1" << QT_ENDL;
4315 }
4316 }
4317
4318 if ( progress.wasCanceled() )
4319 {
4320 if (!alreadyCancelled)
4321 {
4322 alreadyCancelled = true;
4323
4324 QMessageBox msgBox;
4325 msgBox.setWindowTitle(QObject::tr("KLog - DB update"));
4326 aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
4327 msgBox.setText(aux);
4328 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
4329 msgBox.setDefaultButton(QMessageBox::No);
4330 int ret = msgBox.exec();
4331 switch (ret) {
4332 case QMessageBox::Yes:
4333 // Yes was clicked
4334 cancel = true;
4335 break;
4336
4337 case QMessageBox::No:
4338 // No Save was clicked
4339 cancel = false;
4340 progress.setCancelButton(nullptr);
4341 break;
4342 default:
4343 // should never be reached
4344 cancel = false;
4345 break;
4346 }
4347 }
4348 }
4349 }
4350 if (cancel && (!alreadyCancelled))
4351 {
4352 //qDebug() << "DataBase::updateModeIdTableAward: FALSE END-3" << QT_ENDL;
4353 query.finish();
4354 return false;
4355 }
4356 //qDebug() << "DataBase::updateModeIdTableAward: END OK" << QT_ENDL;
4357 query.finish();
4358 return true;
4359 }
4360 else
4361 {
4362 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4363 //qDebug() << "DataBase::updateModeIdTableAward: FALSE END-4" << QT_ENDL;
4364 query.finish();
4365 return false;
4366 }
4367 //qDebug() << "DataBase::updateModeIdTableAward: Checkif seen END" << QT_ENDL;
4368 //query.finish();
4369 //return false;
4370 }
4371
4372 /*
4373
4374 bool DataBase::updateModeIdTableLogToNewOnes()
4375 {
4376 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: " << QT_ENDL;
4377
4378 QString bandtxt = QString();
4379
4380 bool cancel = false;
4381 bool alreadyCancelled = false;
4382 int errorCode = -1;
4383
4384 QString sq = QString();
4385 bool sqlOk2 = false;
4386 bool sqlOk3 = false;
4387 int bandFound = -1;
4388 int id = -1;
4389 int qsos;
4390 int i = 0;
4391 QString aux;
4392 QSqlQuery query, query2, query3;
4393 bool sqlOk = query.exec("SELECT COUNT (*) FROM log");
4394 if (sqlOk)
4395 {
4396 query.next();
4397 qsos = (query.value(0)).toInt();
4398 }
4399 else
4400 {
4401 return false;
4402 }
4403
4404 int step = util->getProgresStepForDialog(qsos);
4405
4406 QProgressDialog progress(QObject::tr("Updating mode information..."), QObject::tr("Abort updating"), 0, qsos);
4407 progress.setMaximum(qsos);
4408 progress.setWindowModality(Qt::WindowModal);
4409
4410 sqlOk = query.exec("SELECT modeid, id FROM log ORDER BY bandid DESC");
4411 if (sqlOk)
4412 {
4413 while (query.next() && (!cancel) )
4414 {
4415 bandtxt = QString();
4416 bandFound = -1;
4417
4418 if (query.isValid())
4419 {
4420 i++;
4421
4422 if (( (i % step )== 0) )
4423 { // To update the speed I will only show the progress once each X QSOs
4424 aux = QObject::tr("Updating mode information...\n QSO: ") + QString::number(i) + "/" + QString::number(qsos);
4425 progress.setLabelText(aux);
4426 progress.setValue(i);
4427 }
4428
4429
4430 bandFound = (query.value(0)).toInt();
4431 id = (query.value(1)).toInt();
4432 bandtxt = getModeNameFromNumber(bandFound, false);
4433
4434 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: mode found: " << bandtxt << QT_ENDL;
4435
4436 sq = QString("SELECT id FROM modetemp WHERE name='%1'").arg(bandtxt);
4437 sqlOk2 = query2.exec(sq);
4438 if (sqlOk2)
4439 {
4440 if (query2.next())
4441 {
4442 if (query2.isValid())
4443 {
4444 bandFound = query2.value(0).toInt();
4445
4446 sq = QString ("UPDATE log SET modeid='%1' WHERE id='%2'").arg(bandFound).arg(id);
4447 sqlOk3 = query3.exec(sq);
4448 if (sqlOk3)
4449 {
4450 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: ID: " << QString::number(id) << " updated to: " << QString::number(bandFound) <<"/"<< bandtxt << QT_ENDL;
4451 }
4452 else
4453 {
4454 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-2" << QT_ENDL;
4455 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes - QSOs not updated to main log" << QT_ENDL;
4456 errorCode = query3.lastError().nativeErrorCode();
4457 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes - query error: " << QString::number(errorCode) << QT_ENDL;
4458 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastQuery: " << query3.lastQuery() << QT_ENDL;
4459 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastError-data: " << query3.lastError().databaseText() << QT_ENDL;
4460 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastError-driver: " << query3.lastError().driverText() << QT_ENDL;
4461 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: LastError-n: " << QString::number(query3.lastError().nativeErrorCode() ) << QT_ENDL;
4462
4463 }
4464
4465 }
4466 else
4467 {
4468 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: query2 not valid " << QT_ENDL;
4469 }
4470 }
4471 else
4472 {
4473 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: query2 not next " << QT_ENDL;
4474 }
4475
4476 }
4477 else
4478 {
4479 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: ID: " << QString::number(id) << " NOT updated-1" << QT_ENDL;
4480 }
4481
4482 }
4483
4484 if ( progress.wasCanceled() )
4485 {
4486 if (alreadyCancelled)
4487 {
4488
4489 }
4490 else
4491 {
4492 alreadyCancelled = true;
4493
4494 QMessageBox msgBox;
4495 aux = QObject::tr("Canceling this update will cause data inconsistencies and possibly data loss. Do you still want to cancel?");
4496 msgBox.setText(aux);
4497 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
4498 msgBox.setDefaultButton(QMessageBox::No);
4499 int ret = msgBox.exec();
4500 switch (ret) {
4501 case QMessageBox::Yes:
4502 // Yes was clicked
4503 cancel = true;
4504 break;
4505
4506 case QMessageBox::No:
4507 // No Save was clicked
4508 cancel = false;
4509 progress.setCancelButton(0);
4510 break;
4511 default:
4512 // should never be reached
4513 cancel = false;
4514 break;
4515 }
4516 }
4517 }
4518
4519 }
4520 if (cancel && (!alreadyCancelled))
4521 {
4522 return false;
4523 }
4524 //qDebug() << "DataBase::updateModeIdTableLogToNewOnes: FINISHED OK" << QT_ENDL;
4525 return true;
4526 }
4527 else
4528 {
4529 return false;
4530 }
4531
4532 }
4533 */
4534
updateTo007()4535 bool DataBase::updateTo007()
4536 {// Updates the DB to 0.0.7
4537 //qDebug() << "DataBase::updateTo007: latestRead: " << getDBVersion() << QT_ENDL;
4538 bool IAmIn007 = false;
4539 bool IAmIn006 = false;
4540 bool ErrorUpdating = false;
4541 QString stringQuery = QString();
4542
4543 QSqlQuery query;
4544 latestReaded = getDBVersion().toFloat();
4545 bool sqlOk = false;
4546
4547 if (latestReaded >= 0.007f)
4548 {
4549 //qDebug() << "DataBase::updateTo007: - I am in 007" << QT_ENDL;
4550 return true;
4551 }
4552 else
4553 {
4554 //qDebug() << "DataBase::updateTo007: - I am not in 007" << QT_ENDL;
4555 IAmIn007 = false;
4556 }
4557
4558
4559 while (!IAmIn007 && !ErrorUpdating)
4560 {
4561 while (!IAmIn006 && !ErrorUpdating)
4562 {
4563 //qDebug() << "DataBase::updateTo007: - And I am not in 006" << QT_ENDL;
4564 IAmIn006 = updateTo006();
4565 }
4566 //qDebug() << "DataBase::updateTo007: - And I am in 006!!!!" << QT_ENDL;
4567 if (ErrorUpdating)
4568 {
4569 //qDebug() << "DataBase::updateTo007: NOK-1" << QT_ENDL;
4570 // emit debugLog(Q_FUNC_INFO, "1", 7);
4571
4572 return false;
4573 }
4574 sqlOk = updateDBVersion(softVersion, "0.007");
4575
4576 if (sqlOk)
4577 { // Version updated
4578 IAmIn007 = updateTableLog(6);
4579 }
4580 else
4581 { // Version not updated
4582 //qDebug() << "DataBase::updateTo007: NOK-2" << QT_ENDL;
4583 // emit debugLog(Q_FUNC_INFO, "2", 7);
4584
4585 return false;
4586 }
4587 //DO ALL THE TASKS TO BE IN 0.007 from 0.006 HERE and set ErrorUpdating if it is not possible.
4588 IAmIn007 = true;
4589 }
4590 //qDebug() << "DataBase::updateTo007: END" << QT_ENDL;
4591 if (!IAmIn007)
4592 {
4593 // emit debugLog(Q_FUNC_INFO, "3", 7);
4594 }
4595 return IAmIn007;
4596 }
4597
4598
4599
updateTo008()4600 bool DataBase::updateTo008()
4601 {// Updates the DB to 0.0.8
4602 //qDebug() << "DataBase::updateTo008: latestRead: " << getDBVersion() << QT_ENDL;
4603 bool IAmIn008 = false;
4604 bool IAmIn007 = false;
4605 bool ErrorUpdating = false;
4606
4607 latestReaded = getDBVersion().toFloat();
4608 if (latestReaded >= 0.008f)
4609 {
4610 //qDebug() << "DataBase::updateTo008: - I am in 008" << QT_ENDL;
4611 return true;
4612 }
4613 else
4614 {
4615 //qDebug() << "DataBase::updateTo008: - I am not in 008" << QT_ENDL;
4616 IAmIn008 = false;
4617 }
4618
4619
4620 while (!IAmIn008 && !ErrorUpdating)
4621 {
4622 while (!IAmIn007 && !ErrorUpdating)
4623 {
4624 //qDebug() << "DataBase::updateTo008: - And I am not in 007" << QT_ENDL;
4625 IAmIn007 = updateTo007();
4626 }
4627 //qDebug() << "DataBase::updateTo008: - I am in 007" << QT_ENDL;
4628 if (ErrorUpdating)
4629 {
4630 //qDebug() << "DataBase::updateTo008: - NOK-1" << QT_ENDL;
4631 // emit debugLog(Q_FUNC_INFO, "1", 7);
4632 return false;
4633 }
4634
4635 //DO ALL THE TASKS TO BE IN 0.008 from 0.007 HERE and set ErrorUpdating if it is not possible.
4636
4637 IAmIn008 = updateTheModeTableAndSyncLog();
4638 if (IAmIn008)
4639 {
4640 bool sqlOk = updateDBVersion(softVersion, "0.008");
4641 if (sqlOk)
4642 { // Version updated
4643 //qDebug() << "DataBase::updateTo008: - OK" << QT_ENDL;
4644 }
4645 else
4646 { // Version not updated
4647 //qDebug() << "DataBase::updateTo008: - NOK-3" << QT_ENDL;
4648 // emit debugLog(Q_FUNC_INFO, "2", 7);
4649 return false;
4650 }
4651 }
4652 else
4653 {
4654 //qDebug() << "DataBase::updateTo008: - NOK-2" << QT_ENDL;
4655 // emit debugLog(Q_FUNC_INFO, "3", 7);
4656 return false;
4657 }
4658 }
4659 //qDebug() << "DataBase::updateTo008: - END" << QT_ENDL;
4660 if (!IAmIn008)
4661 {/*emit debugLog(Q_FUNC_INFO, "4", 7);*/
4662 }
4663 return IAmIn008;
4664 }
4665
4666
updateTo009()4667 bool DataBase::updateTo009()
4668 {// Updates the DB to 0.0.9 - We add the Satellite tables
4669 //qDebug() << "DataBase::updateTo009: latestRead: " << getDBVersion() << QT_ENDL;
4670 bool IAmIn009 = false;
4671 bool IAmIn008 = false;
4672 bool ErrorUpdating = false;
4673
4674 //qDebug() << "DataBase::updateTo009: Checking:" << QString::number(latestReaded) << ":" << QString::number(0.009)<< QT_ENDL;
4675 latestReaded = getDBVersion().toFloat();
4676 if (latestReaded >= 0.009f)
4677 //if ((latestReaded = 0.009) || (latestReaded > 0.009))
4678 {
4679 //qDebug() << "DataBase::updateTo009: - I am in 009" << QT_ENDL;
4680 //IAmIn009 = true;
4681 return true;
4682 }
4683 else
4684 {
4685 //qDebug() << "DataBase::updateTo009: - I am not in 009 I am in: " << QString::number(latestReaded)<< QT_ENDL;
4686 IAmIn009 = false;
4687 }
4688 //qDebug() << "DataBase::updateTo009: compared latestRead: " << QString::number(latestReaded) << QT_ENDL;
4689 while (!IAmIn009 && !ErrorUpdating)
4690 {
4691 while (!IAmIn008 && !ErrorUpdating)
4692 {
4693 //qDebug() << "DataBase::updateTo009: - And I am not in 008" << QT_ENDL;
4694 IAmIn008 = updateTo008();
4695 }
4696 //qDebug() << "DataBase::updateTo009: - And I am already at least in 008" << QT_ENDL;
4697 if (ErrorUpdating)
4698 {
4699 // emit debugLog(Q_FUNC_INFO, "1", 7);
4700 return false;
4701 }
4702 bool sqlOk = updateDBVersion(softVersion, "0.009");
4703
4704 if (sqlOk)
4705 { // Version updated
4706 //qDebug() << "DataBase::updateTo009: - version updated" << QT_ENDL;
4707 //IAmIn009 = updateTableLog(6);
4708 }
4709 else
4710 { // Version not updated
4711 //qDebug() << "DataBase::updateTo009: - version not updated" << QT_ENDL;
4712 }
4713 //DO ALL THE TASKS TO BE IN 0.009 from 0.008 HERE and set ErrorUpdating if it is not possible.
4714 if (recreateSatelliteData())
4715 //if (createTableSatellites(true))
4716 {
4717 //qDebug() << "DataBase::updateTo009: - createTableSatellites OK" << QT_ENDL;
4718 //if (populateTableSatellites(true))
4719
4720 if (updateTableEntity())
4721 {
4722 //qDebug() << "DataBase::updateTo009: - updateTableEntity OK" << QT_ENDL;
4723 if (updateTheEntityTableISONames())
4724 {
4725 //qDebug() << "DataBase::updateTo009: - isonames updated" << QT_ENDL;
4726 // Now I need to update the logs table
4727
4728 if (updateTableLogs())
4729 {
4730 //qDebug() << "DataBase::updateTo009: - logs updated and Function finished successfuly!!" << QT_ENDL;
4731 IAmIn009 = true;
4732 }
4733 else
4734 {
4735 //qDebug() << "DataBase::updateTo009: - logs NOT updated" << QT_ENDL;
4736 IAmIn009 = false;
4737 ErrorUpdating = true;
4738 }
4739 }
4740 else
4741 {
4742 //qDebug() << "DataBase::updateTo009: - isonames NOT updated" << QT_ENDL;
4743 IAmIn009 = false;
4744 ErrorUpdating = true;
4745 }
4746 }
4747 else
4748 {
4749 ErrorUpdating = true;
4750 IAmIn009 = false;
4751 }
4752 }
4753 else
4754 {
4755 //qDebug() << "DataBase::updateTo009: - createTableSatellites FALSE" << QT_ENDL;
4756 ErrorUpdating = true;
4757 IAmIn009 = false;
4758 }
4759 }
4760
4761 //qDebug() << "DataBase::updateTo009: - END" << QT_ENDL;
4762 if (!IAmIn009)
4763 {
4764 // emit debugLog(Q_FUNC_INFO, "1", 7);
4765 }
4766 return IAmIn009;
4767 }
4768
4769
updateTo010()4770 bool DataBase::updateTo010()
4771 {// Updates the DB to 0.010:
4772 // We add FT8 mode and
4773 // AS Propagation
4774
4775 //qDebug() << "DataBase::updateTo010: latestRead: " << getDBVersion() << QT_ENDL;
4776 bool IAmIn010 = false;
4777 bool IAmIn009 = false;
4778 bool ErrorUpdating = false;
4779 QString stringQuery = QString();
4780 QSqlQuery query;
4781
4782 latestReaded = getDBVersion().toFloat();
4783 //qDebug() << "DataBase::updateTo010: Checking (latestRead/dbVersion):" << QString::number(latestReaded) << "/" << QString::number(dbVersion) << QT_ENDL;
4784 if (latestReaded >= 0.010f)
4785 {
4786 //qDebug() << "DataBase::updateTo010: - I am in 010" << QT_ENDL;
4787 IAmIn010 = true;
4788 return true;
4789 }
4790 else
4791 {
4792 //qDebug() << "DataBase::updateTo010: - I am not in 010 I am in: " << QString::number(latestReaded)<< QT_ENDL;
4793
4794 while (!IAmIn009 && !ErrorUpdating)
4795 {
4796 //qDebug() << "DataBase::updateTo010: - Check if I am in 009: !" << QT_ENDL;
4797 IAmIn009 = updateTo009();
4798
4799 if (IAmIn009)
4800 {
4801 //qDebug() << "DataBase::updateTo010: - updateTo009 returned TRUE - I am in 0.009: " << QString::number(latestReaded) << QT_ENDL;
4802 }
4803 else
4804 {
4805 //qDebug() << "DataBase::updateTo010: - updateTo009 returned FALSE - I am NOT in 0.009: " << QString::number(latestReaded) << QT_ENDL;
4806 ErrorUpdating = false;
4807 }
4808 }
4809
4810 if (ErrorUpdating)
4811 {
4812 //qDebug() << "DataBase::updateTo010: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
4813 // emit debugLog(Q_FUNC_INFO, "1", 7);
4814 return false;
4815 }
4816 }
4817
4818
4819 bool sqlOk = execQuery(Q_FUNC_INFO, "UPDATE band SET lower = '0.1357', upper = '0.1378' WHERE name='2190M'");
4820 if (sqlOk)
4821 {
4822 //qDebug() << "DataBase::updateTo010: - Band update OK" << QT_ENDL;
4823 }
4824 else
4825 {
4826 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4827 //qDebug() << "DataBase::updateTo010: - Band update NOK" << QT_ENDL;
4828 }
4829
4830
4831 execQuery(Q_FUNC_INFO, QString("INSERT INTO mode (submode, name, cabrillo, deprecated) VALUES ('FT8', 'FT8', 'NO', '0')"));
4832 execQuery(Q_FUNC_INFO, QString("INSERT INTO prop_mode_enumeration (shortname, name) VALUES ('AS', 'Aircraft Scatter')"));
4833
4834
4835 if (updateDBVersion(softVersion, "0.010"))
4836 {
4837 //qDebug() << "DataBase::updateTo010: - We are in 010! " << QT_ENDL;
4838 IAmIn010 = true;
4839 }
4840 else
4841 {
4842 //qDebug() << "DataBase::updateTo010: - Failed to go to 010! " << QT_ENDL;
4843 IAmIn010 = false;
4844 // emit debugLog(Q_FUNC_INFO, "1", 7);
4845 }
4846
4847 //qDebug() << "DataBase::updateTo010: - END" << QT_ENDL;
4848 return IAmIn010;
4849 }
4850
updateDBVersion(QString _softV,QString _dbV)4851 bool DataBase::updateDBVersion(QString _softV, QString _dbV)
4852 {
4853 QString dateString = util->getDateSQLiteStringFromDate(QDate::currentDate());
4854
4855 //qDebug() << "DataBase::updateDBVersion: (date/SoftVersion/dbVersion): " << dateString << "/" << _softV << "/" << _dbV << QT_ENDL;
4856 QString stringQuery = "INSERT INTO softwarecontrol (dateupgrade, softversion, dbversion) VALUES ('" + dateString + "', '" + _softV + "', '" + _dbV + "')";
4857 bool sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
4858 if (!sqlOK)
4859 {
4860 // emit debugLog(Q_FUNC_INFO, "1", 7);
4861 }
4862 return sqlOK;
4863 }
4864
4865
updateTheModeTableAndSyncLog()4866 bool DataBase::updateTheModeTableAndSyncLog()
4867 {
4868 //qDebug() << "DataBase::updateTheModeTableAndSyncLog" << QT_ENDL;
4869 QSqlQuery query;
4870
4871 createTableMode(false); // Create modetemp
4872 populateTableMode(false); // Populate modetemp
4873
4874 updateModeIdFromSubModeId(); // Updates the log with the new mode IDs in each QSO
4875 //updateModeIdTableAward(1); //DXCC
4876 //updateModeIdTableAward(2); // WAZ
4877
4878 //QSqlDatabase::database().commit();
4879
4880 bool sqlOK = execQuery(Q_FUNC_INFO, "DROP TABLE mode");
4881 if (sqlOK)
4882 {
4883 //QSqlDatabase::database().commit();
4884 //qDebug() << "DataBase::updateTheModeTableAndSyncLog - OK - mode was dropped" << QT_ENDL;
4885
4886 sqlOK = execQuery(Q_FUNC_INFO, "ALTER TABLE modetemp RENAME TO mode");
4887 if (!sqlOK)
4888 {
4889 // emit debugLog(Q_FUNC_INFO, "1", 7);
4890 }
4891 return sqlOK;
4892 }
4893 else
4894 {
4895 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4896 //qDebug() << "DataBase::updateTheModeTableAndSyncLog - ERROR - modetemp not dropped" << QT_ENDL;
4897 // emit debugLog(Q_FUNC_INFO, "2", 7);
4898 return false;
4899 }
4900 //qDebug() << "DataBase::updateTheModeTableAndSyncLog END" << QT_ENDL;
4901 //return true;
4902 }
4903
recreateTableBand()4904 bool DataBase::recreateTableBand()
4905 {
4906 //qDebug() << "DataBase::recreateTableBand" << QT_ENDL;
4907 QSqlQuery query;
4908
4909 createTableBand(false); // Create modetemp
4910 populateTableBand(false); // Populate modetemp
4911 syncLogQSOsOnBandTableChange();
4912
4913 if (execQuery(Q_FUNC_INFO, "DROP TABLE band"))
4914 {
4915 // emit debugLog(Q_FUNC_INFO, "1", 7);
4916 return execQuery(Q_FUNC_INFO, "ALTER TABLE bandtemp RENAME TO band");
4917 }
4918 else
4919 {
4920 //queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
4921 //qDebug() << "DataBase::recreateTableBand - ERROR - bandtemp not dropped" << QT_ENDL;
4922 // emit debugLog(Q_FUNC_INFO, "2", 7);
4923 return false;
4924 }
4925 //qDebug() << "DataBase::recreateTableBand END" << QT_ENDL;
4926 }
4927
fillCountryCodes()4928 QMultiMap<QString, int> DataBase::fillCountryCodes()
4929 {
4930 //qDebug() << Q_FUNC_INFO;
4931 QMultiMap<QString, int> countryCodes;
4932 countryCodes.clear ();
4933 countryCodes.insert ("mt", 246);
4934 countryCodes.insert ("un", 247);
4935 countryCodes.insert ("mc", 260);
4936 countryCodes.insert ("mu", 4);
4937 countryCodes.insert ("mu", 165);
4938 countryCodes.insert ("mu", 207);
4939 countryCodes.insert ("gq", 49);
4940 countryCodes.insert ("gq", 195);
4941 countryCodes.insert ("fj", 176);
4942 countryCodes.insert ("fj", 489);
4943 countryCodes.insert ("fj", 460);
4944 countryCodes.insert ("sz", 468);
4945 countryCodes.insert ("tn", 474);
4946 countryCodes.insert ("vn", 293);
4947 countryCodes.insert ("gn", 107);
4948 countryCodes.insert ("bv", 24);
4949 countryCodes.insert ("no", 199);
4950 countryCodes.insert ("az", 18);
4951 countryCodes.insert ("ge", 75);
4952 countryCodes.insert ("me", 514);
4953 countryCodes.insert ("lk", 315);
4954 countryCodes.insert ("ch", 177); // ITU HQ
4955 countryCodes.insert ("us", 289); // UN HQ
4956 countryCodes.insert ("tl", 511); // Timor Leste
4957 countryCodes.insert ("il", 336); // Israel
4958 countryCodes.insert ("ly", 436); // Libya
4959 countryCodes.insert ("cy", 215); // Cyprus
4960 countryCodes.insert ("tz", 470); // Tanzania
4961 countryCodes.insert ("ng", 450); // Nigeria
4962 countryCodes.insert ("mg", 438); // Madagascar
4963 countryCodes.insert ("mr", 444); // Mauritania
4964 countryCodes.insert ("ne", 187); // Niger
4965 countryCodes.insert ("tg", 484); // Togo
4966 countryCodes.insert ("ws", 190); // Samoa
4967 countryCodes.insert ("ug", 286); // Uganda
4968 countryCodes.insert ("ke", 430); // Kenya
4969 countryCodes.insert ("sn", 456); // Senegal
4970 countryCodes.insert ("jm", 82); // Jamaica
4971 countryCodes.insert ("es", 281); // Spain
4972 countryCodes.insert ("ls", 432); // Lesotho
4973 countryCodes.insert ("mw", 440); // Malawi
4974 countryCodes.insert ("dz", 400); // Algeria
4975 countryCodes.insert ("ye", 492); // Yemen
4976 countryCodes.insert ("bb", 62); // Barbados
4977 countryCodes.insert ("mv", 159); // Maldives
4978 countryCodes.insert ("gy", 129); // Guyana
4979 countryCodes.insert ("hr", 497); // Croatia
4980 countryCodes.insert ("gh", 424); // Ghana
4981 countryCodes.insert ("mt", 257); // Malta
4982 countryCodes.insert ("zm", 482); // Zambia
4983 countryCodes.insert ("kw", 348); // Kuwait
4984 countryCodes.insert ("sl", 458); //Sierra Leone
4985 countryCodes.insert ("my", 299); // West Malaysia
4986 countryCodes.insert ("my", 46); // East Malaysia
4987 countryCodes.insert ("np", 369); // Nepal
4988 countryCodes.insert ("cd", 414); // Dem Rep Congo
4989 countryCodes.insert ("bi", 404); // Burundi
4990 countryCodes.insert ("sg", 381); // Singapore
4991 countryCodes.insert ("rw", 454); // Rwanda
4992 countryCodes.insert ("tt", 90); // Trinidad & Tobago
4993 countryCodes.insert ("bw", 402);
4994 countryCodes.insert ("to", 160);
4995 countryCodes.insert ("om", 370);
4996 countryCodes.insert ("bt", 306); // Bhutan
4997 countryCodes.insert ("ae", 391); // Un Arab Emirates
4998 countryCodes.insert ("qa", 376); // Qatar
4999 countryCodes.insert ("bh", 304); // Bahrain
5000 countryCodes.insert ("pk", 372); // Pakistan
5001 countryCodes.insert ("tw", 386); // Taiwan
5002 countryCodes.insert ("tw", 505); // Pratas Is
5003 countryCodes.insert ("cn", 318); // China
5004 countryCodes.insert ("nr", 157); // Nauru
5005 countryCodes.insert ("ad", 203); // Andorra
5006 countryCodes.insert ("gm", 422); // Gambia
5007 countryCodes.insert ("bs", 60);
5008 countryCodes.insert ("mz", 181); // Mozambique
5009 countryCodes.insert ("cl", 112); // Chile
5010 countryCodes.insert ("cl", 217); // San Felix
5011 countryCodes.insert ("cl", 47); // Easter Is
5012 countryCodes.insert ("cl", 125); // Juan Fernandez is
5013 countryCodes.insert ("cu", 70); // Cuba
5014 countryCodes.insert ("ma", 446); // Morocco
5015 countryCodes.insert ("bo", 104); // Bolivia
5016 countryCodes.insert ("pt", 272); // Portugal
5017 countryCodes.insert ("pt", 256); // Madeira
5018 countryCodes.insert ("pt", 149); // Azores
5019 countryCodes.insert ("uy", 144); // Uruguay
5020 countryCodes.insert ("ca", 211); // Sable Is
5021 countryCodes.insert ("ca", 252); // St Paul is
5022 countryCodes.insert ("ao", 401); // Angola
5023 countryCodes.insert ("cv", 409); // Cape Verde
5024 countryCodes.insert ("km", 411); // Comoros
5025 countryCodes.insert ("de", 203); // Fed Rep Germany
5026 countryCodes.insert ("ph", 375); //Philippines
5027 countryCodes.insert ("er", 51); // Eritrea
5028 countryCodes.insert ("ps", 510); // Palestine
5029 countryCodes.insert ("ck", 191); // North Cook
5030 countryCodes.insert ("ck", 234); // South Cook
5031 countryCodes.insert ("nu", 188); // Niue
5032 countryCodes.insert ("ba", 501); // Bosnia
5033 countryCodes.insert ("balear", 21); // Balearic is
5034 countryCodes.insert ("canary", 29); // Canary Is
5035 countryCodes.insert ("ceuta", 32); // Ceuta & Melilla //TODO: Fix the flag
5036 countryCodes.insert ("ie", 245); // Ireland
5037 countryCodes.insert ("am", 14);
5038 countryCodes.insert ("lr", 434);
5039 countryCodes.insert ("ir",330); // Iran
5040 countryCodes.insert ("mv", 179); // Moldova
5041 countryCodes.insert ("ee", 52); // Estonia
5042 countryCodes.insert ("et", 53); // Ethiopia
5043 countryCodes.insert ("by", 27); // Belarus
5044 countryCodes.insert ("kg", 135); // Kyrgyzstan
5045 countryCodes.insert ("tm", 280); // Turkmenistan
5046 countryCodes.insert ("tj", 262); // Tajikistan
5047 countryCodes.insert ("fr", 227); // France
5048 countryCodes.insert ("fr", 79); // Guadeloupe
5049 countryCodes.insert ("yt", 169); // Mayotte
5050 countryCodes.insert ("fr", 516); // St Barthelemy
5051 countryCodes.insert ("fr", 36); // Clipperton Is
5052 countryCodes.insert ("nc", 162); // New Caledonia
5053 countryCodes.insert ("nc", 512); // Chesterfield Is
5054 countryCodes.insert ("mq", 84); // Martinique
5055 countryCodes.insert ("pf", 175); // French Polynesia
5056 countryCodes.insert ("pf", 508); // Austral Is
5057 countryCodes.insert ("pm", 277); // St Pierre & Miquelon
5058 countryCodes.insert ("re", 453); //Reunion Is
5059 countryCodes.insert ("fr", 213); // St Marteen
5060 countryCodes.insert ("fr", 99); // Glorioso is
5061 countryCodes.insert ("fr", 124); // Juan de nova, Europa
5062 countryCodes.insert ("fr", 276); // Tromelin - TODO: Add the wikipedia flag
5063 countryCodes.insert ("fr", 41); // Crozet
5064 countryCodes.insert ("fr", 131); // Kerguelen
5065 //TODO: Add the wikipedia flag http://es.wikipedia.org/wiki/Tierras_Australes_y_Ant%C3%A1rticas_Francesas
5066 countryCodes.insert ("fr", 10); //Amsterdam & St Paul is
5067 //TODO: Add the wikipedia flag
5068 countryCodes.insert ("wf", 298); // Wallis & Futuna is
5069 countryCodes.insert ("gf", 63); // French Guiana
5070 //TODO: Add the wikipedia flag
5071 countryCodes.insert ("england", 223); // England
5072 countryCodes.insert ("gb", 114); //Isle of Man
5073 //TODO: Add the wikipedia flag
5074 countryCodes.insert ("northernireland", 265); // Northern Ireland
5075 countryCodes.insert ("gb", 122); // Jersey
5076 countryCodes.insert ("scotland", 279); // Scotland
5077 countryCodes.insert ("scotland", 1279); // Shetland is (Scotland)
5078 countryCodes.insert ("gb", 106); // Guernsey
5079 //TODO: Add the wikipedia flag
5080 countryCodes.insert ("wales", 294); // Wales
5081 countryCodes.insert ("sb", 185); // Solomon
5082 countryCodes.insert ("sb", 507); // Temotu Province
5083 countryCodes.insert ("hu", 239); // Hungary
5084 countryCodes.insert ("ch", 287); // Switzerland
5085 countryCodes.insert ("li", 251); // Liechtenstein
5086 countryCodes.insert ("ec", 120); // Ecuador
5087 countryCodes.insert ("ec", 71); // Galapagos Is
5088 countryCodes.insert ("ht", 78); // Haiti
5089 countryCodes.insert ("do", 72); // Dominican Rep
5090 countryCodes.insert ("co", 116); // Colombia
5091 countryCodes.insert ("co", 216); // San Andres & Providencia
5092 countryCodes.insert ("co", 161); // Malpelo
5093 countryCodes.insert ("kr", 137); // Rep Korea
5094 countryCodes.insert ("pa", 88); // Panama
5095 countryCodes.insert ("hn", 80); // Honduras
5096 countryCodes.insert ("th", 387); // Thailand
5097 countryCodes.insert ("va", 295);
5098 countryCodes.insert ("sa", 378); // Saudi Arabia
5099 countryCodes.insert ("it", 248); // Italy
5100 countryCodes.insert ("it", 1248); // African Italy
5101 countryCodes.insert ("it", 2248); // Sicily
5102 countryCodes.insert ("it", 225); // Sardinia
5103 countryCodes.insert ("dj", 382); // Djibouti
5104 countryCodes.insert ("gd", 77); // Grenada
5105 countryCodes.insert ("gw", 109); // Guinea-Bissau
5106 countryCodes.insert ("lc", 97); // St Lucia
5107 countryCodes.insert ("dm", 95); // Dominica
5108 countryCodes.insert ("vc", 98); // St Vicent
5109 countryCodes.insert ("jp", 339); // Japan
5110 countryCodes.insert ("jp", 177); // Minami Torishima
5111 countryCodes.insert ("jp", 192); // Ogasawara
5112 countryCodes.insert ("mn", 363); // Mongolia
5113 countryCodes.insert ("sj", 259); // Svalbard
5114 countryCodes.insert ("sj", 1259); // Svalbard
5115 countryCodes.insert ("sj", 118); // Jan Mayen
5116 countryCodes.insert ("jo", 342);
5117 countryCodes.insert ("us", 291);
5118 countryCodes.insert ("us", 105);
5119 countryCodes.insert ("mp", 166);
5120 countryCodes.insert ("us", 20);
5121 countryCodes.insert ("gu", 103);
5122 countryCodes.insert ("us", 123);
5123 countryCodes.insert ("us", 174);
5124 countryCodes.insert ("us", 197);
5125 countryCodes.insert ("us", 134);
5126 countryCodes.insert ("us", 110); // Hawaii
5127 //TODO: Add the wikipedia flag
5128 countryCodes.insert ("us", 138); // Kure is
5129 countryCodes.insert ("as", 9); // American Samoa
5130 countryCodes.insert ("as", 515); // Swains is
5131 countryCodes.insert ("us", 297); // Wake is
5132 countryCodes.insert ("us", 6); // Alaska
5133 countryCodes.insert ("us", 182); // Navassa Is
5134 countryCodes.insert ("vi", 285); // Us Virgin is
5135 countryCodes.insert ("pr", 202); // Puerto Rico
5136 countryCodes.insert ("us", 43); // Desecheo Is
5137 countryCodes.insert ("no", 266); // Norway
5138 countryCodes.insert ("ar", 100); // Argentina
5139 countryCodes.insert ("lu", 254); // Luxembourg
5140 countryCodes.insert ("lt", 146); // Lithuania
5141 countryCodes.insert ("bg", 212); // Bulgaria
5142 countryCodes.insert ("pe", 136); // Peru
5143 countryCodes.insert ("lb", 354); // Lebanon
5144 countryCodes.insert ("at", 206); // Austria & Viena Intl HQ
5145 countryCodes.insert ("fi", 224); // Findland
5146 countryCodes.insert ("fi", 5); // Aland is
5147 countryCodes.insert ("fi", 167); // Market Reef
5148 countryCodes.insert ("cz", 503); // Czech Rep
5149 countryCodes.insert ("sk", 504); // Slovak Rep
5150 countryCodes.insert ("be", 209); // Belgium
5151 countryCodes.insert ("gl", 237); // Greenland
5152 countryCodes.insert ("dk", 222); // Faroe is
5153 //TODO: Add the wikipedia flag
5154 countryCodes.insert ("dk", 221); // Denmark
5155 countryCodes.insert ("pg", 163); // Papua New Guinea
5156 countryCodes.insert ("aw", 91); // Aruba
5157 countryCodes.insert ("kp", 344); //Dpr Korea
5158 countryCodes.insert ("nl", 263); // Netherlands
5159 countryCodes.insert ("cw", 517); // Curacao
5160 //TODO: Add the wikipedia flag
5161 countryCodes.insert ("bq", 520); // Bonaire
5162 //TODO: Add the wikipedia flag
5163 countryCodes.insert ("nl", 519); // Saba & St Eustatius
5164 //TODO: Add the wikipedia flag
5165 countryCodes.insert ("shm", 518); // Sint Marteen
5166 //TODO: Add the wikipedia flag
5167 countryCodes.insert ("br", 108); // Brazil
5168 countryCodes.insert ("br", 56); // Fernando de Noronha
5169 countryCodes.insert ("br", 253); // St Peter & St Paul
5170 countryCodes.insert ("br", 273); // Trindade & Martim Vaz
5171 countryCodes.insert ("sr", 140); // Suriname
5172 countryCodes.insert ("ru", 61); // Franz Josef Land
5173 countryCodes.insert ("eh", 302); // Western Sahara
5174 //TODO: Add the wikipedia flag
5175 countryCodes.insert ("bd", 305); // Bangladesh
5176 countryCodes.insert ("si", 499); // Slovenia
5177 countryCodes.insert ("sc", 379); // Seychelles
5178 countryCodes.insert ("st", 219); // Sao Tome & Principe
5179 countryCodes.insert ("se", 284); // Sweden
5180 countryCodes.insert ("pl", 269); // Poland
5181 countryCodes.insert ("sd", 466); // Sudan
5182 countryCodes.insert ("eg", 478); // Egypt
5183 countryCodes.insert ("gr", 236); // Greece
5184 countryCodes.insert ("gr", 180); // Mount Athos
5185 countryCodes.insert ("gr", 45); // Dodecanese
5186 countryCodes.insert ("gr", 40); // Crete
5187 countryCodes.insert ("tv", 282); // Tuvalu
5188 countryCodes.insert ("ki", 301); // Western Kiribati
5189 countryCodes.insert ("ki", 31); // Central Kiribati
5190 countryCodes.insert ("ki", 48); // Eastern Kiribati
5191 countryCodes.insert ("ki", 490); // Banaba is
5192 countryCodes.insert ("so", 232); // Somalia
5193 countryCodes.insert ("sm", 278); // San Marino
5194 countryCodes.insert ("pw", 22); // Palau
5195 countryCodes.insert ("tr", 390); // Turkey
5196 countryCodes.insert ("tr", 1390); // European Turkey
5197 countryCodes.insert ("is", 242); // Iceland
5198 countryCodes.insert ("gt", 76); // Guatemala
5199 //TODO: Add the wikipedia flag
5200 countryCodes.insert ("cr", 308); // Costa Rica
5201 countryCodes.insert ("cr", 37); // Coco is
5202 countryCodes.insert ("cm", 406); // Cameroon
5203 countryCodes.insert ("fr", 214); // Corsica
5204 // TODO: Add the wikipedia flag
5205 countryCodes.insert ("cf", 408); // Central African Rep
5206 countryCodes.insert ("cg", 412); // Rep of Congo
5207 countryCodes.insert ("ga", 420); // Gabon
5208 countryCodes.insert ("td", 410); // Chad
5209 countryCodes.insert ("ci", 428); // Cote d'Ivoire
5210 countryCodes.insert ("bj", 416); // Benin
5211 countryCodes.insert ("ml", 442); // Mali
5212 countryCodes.insert ("ru", 54); // European Russia
5213 countryCodes.insert ("ru", 15); // Asiatic Russia
5214 countryCodes.insert ("ru", 126); // Kaliningrad
5215 countryCodes.insert ("uz", 292); // Uzbekistan
5216 countryCodes.insert ("kz", 130); // Kazakhstan
5217 countryCodes.insert ("ua", 288); // Ukraine
5218 countryCodes.insert ("ag", 94); // Antigua & Barbuda
5219 countryCodes.insert ("bz", 66); // Belize
5220 countryCodes.insert ("kn", 249); // St Kitts & Nevis
5221 countryCodes.insert ("na", 464); // Namibia
5222 countryCodes.insert ("fm", 173); // Micronesia
5223 countryCodes.insert ("fm", 168); // Marshall Is
5224 countryCodes.insert ("bn", 345); // Brunei Darusalam
5225 countryCodes.insert ("ca", 1); // Canada
5226 countryCodes.insert ("au", 150); // Australia
5227 countryCodes.insert ("hm", 111); // Heard Is
5228 countryCodes.insert ("au", 153); // Macquarie is
5229 countryCodes.insert ("cc", 38); // Cocos / Keeling is
5230 countryCodes.insert ("au", 147); // Lord Howe is
5231 countryCodes.insert ("au", 171); // Mellish Reed
5232 countryCodes.insert ("nf", 189); // Norkfolk is
5233 countryCodes.insert ("au", 303); // Willis Is
5234 countryCodes.insert ("cx", 35); // Christmas is
5235 countryCodes.insert ("ai", 12); // Anguilla
5236 countryCodes.insert ("ms", 96); // Montserrat
5237 countryCodes.insert ("vg", 65); // British is
5238 countryCodes.insert ("tc", 89); // Turks & Caicos is
5239 countryCodes.insert ("pn", 172); // Pitcairn
5240 countryCodes.insert ("gb", 513); // Ducie is
5241 countryCodes.insert ("fk", 141); // Falkland is
5242 countryCodes.insert ("gs", 235); // South Georgia is
5243 countryCodes.insert ("southbritish", 241); // South Shetland is
5244 countryCodes.insert ("un", 238); // South Orkney is
5245 countryCodes.insert ("gs", 240); // South Sandwich Is
5246 countryCodes.insert ("bm", 64); // Bermuda
5247 countryCodes.insert ("io", 33); // Chagos is
5248 countryCodes.insert ("hk", 321); // Hong Kong
5249 countryCodes.insert ("in", 324); // India
5250 countryCodes.insert ("in", 11); // Andaman & Nicobar
5251 countryCodes.insert ("in", 142); // Lakshadweep Is
5252 countryCodes.insert ("mx", 50); // Mexico
5253 countryCodes.insert ("mx", 204); // Revilagigedo
5254 countryCodes.insert ("bf", 480); // Burkina Faso
5255 countryCodes.insert ("kh", 312); // Cambodia
5256 countryCodes.insert ("la", 143); // Laos
5257 countryCodes.insert ("mo", 152); // Macao
5258 countryCodes.insert ("mm", 309); // Myanmar
5259 countryCodes.insert ("af", 3); // Afganistan
5260 countryCodes.insert ("id", 327); // Indonesia
5261 countryCodes.insert ("iq", 333); // Iraq
5262 countryCodes.insert ("vu", 158); // Vanuatu
5263 countryCodes.insert ("sy", 384); // Syria
5264 countryCodes.insert ("lv", 145); // Latvia
5265 countryCodes.insert ("ni", 86); // Nicaragua
5266 countryCodes.insert ("ro", 275); // Romania
5267 countryCodes.insert ("sv", 74); // El Salvador
5268 countryCodes.insert ("rs", 296); // Serbia
5269 countryCodes.insert ("ve", 148); // Venezuela
5270 countryCodes.insert ("ve", 17); // Aves Is
5271 countryCodes.insert ("zw", 452); // Zimbabwe
5272 countryCodes.insert ("mk", 502); // Macedonia
5273 countryCodes.insert ("ss", 521); //Rep South Sudan
5274 countryCodes.insert ("al", 7); // Albania
5275 countryCodes.insert ("gi", 233); // Gibraltar
5276 countryCodes.insert ("gb", 283); // UK Base Aereas Cyprus
5277 countryCodes.insert ("sh", 250); // St Helena
5278 countryCodes.insert ("sh", 205); // Ascension is
5279 countryCodes.insert ("sh", 274); // Tristan da Cunha & Gough is
5280 countryCodes.insert ("ky", 69); // Cayman Is
5281 countryCodes.insert ("tk", 270); // Tokelau Is
5282 countryCodes.insert ("marquesas", 509); // Marquesas Is
5283 countryCodes.insert ("nz", 170); // New Zeland
5284 countryCodes.insert ("nz", 34); // Chatham Is
5285 countryCodes.insert ("nz", 133); // Kermadec is
5286 countryCodes.insert ("nz", 16); // Auckland & Campbell is
5287 countryCodes.insert ("py", 132); // Paraguay
5288 countryCodes.insert ("za", 462); // South Africa
5289 countryCodes.insert ("za", 201); // Pr Edward & Marion Is
5290 countryCodes.insert ("xk", 522); // Kosovo
5291 // Countries without flag or controversial - Data is added just to keep the DB filled-up
5292 countryCodes.insert ("un", 506); // Scarboroug Reef
5293 countryCodes.insert ("un", 13); // Antartica
5294
5295 return countryCodes;
5296 }
5297
updateTheEntityTableISONames()5298 bool DataBase::updateTheEntityTableISONames()
5299 {
5300 //qDebug() << "DataBase::updateTheEntityTableISONames" << QT_ENDL;
5301 QSqlQuery query;
5302 QString sq;
5303
5304 //First of all we will check if the entity table does contain data. We can't update something non existent!
5305 if (!hasTheTableData("entity"))
5306 {
5307 //qDebug() << "DataBase::updateTheEntityTableISONames: Entity has NO data" << QT_ENDL;
5308 // emit debugLog(Q_FUNC_INFO, "1", 7);
5309 return false;
5310 }
5311 QMultiMap<QString, int> countryCodes;
5312 countryCodes.clear ();
5313
5314 countryCodes = fillCountryCodes ();
5315
5316 foreach (const QString &str, countryCodes.uniqueKeys()) {
5317 foreach (int i, countryCodes.values(str))
5318 {
5319 if (!updateEntity (str, i))
5320 return false;
5321
5322 //qDebug() << str << ':' << i;
5323 }
5324 }
5325
5326 //qDebug() << "DataBase::updateTheEntityTableISONames-END" << QT_ENDL;
5327 return true;
5328 }
5329
updateEntity(const QString & _codeString,const int _code)5330 bool DataBase::updateEntity (const QString &_codeString, const int _code)
5331 {
5332 //qDebug() << Q_FUNC_INFO << "ISOCode: " << _codeString << " - int: " << QString::number(_code);
5333 QString sq = QString ("UPDATE entity SET isoname='%1' WHERE dxcc='%2'").arg(_codeString).arg(_code);
5334 //TODO Capture and manage the error
5335 return execQuery(Q_FUNC_INFO, sq);
5336 }
5337
isTheTableExisting(const QString & _tableName)5338 bool DataBase::isTheTableExisting(const QString &_tableName)
5339 {
5340 QSqlQuery query;
5341
5342 QString sq = QString("SELECT name FROM sqlite_master WHERE name='%1'").arg(_tableName);
5343 bool sqlOK = query.exec(sq);
5344 if (sqlOK)
5345 {
5346 if (query.next())
5347 {
5348 if (query.isValid())
5349 {
5350 int _n = (query.value(0)).toInt();
5351 query.finish();
5352 if (_n > 0)
5353 {
5354 //qDebug() << "DataBase::isTheTableExisting - Table Exists" << QT_ENDL;
5355 return true;
5356 }
5357 else
5358 {
5359 //qDebug() << "DataBase::isTheTableExisting - Table does not Exist" << QT_ENDL;
5360 // emit debugLog(Q_FUNC_INFO, "1", 7);
5361 return false;
5362 }
5363 }
5364 }
5365 }
5366 else
5367 {
5368 // emit debugLog(Q_FUNC_INFO, "2", 7);
5369 return false;
5370 }
5371 // emit debugLog(Q_FUNC_INFO, "3", 7);
5372 return false;
5373 }
5374
5375
5376
hasTheTableData(const QString & _tableName)5377 bool DataBase::hasTheTableData(const QString &_tableName)
5378 {
5379 //qDebug() << "DataBase::hasTheTableData" << _tableName << QT_ENDL;
5380 QSqlQuery query;
5381
5382
5383 QString stringQuery = QString("SELECT count(id) FROM %1").arg(_tableName);
5384 bool sqlOK = query.exec(stringQuery);
5385
5386 if (sqlOK)
5387 {
5388 query.next();
5389 if (query.isValid())
5390 {
5391 //qDebug() << "DataBase::hasTheTableData - valid" << QT_ENDL;
5392 int _num = (query.value(0)).toInt();
5393 query.finish();
5394 if (_num > 0)
5395 {
5396 //qDebug() << "DataBase::hasTheTableData - DB Exists" << QT_ENDL;
5397 return true;
5398 }
5399 else
5400 {
5401 //qDebug() << "DataBase::hasTheTableData - DB does not Exist" << QT_ENDL;
5402 // emit debugLog(Q_FUNC_INFO, "1", 7);
5403 return false;
5404 }
5405 }
5406 else
5407 {
5408 //qDebug() << "DataBase::hasTheTableData - not valid" << QT_ENDL;
5409 query.finish();
5410 // emit debugLog(Q_FUNC_INFO, "2", 7);
5411 return false;
5412 }
5413 }
5414 else
5415 {
5416 //qDebug() << "DataBase::hasTheTableData: LastQuery: " << query.lastQuery() << QT_ENDL;
5417 //qDebug() << "DataBase::hasTheTableData: LastError-data: " << query.lastError().databaseText() << QT_ENDL;
5418 //qDebug() << "DataBase::hasTheTableData: LastError-driver: " << query.lastError().driverText() << QT_ENDL;
5419 //qDebug() << "DataBase::hasTheTableData LastError-n: " << QString::number(query.lastError().nativeErrorCode() ) << QT_ENDL;
5420 //qDebug() << "DataBase::updateTheEntityTableISONames" << QT_ENDL;
5421 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
5422 query.finish();
5423 // emit debugLog(Q_FUNC_INFO, "3", 7);
5424 return false;
5425 }
5426
5427 //qDebug() << "DataBase::isTheDBCreated: END FALSE" << QT_ENDL;
5428 //query.finish();
5429 //return false;
5430 }
5431
updateTo011()5432 bool DataBase::updateTo011()
5433 {// Updates the DB to 0.011:
5434 // We add FT8 mode and
5435 // AS Propagation
5436
5437
5438 //qDebug() << "DataBase::updateTo011: latestRead: " << getDBVersion() << QT_ENDL;
5439 bool IAmIn011 = false;
5440 bool IAmIn010 = false;
5441
5442 QString stringQuery = QString();
5443 //QSqlQuery query;
5444
5445 //bool sqlOk = false;
5446 latestReaded = getDBVersion().toFloat();
5447 //qDebug() << "DataBase::updateTo011: Checking (latestRead/dbVersion):" << QString::number(latestReaded) << "/" << QString::number(dbVersion) << QT_ENDL;
5448 if (latestReaded >= 0.011f)
5449 {
5450 //qDebug() << "DataBase::updateTo011: - I am in 011" << QT_ENDL;
5451 IAmIn011 = true;
5452 return true;
5453 }
5454 else
5455 {
5456 //qDebug() << "DataBase::updateTo011: - I am not in 0.012 I am in: " << QString::number(latestReaded)<< QT_ENDL;
5457 bool ErrorUpdating = false;
5458 while (!IAmIn010 && !ErrorUpdating)
5459 {
5460 //qDebug() << "DataBase::updateTo011: - Check if I am in 010: !" << QT_ENDL;
5461 IAmIn010 = updateTo010();
5462
5463 if (IAmIn010)
5464 {
5465 //qDebug() << "DataBase::updateTo011: - updateTo010 returned TRUE - I am in 0.010: " << QString::number(latestReaded) << QT_ENDL;
5466 }
5467 else
5468 {
5469 //qDebug() << "DataBase::updateTo011: - updateTo009 returned FALSE - I am NOT in 0.010: " << QString::number(latestReaded) << QT_ENDL;
5470 ErrorUpdating = false;
5471 }
5472 }
5473
5474 if (ErrorUpdating)
5475 {
5476 //qDebug() << "DataBase::updateTo011: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5477 // emit debugLog(Q_FUNC_INFO, "1", 7);
5478 return false;
5479 }
5480 }
5481
5482 if (!recreateSatelliteData())
5483 {
5484 //qDebug() << "DataBase::updateTo011: - Sats update NOK " << QT_ENDL;
5485 // emit debugLog(Q_FUNC_INFO, "2", 7);
5486 return false;
5487 }
5488
5489 if (!recreateTableDXCC())
5490 {
5491 //qDebug() << "DataBase::updateTo011: - recreateTableDXCC NOK " << QT_ENDL;
5492 // emit debugLog(Q_FUNC_INFO, "3", 7);
5493 return false;
5494 }
5495
5496 if (!recreateTableWAZ())
5497 {
5498 //qDebug() << "DataBase::updateTo011: - recreateTableWAZ NOK " << QT_ENDL;
5499 // emit debugLog(Q_FUNC_INFO, "4", 7);
5500 return false;
5501 }
5502
5503 if(!execQuery(Q_FUNC_INFO, "INSERT INTO mode (submode, name, cabrillo, deprecated) VALUES ('MSK144', 'MSK144', 'NO', '0')"))
5504 {
5505 //qDebug() << "DataBase::updateTo011: - MSK NOK " << QT_ENDL;
5506 // emit debugLog(Q_FUNC_INFO, "5", 7);
5507 return false;
5508 }
5509
5510
5511 if (!recreateTableLog())
5512 {
5513 //qDebug() << "DataBase::updateTo011: - Failed to recreate Table Log " << QT_ENDL;
5514 // emit debugLog(Q_FUNC_INFO, "6", 7);
5515 return false;
5516 }
5517
5518 if (updateDBVersion(softVersion, "0.011"))
5519 {
5520 //qDebug() << "DataBase::updateTo011: - We are in 011! " << QT_ENDL;
5521 IAmIn011 = true;
5522 }
5523 else
5524 {
5525 //qDebug() << "DataBase::updateTo011: - Failed to go to 011! " << QT_ENDL;
5526 IAmIn011 = false;
5527 }
5528
5529
5530 if (!updateAwardDXCCTable())
5531 {
5532 //qDebug() << "DataBase::updateTo011: - updateAwardDXCCTable NOK " << QT_ENDL;
5533 IAmIn011 = false;
5534 // emit debugLog(Q_FUNC_INFO, "7", 7);
5535 return false;
5536 }
5537 if (!updateAwardWAZTable())
5538 {
5539 //qDebug() << "DataBase::updateTo011: - updateAwardWAZTable NOK " << QT_ENDL;
5540 IAmIn011 = false;
5541 }
5542 //qDebug() << "DataBase::updateTo011: - END" << QT_ENDL;
5543 if (!IAmIn011)
5544 {// emit debugLog(Q_FUNC_INFO, "8", 7);
5545 }
5546 return IAmIn011;
5547 }
5548
5549
updateTo012()5550 bool DataBase::updateTo012()
5551 {
5552 // Updates the DB to 0.012:
5553 // Change the table qsl_via to qsl_via_enumeration
5554 // Solve the supportedContest table missing bug in some deployments
5555
5556
5557 //qDebug() << "DataBase::updateTo012: latestRead: " << getDBVersion() << QT_ENDL;
5558 bool IAmIn011 = false;
5559 bool ErrorUpdating = false;
5560 latestReaded = getDBVersion().toFloat();
5561 //qDebug() << "DataBase::updateTo012: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
5562 if (latestReaded >= 0.012f)
5563 {
5564 //qDebug() << "DataBase::updateTo012: - I am in 012" << QT_ENDL;
5565 return true;
5566 }
5567 else
5568 {
5569 //qDebug() << "DataBase::updateTo012: - I am not in 0.012 I am in: " << getDBVersion() << QT_ENDL;
5570 while (!IAmIn011 && !ErrorUpdating)
5571 {
5572 //qDebug() << "DataBase::updateTo012: - Check if I am in 011: !" << QT_ENDL;
5573 IAmIn011 = updateTo011();
5574
5575 if (IAmIn011)
5576 {
5577 //qDebug() << "DataBase::updateTo012: - updateTo011 returned TRUE - I am in 0.011: " << QString::number(latestReaded) << QT_ENDL;
5578 }
5579 else
5580 {
5581 //qDebug() << "DataBase::updateTo012: - updateTo011 returned FALSE - I am NOT in 0.011: " << QString::number(latestReaded) << QT_ENDL;
5582 ErrorUpdating = false;
5583 }
5584 }
5585 if (ErrorUpdating)
5586 {
5587 //qDebug() << "DataBase::updateTo012: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5588 // emit debugLog(Q_FUNC_INFO, "1", 7);
5589 return false;
5590 }
5591 }
5592
5593 // Now I am in the previous version and I can update the DB.
5594 //bool sqlOK = false;
5595
5596 if (isTheTableExisting("supportedcontest"))
5597 {
5598 bool sqlOK = execQuery(Q_FUNC_INFO, "DROP TABLE supportedcontest");
5599 if (sqlOK)
5600 {
5601 if (createTableSupportedContest())
5602 {
5603 sqlOK = recreateSupportedContest();
5604 }
5605 else
5606 {
5607 //qDebug() << "DataBase::updateTo012: UPDATED NOK-1!" << QT_ENDL;
5608 // emit debugLog(Q_FUNC_INFO, "2", 7);
5609 return false;
5610 }
5611 }
5612 }
5613 else
5614 {
5615 if (createTableSupportedContest())
5616 {
5617 if (!recreateSupportedContest())
5618 {
5619 //qDebug() << "DataBase::updateTo012: UPDATED NOK-2!" << QT_ENDL;
5620 // emit debugLog(Q_FUNC_INFO, "3", 7);
5621 return false;
5622 }
5623 }
5624 }
5625
5626 if (updateDBVersion(softVersion, "0.012"))
5627 {
5628 //qDebug() << "DataBase::updateTo012: - We are in 012! " << QT_ENDL;
5629 }
5630 else
5631 {
5632 //qDebug() << "DataBase::updateTo011: - Failed to go to 012! " << QT_ENDL;
5633 // emit debugLog(Q_FUNC_INFO, "4", 7);
5634 return false;
5635 }
5636
5637 //qDebug() << "DataBase::updateTo012: UPDATED OK!" << QT_ENDL;
5638 return true;
5639 }
5640
updateTo013()5641 bool DataBase::updateTo013()
5642 {
5643 // Updates the DB to 0.013:
5644 // Change the table qsl_via to qsl_via_enumeration
5645 // Solve the supportedContest table missing bug in some deployments
5646
5647
5648 //qDebug() << "DataBase::updateTo013: latestRead: " << getDBVersion() << QT_ENDL;
5649 bool IAmIn012 = false;
5650 bool ErrorUpdating = false;
5651 latestReaded = getDBVersion().toFloat();
5652 //qDebug() << "DataBase::updateTo013: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
5653 if (latestReaded >= 0.013f)
5654 {
5655 //qDebug() << "DataBase::updateTo013: - I am in 013" << QT_ENDL;
5656 return true;
5657 }
5658 else
5659 {
5660 //qDebug() << "DataBase::updateTo013: - I am not in 0.013 I am in: " << getDBVersion() << QT_ENDL;
5661 while (!IAmIn012 && !ErrorUpdating)
5662 {
5663 //qDebug() << "DataBase::updateTo013: - Check if I am in 012: !" << QT_ENDL;
5664 IAmIn012 = updateTo012();
5665
5666 if (IAmIn012)
5667 {
5668 //qDebug() << "DataBase::updateTo013: - updateTo012 returned TRUE - I am in 0.012: " << QString::number(latestReaded) << QT_ENDL;
5669 }
5670 else
5671 {
5672 //qDebug() << "DataBase::updateTo013: - updateTo011 returned FALSE - I am NOT in 0.012: " << QString::number(latestReaded) << QT_ENDL;
5673 ErrorUpdating = false;
5674 }
5675 }
5676 if (ErrorUpdating)
5677 {
5678 //qDebug() << "DataBase::updateTo013: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5679 // emit debugLog(Q_FUNC_INFO, "1", 7);
5680 return false;
5681 }
5682 }
5683
5684 // Now I am in the previous version and I can update the DB.
5685
5686 if (!recreateSupportedContest())
5687 {
5688 // emit debugLog(Q_FUNC_INFO, "2", 7);
5689 /*emit debugLog(Q_FUNC_INFO, "0", 7);*/
5690 return false;
5691 }
5692
5693 execQuery(Q_FUNC_INFO, "DROP TABLE IF exists qsl_via");
5694 if (createTableQSL_Via_enumeration())
5695 {
5696 if (!populateTableQSL_Via_enumeration())
5697 {
5698 // emit debugLog(Q_FUNC_INFO, "3", 7);
5699 return false;
5700 }
5701 }
5702 else
5703 {
5704 // emit debugLog(Q_FUNC_INFO, "4", 7);
5705 return false;
5706 }
5707 if (updateDBVersion(softVersion, "0.013"))
5708 {
5709 //qDebug() << "DataBase::updateTo013: - We are in 013! " << QT_ENDL;
5710 }
5711 else
5712 {
5713 //qDebug() << "DataBase::updateTo013: - Failed to go to 013! " << QT_ENDL;
5714 // emit debugLog(Q_FUNC_INFO, "5", 7);
5715 return false;
5716 }
5717
5718 //qDebug() << "DataBase::updateTo013: UPDATED OK!" << QT_ENDL;
5719 return true;
5720 }
5721
5722
updateTo014()5723 bool DataBase::updateTo014()
5724 {
5725 // Updates the DB to 0.014:
5726 // Updates the Satellite DB
5727
5728
5729 //qDebug() << "DataBase::updateto014: latestRead: " << getDBVersion() << QT_ENDL;
5730 bool IAmIn013 = false;
5731 bool ErrorUpdating = false;
5732 latestReaded = getDBVersion().toFloat();
5733 //qDebug() << "DataBase::updateto014: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
5734 if (latestReaded >= 0.014f)
5735 {
5736 //qDebug() << "DataBase::updateto014: - I am in 013" << QT_ENDL;
5737 return true;
5738 }
5739 else
5740 {
5741 //qDebug() << "DataBase::updateto014: - I am not in 0.013 I am in: " << getDBVersion() << QT_ENDL;
5742 while (!IAmIn013 && !ErrorUpdating)
5743 {
5744 //qDebug() << "DataBase::updateto014: - Check if I am in 013: !" << QT_ENDL;
5745 IAmIn013 = updateTo013();
5746
5747 if (IAmIn013)
5748 {
5749 //qDebug() << "DataBase::updateto014: - updateTo012 returned TRUE - I am in 0.013: " << QString::number(latestReaded) << QT_ENDL;
5750 }
5751 else
5752 {
5753 //qDebug() << "DataBase::updateto014: - updateTo011 returned FALSE - I am NOT in 0.013: " << QString::number(latestReaded) << QT_ENDL;
5754 ErrorUpdating = false;
5755 }
5756 }
5757 if (ErrorUpdating)
5758 {
5759 //qDebug() << "DataBase::updateto014: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5760 // emit debugLog(Q_FUNC_INFO, "1", 7);
5761 return false;
5762 }
5763 }
5764
5765 // Now I am in the previous version and I can update the DB.
5766
5767
5768 if (!recreateSatelliteData())
5769 {
5770 //qDebug() << "DataBase::updateTo014: - Sats update NOK " << QT_ENDL;
5771 // emit debugLog(Q_FUNC_INFO, "2", 7);
5772 return false;
5773 }
5774
5775
5776 if (updateDBVersion(softVersion, "0.014"))
5777 {
5778 //qDebug() << "DataBase::updateto014: - We are in 013! " << QT_ENDL;
5779 }
5780 else
5781 {
5782 //qDebug() << "DataBase::updateto014: - Failed to go to 013! " << QT_ENDL;
5783 // emit debugLog(Q_FUNC_INFO, "3", 7);
5784 return false;
5785 }
5786
5787 //qDebug() << "DataBase::updateTo014: UPDATED OK!" << QT_ENDL;
5788 return true;
5789 }
5790
5791
updateTo015()5792 bool DataBase::updateTo015()
5793 {
5794 // Updates the DB to 0.015:
5795 // Adds the FT4 mode
5796
5797 //qDebug() << "DataBase::updateto015: latestRead: " << getDBVersion() << QT_ENDL;
5798 bool IAmIn014 = false;
5799 bool ErrorUpdating = false;
5800 latestReaded = getDBVersion().toFloat();
5801 //qDebug() << "DataBase::updateto015: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
5802 if (latestReaded >= 0.015f)
5803 {
5804 //qDebug() << "DataBase::updateto015: - I am in 013" << QT_ENDL;
5805 return true;
5806 }
5807 else
5808 {
5809 //qDebug() << "DataBase::updateto014: - I am not in 0.014 I am in: " << getDBVersion() << QT_ENDL;
5810 while (!IAmIn014 && !ErrorUpdating)
5811 {
5812 //qDebug() << "DataBase::updateto015: - Check if I am in 014: !" << QT_ENDL;
5813 IAmIn014 = updateTo014();
5814 if (IAmIn014)
5815 {
5816 //qDebug() << "DataBase::updateto015: - updateTo013 returned TRUE - I am in 0.014: " << QString::number(latestReaded) << QT_ENDL;
5817 }
5818 else
5819 {
5820 //qDebug() << "DataBase::updateto015: - updateTo011 returned FALSE - I am NOT in 0.014: " << QString::number(latestReaded) << QT_ENDL;
5821 ErrorUpdating = false;
5822 }
5823 }
5824 if (ErrorUpdating)
5825 {
5826 //qDebug() << "DataBase::updateto015: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5827 // emit debugLog(Q_FUNC_INFO, "1", 7);
5828 return false;
5829 }
5830 }
5831
5832 // Now I am in the previous version and I can update the DB.
5833
5834
5835 if (updateTheModeTableAndSyncLog())
5836 {
5837 //qDebug() << "DataBase::updateTo015: - updateTheModeTableAndSyncLog OK" << QT_ENDL;
5838 }
5839 else
5840 {
5841 //qDebug() << "DataBase::updateTo015: UPDATED NOK!(9)" << QT_ENDL;
5842 //ErrorUpdating = true;
5843 }
5844
5845
5846 if (updateDBVersion(softVersion, "0.015"))
5847 {
5848 //qDebug() << "DataBase::updateto015: - We are in 015! " << QT_ENDL;
5849 }
5850 else
5851 {
5852 //qDebug() << "DataBase::updateto015: - Failed to go to 014! " << QT_ENDL;
5853 // emit debugLog(Q_FUNC_INFO, "2", 7);
5854 return false;
5855 }
5856 //qDebug() << "DataBase::updateTo015: UPDATED OK!" << QT_ENDL;
5857 return true;
5858 }
5859
5860
updateTo016()5861 bool DataBase::updateTo016()
5862 {
5863 // Updates the DB to 0.016:
5864 // Updates the Satellite DB
5865
5866
5867 //qDebug() << "DataBase::updateto016: latestRead: " << getDBVersion() << QT_ENDL;
5868 bool IAmIn015 = false;
5869 bool ErrorUpdating = false;
5870 latestReaded = getDBVersion().toFloat();
5871 //qDebug() << "DataBase::updateto016: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
5872 if (latestReaded >= 0.016f)
5873 {
5874 //qDebug() << "DataBase::updateto016: - I am in 015" << QT_ENDL;
5875 return true;
5876 }
5877 else
5878 {
5879 //qDebug() << "DataBase::updateto016: - I am not in 0.015 I am in: " << getDBVersion() << QT_ENDL;
5880 while (!IAmIn015 && !ErrorUpdating)
5881 {
5882 //qDebug() << "DataBase::updateto014: - Check if I am in 015: !" << QT_ENDL;
5883 IAmIn015 = updateTo015();
5884
5885 if (IAmIn015)
5886 {
5887 //qDebug() << "DataBase::updateto016: - updateTo015 returned TRUE - I am in 0.015: " << QString::number(latestReaded) << QT_ENDL;
5888 }
5889 else
5890 {
5891 //qDebug() << "DataBase::updateto016: - updateTo015 returned FALSE - I am NOT in 0.015: " << QString::number(latestReaded) << QT_ENDL;
5892 ErrorUpdating = false;
5893 }
5894 }
5895 if (ErrorUpdating)
5896 {
5897 //qDebug() << "DataBase::updateto016: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5898 // emit debugLog(Q_FUNC_INFO, "1", 7);
5899 return false;
5900 }
5901 }
5902
5903 // Now I am in the previous version and I can update the DB.
5904
5905 if (!recreateSatelliteData())
5906 {
5907 //qDebug() << "DataBase::updateTo016: - Sats update NOK " << QT_ENDL;
5908 // emit debugLog(Q_FUNC_INFO, "2", 7);
5909 return false;
5910 }
5911 if (updateDBVersion(softVersion, "0.016"))
5912 {
5913 //qDebug() << "DataBase::updateto014: - We are in 016! " << QT_ENDL;
5914 }
5915 else
5916 {
5917 //qDebug() << "DataBase::updateto014: - Failed to go to 016! " << QT_ENDL;
5918 // emit debugLog(Q_FUNC_INFO, "3", 7);
5919 return false;
5920 }
5921 //qDebug() << "DataBase::updateTo016: UPDATED OK!" << QT_ENDL;
5922 return true;
5923 }
5924
updateTo017()5925 bool DataBase::updateTo017()
5926 {
5927 // Updates the DB to 0.017:
5928 // Updates the Satellite DB
5929
5930 //qDebug() << "DataBase::updateto017: latestRead: " << getDBVersion() << QT_ENDL;
5931 bool IAmIn016 = false;
5932 bool ErrorUpdating = false;
5933 latestReaded = getDBVersion().toFloat();
5934 //qDebug() << "DataBase::updateto017: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
5935 if (latestReaded >= 0.017f)
5936 {
5937 //qDebug() << "DataBase::updateto017: - I am in 017" << QT_ENDL;
5938 return true;
5939 }
5940 else
5941 {
5942 //qDebug() << "DataBase::updateto017: - I am not in 0.017 I am in: " << getDBVersion() << QT_ENDL;
5943 while (!IAmIn016 && !ErrorUpdating)
5944 {
5945 //qDebug() << "DataBase::updateto017: - Check if I am in 016: !" << QT_ENDL;
5946 IAmIn016 = updateTo016();
5947 if (IAmIn016)
5948 {
5949 //qDebug() << "DataBase::updateto017: - updateTo016 returned TRUE - I am in 0.016: " << QString::number(latestReaded) << QT_ENDL;
5950 }
5951 else
5952 {
5953 //qDebug() << "DataBase::updateto017: - updateTo016 returned FALSE - I am NOT in 0.016: " << QString::number(latestReaded) << QT_ENDL;
5954 ErrorUpdating = false;
5955 }
5956 }
5957 if (ErrorUpdating)
5958 {
5959 //qDebug() << "DataBase::updateto017: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
5960 // emit debugLog(Q_FUNC_INFO, "1", 7);
5961 return false;
5962 }
5963 }
5964
5965 // Now I am in the previous version and I can update the DB.
5966
5967 // Query to remove the "/" from a Date: update log set qso_date = replace(qso_date, '/', '')
5968 // Query to remove the ":" from the Time: update log set time_on = replace(time_on, ':', '')
5969 // Query to join columns:
5970 // update log set qso_date = replace((SELECT qso_date from log)||'-'||time_on, '', '')
5971 /*
5972 PROCEDURE: Move to SQLITE - datetime type: // 2020-01-01 10:12:01
5973 // Query to remove the "/" from a Date: update log set qso_date = replace(qso_date, '/', '-')
5974 // Join: SELECT qso_date || ' ' || time_on from log
5975 UPDATE logtemp SET qso_date = (SELECT qso_date || ' ' || time_on FROM log)
5976 */
5977
5978 /*
5979 QString stringQuery;
5980 stringQuery = "update log set qso_date = replace((SELECT qso_date from log)||'-'||time_on, '', '')";
5981 //UPDATE log set qso_date = qso_date ||'-'||time_on
5982 bool sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
5983 if (!sqlOK)
5984 {return false;}
5985 */
5986
5987 // Modify the qso_date with the time_on data with the right format
5988 QString stringQuery;
5989
5990 stringQuery = "UPDATE log set qso_date = replace(qso_date ||' '||time_on, '/', '-')";
5991 bool sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
5992 if (!sqlOK)
5993 {/*emit debugLog(Q_FUNC_INFO, "2", 7);*/return false;}
5994
5995 stringQuery = "UPDATE log set qso_date_off = replace(qso_date_off, '/', '-')";
5996 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
5997 if (!sqlOK)
5998 {/*emit debugLog(Q_FUNC_INFO, "3", 7);*/return false;}
5999
6000 stringQuery = "UPDATE log set qslsdate = replace(qslsdate, '/', '-')";
6001 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6002 if (!sqlOK)
6003 {/*emit debugLog(Q_FUNC_INFO, "4", 7);*/return false;}
6004
6005 stringQuery = "UPDATE log set qslrdate = replace(qslrdate, '/', '-')";
6006 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6007 if (!sqlOK)
6008 {/*emit debugLog(Q_FUNC_INFO, "5", 7);*/return false;}
6009
6010 stringQuery = "UPDATE log set lotw_qslsdate = replace(lotw_qslsdate, '/', '-')";
6011 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6012 if (!sqlOK)
6013 {/*emit debugLog(Q_FUNC_INFO, "6", 7);*/return false;}
6014
6015 stringQuery = "UPDATE log set lotw_qslrdate = replace(lotw_qslrdate, '/', '-')";
6016 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6017 if (!sqlOK)
6018 {/*emit debugLog(Q_FUNC_INFO, "7", 7);*/return false;}
6019
6020 stringQuery = "UPDATE log set eqsl_qslrdate = replace(eqsl_qslrdate, '/', '-')";
6021 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6022 if (!sqlOK)
6023 {/*emit debugLog(Q_FUNC_INFO, "8", 7);*/return false;}
6024
6025 stringQuery = "UPDATE log set eqsl_qslsdate = replace(eqsl_qslsdate, '/', '-')";
6026 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6027 if (!sqlOK)
6028 {/*emit debugLog(Q_FUNC_INFO, "9", 7);*/return false;}
6029
6030 stringQuery = "UPDATE log set hrdlog_qso_upload_date = replace(hrdlog_qso_upload_date, '/', '-')";
6031 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6032 if (!sqlOK)
6033 {/*emit debugLog(Q_FUNC_INFO, "10", 7);*/return false;}
6034
6035 stringQuery = "UPDATE log set hrdlog_qso_upload_date = replace(hrdlog_qso_upload_date, '/', '-')";
6036 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6037 if (!sqlOK)
6038 {/*emit debugLog(Q_FUNC_INFO, "11", 7);*/return false;}
6039
6040 stringQuery = "UPDATE log set clublog_qso_upload_date = replace(clublog_qso_upload_date, '/', '-')";
6041 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6042 if (!sqlOK)
6043 {/*emit debugLog(Q_FUNC_INFO, "12", 7);*/return false;}
6044
6045 stringQuery = "UPDATE log set qrzcom_qso_upload_date = replace(qrzcom_qso_upload_date, '/', '-')";
6046 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6047 if (!sqlOK)
6048 {/*emit debugLog(Q_FUNC_INFO, "13", 7);*/return false;}
6049 if (!recreateTableLog())
6050 {
6051 //qDebug() << "DataBase::updateTo017: - Failed to recreate Table Log " << QT_ENDL;
6052 // emit debugLog(Q_FUNC_INFO, "14", 7);
6053 return false;
6054 }
6055 //qDebug() << "DataBase::updateTo017: - Recreated Table Log " << QT_ENDL;
6056
6057 /*
6058
6059 else
6060 {
6061 //qDebug() << "DataBase::updateTo017: - Table log recreated OK" << QT_ENDL;
6062 }
6063 */
6064
6065 // REMOVE THE FOLLOWING LINE ONCE THIS FUNCTION HAS BEEN UPDATED
6066 //return false;
6067
6068 // If everything went OK, we update the DB number.
6069 if (updateDBVersion(softVersion, "0.017"))
6070 {
6071 //qDebug() << "DataBase::updateto017: - We are in 017! " << QT_ENDL;
6072 }
6073 else
6074 {
6075 //qDebug() << "DataBase::updateto017: - Failed to go to 017! " << QT_ENDL;
6076 // emit debugLog(Q_FUNC_INFO, "15", 7);
6077 return false;
6078 }
6079 //qDebug() << "DataBase::updateTo017: UPDATED OK!" << QT_ENDL;
6080 return true;
6081 }
6082
updateTo018()6083 bool DataBase::updateTo018()
6084 {
6085 // Updates the DB to 0.018:
6086 // Adds the Subdivisions
6087
6088 //qDebug() << "DataBase::updateto018: latestRead: " << getDBVersion() << QT_ENDL;
6089 bool IAmIn017 = false;
6090 bool ErrorUpdating = false;
6091 latestReaded = getDBVersion().toFloat();
6092 //qDebug() << "DataBase::updateto018: Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
6093 if (latestReaded >= 0.018f)
6094 {
6095 //qDebug() << "DataBase::updateto018: - I am in 018" << QT_ENDL;
6096 return true;
6097 }
6098 else
6099 {
6100 //qDebug() << "DataBase::updateto018: - I am not in 0.018 I am in: " << getDBVersion() << QT_ENDL;
6101 while (!IAmIn017 && !ErrorUpdating)
6102 {
6103 //qDebug() << "DataBase::updateto017: - Check if I am in 017: !" << QT_ENDL;
6104 IAmIn017 = updateTo017();
6105 if (IAmIn017)
6106 {
6107 //qDebug() << "DataBase::updateto018: - updateTo017 returned TRUE - I am in 0.017: " << QString::number(latestReaded) << QT_ENDL;
6108 }
6109 else
6110 {
6111 //qDebug() << "DataBase::updateto017: - updateTo017 returned FALSE - I am NOT in 0.017: " << QString::number(latestReaded) << QT_ENDL;
6112 ErrorUpdating = false;
6113 }
6114 }
6115 if (ErrorUpdating)
6116 {
6117 //qDebug() << "DataBase::updateto018: - I Could not update to: " << QString::number(dbVersion) << QT_ENDL;
6118 // emit debugLog(Q_FUNC_INFO, "1", 7);
6119 return false;
6120 }
6121 }
6122
6123 // Now I am in the previous version and I can update the DB.
6124
6125 bool ok = createTableSubdivision(true);
6126
6127 if (!ok)
6128 {
6129 return false;
6130 }
6131 // REMOVE THE FOLLOWING LINE ONCE THIS FUNCTION HAS BEEN UPDATED
6132 //return false;
6133
6134 // If everything went OK, we update the DB number.
6135 if (updateDBVersion(softVersion, "0.018"))
6136 {
6137 //qDebug() << "DataBase::updateto018: - We are in 018! " << QT_ENDL;
6138 }
6139 else
6140 {
6141 //qDebug() << "DataBase::updateto018: - Failed to go to 018! " << QT_ENDL;
6142 // emit debugLog(Q_FUNC_INFO, "15", 7);
6143 return false;
6144 }
6145 //qDebug() << "DataBase::updateTo018: UPDATED OK!" << QT_ENDL;
6146 return true;
6147 }
6148
updateTo019()6149 bool DataBase::updateTo019()
6150 {// Adds FTS4 and FST4W modes
6151 // Adds RS-44 sat
6152 //qDebug() << Q_FUNC_INFO << " " << getDBVersion() << QT_ENDL;
6153 bool IAmIn018 = false;
6154 bool ErrorUpdating = false;
6155 latestReaded = getDBVersion().toFloat();
6156 //qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
6157 if (latestReaded >= 0.019f)
6158 {
6159 //qDebug() << Q_FUNC_INFO << " : - I am in 019" << QT_ENDL;
6160 return true;
6161 }
6162 else
6163 {
6164 while (!IAmIn018 && !ErrorUpdating)
6165 {
6166 IAmIn018 = updateTo018();
6167 if (IAmIn018)
6168 {
6169 }
6170 else
6171 {
6172 ErrorUpdating = false;
6173 }
6174 }
6175 if (ErrorUpdating)
6176 {
6177 // emit debugLog(Q_FUNC_INFO, "1", 7);
6178 return false;
6179 }
6180 }
6181
6182 // Now I am in the previous version and I can update the DB.
6183
6184
6185 if (updateTheModeTableAndSyncLog() && recreateSatelliteData())
6186 {
6187 //qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" << QT_ENDL;
6188 }
6189 else
6190 {
6191 //qDebug() << Q_FUNC_INFO << " : UPDATED NOK!(9)" << QT_ENDL;
6192 return false;
6193 }
6194
6195
6196 if (updateDBVersion(softVersion, "0.019"))
6197 {
6198 //qDebug() << Q_FUNC_INFO << " : - We are in 019! " << QT_ENDL;
6199 }
6200 else
6201 {
6202 //qDebug() << Q_FUNC_INFO << " : - Failed to go to 018! " << QT_ENDL;
6203 // emit debugLog(Q_FUNC_INFO, "2", 7);
6204 return false;
6205 }
6206
6207 //qDebug() << Q_FUNC_INFO << " : UPDATED OK!" << QT_ENDL;
6208 return true;
6209 }
6210
updateTo022()6211 bool DataBase::updateTo022()
6212 {// Adds Q65 mode
6213 //qDebug() << Q_FUNC_INFO << " " << getDBVersion() << QT_ENDL;
6214 bool IamInPreviousVersion = false;
6215 bool ErrorUpdating = false;
6216 latestReaded = getDBVersion().toFloat();
6217 //qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
6218 if (latestReaded >= dbVersion)
6219 {
6220 //qDebug() << Q_FUNC_INFO << " : - I am in 022" << QT_ENDL;
6221 return true;
6222 }
6223 while (!IamInPreviousVersion && !ErrorUpdating)
6224 {
6225 IamInPreviousVersion = updateTo021();
6226 if (!IamInPreviousVersion)
6227 {
6228 return false;
6229 }
6230 }
6231
6232 // Now I am in the previous version and I can update the DB.
6233
6234 if (!updateTheModeTableAndSyncLog() )
6235 {
6236 //qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" << QT_ENDL;
6237 return false;
6238 }
6239
6240 if (!updateDBVersion(softVersion, QString::number(0.022)))
6241 {
6242 //qDebug() << Q_FUNC_INFO << " : - Failed to go to the previous version! " << QT_ENDL;
6243 return false;
6244 }
6245 //qDebug() << Q_FUNC_INFO << " : - We are in the updated version! " << QT_ENDL;
6246 //qDebug() << Q_FUNC_INFO << " : UPDATED OK!" << QT_ENDL;
6247 return true;
6248 }
6249
updateTo021()6250 bool DataBase::updateTo021()
6251 {// Adds 5M & 8M bands
6252 //qDebug() << Q_FUNC_INFO << " " << getDBVersion() << QT_ENDL;
6253 bool IamInPreviousVersion = false;
6254 bool ErrorUpdating = false;
6255 latestReaded = getDBVersion().toFloat();
6256 //qDebug() << Q_FUNC_INFO << " : Checking (latestRead/dbVersion):" << getDBVersion() << "/" << QString::number(dbVersion) << QT_ENDL;
6257 if (latestReaded >= dbVersion)
6258 {
6259 //qDebug() << Q_FUNC_INFO << " : - I am in 019" << QT_ENDL;
6260 return true;
6261 }
6262 while (!IamInPreviousVersion && !ErrorUpdating)
6263 {
6264 IamInPreviousVersion = updateTo019();
6265 if (!IamInPreviousVersion)
6266 {
6267 return false;
6268 }
6269 }
6270
6271 // Now I am in the previous version and I can update the DB.
6272
6273 if (!recreateTableBand ())
6274 {
6275 //qDebug() << Q_FUNC_INFO << " : - updateTheModeTableAndSyncLog OK" << QT_ENDL;
6276 return false;
6277 }
6278
6279 if (!updateDBVersion(softVersion, QString::number(0.021)))
6280 {
6281 //qDebug() << Q_FUNC_INFO << " : - Failed to go to the previous version! " << QT_ENDL;
6282 return false;
6283 }
6284 //qDebug() << Q_FUNC_INFO << " : - We are in the updated version! " << QT_ENDL;
6285 //qDebug() << Q_FUNC_INFO << " : UPDATED OK!" << QT_ENDL;
6286 return true;
6287 }
6288
updateAwardDXCCTable()6289 bool DataBase::updateAwardDXCCTable()
6290 {
6291 //qDebug() << "DataBase::updateAwardDXCCTable" << QT_ENDL;
6292
6293 QList<AwarddxccEntry> dxccStatusList;
6294 //QList<AwarddxccEntryCheck> dxccStatusListCheck;
6295 dxccStatusList.clear();
6296 //dxccStatusListCheck.clear();
6297
6298 AwarddxccEntry awardEntry;
6299 awardEntry.dxcc = QString();
6300 awardEntry.band = QString();
6301 awardEntry.status = QString();
6302 awardEntry.logNumber = QString();
6303 awardEntry.qsoID = QString();
6304
6305 QString stringQuery = QString("SELECT id, bandid, modeid, dxcc, qsl_rcvd, lotw_qsl_rcvd, lognumber FROM log ORDER BY dxcc");
6306 QSqlQuery query;//, query2;
6307
6308 bool sqlOK = query.exec(stringQuery);
6309 QSqlRecord rec = query.record();
6310 if (!sqlOK)
6311 {
6312 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6313 query.finish();
6314 // emit debugLog(Q_FUNC_INFO, "1", 7);
6315 return false;
6316 }
6317 else
6318 {
6319 //qDebug() << "DataBase::updateAwardDXCCTable SELECT when OK" << QT_ENDL;
6320 }
6321 QStringList dxccStatus = QStringList(); //dxcc, band, mode, confirmed, lognumber, qsoid (per award set)
6322 QStringList dxccStatusCheck = QStringList(); //dxcc, band, mode, confirmed, lognumber (per award set) just to check
6323 int nameCol = -1;
6324
6325 QString _aux = QString();
6326
6327 //qDebug() << "DataBase::updateAwardDXCCTable before the while" << QT_ENDL;
6328 while (query.next())
6329 {
6330 //qDebug() << "DataBase::updateAwardDXCCTable IN the while" << QT_ENDL;
6331 if (query.isValid())
6332 {
6333 //qDebug() << "DataBase::updateAwardDXCCTable VALID" << QT_ENDL;
6334 awardEntry.dxcc.clear();
6335 awardEntry.band.clear();
6336 awardEntry.status.clear();
6337 awardEntry.logNumber.clear();
6338 awardEntry.qsoID.clear();
6339
6340 //qDebug() << "DataBase::updateAwardDXCCTable in the while" << QT_ENDL;
6341 nameCol = rec.indexOf("qsl_rcvd");
6342 bool qsl = false;
6343
6344 if ((query.value(nameCol)).toString() == "Y")
6345 {
6346 qsl = true;
6347 }
6348
6349 nameCol = rec.indexOf("lotw_qsl_rcvd");
6350 bool lotw = false;
6351 if ((query.value(nameCol)).toString() == "Y")
6352 {
6353 lotw = true;
6354 }
6355
6356 if (qsl || lotw )
6357 {
6358 awardEntry.status = "1";
6359 }
6360 else
6361 {
6362 awardEntry.status = "0";
6363 }
6364
6365 //qDebug() << "DataBase::updateAwardDXCCTable - status" << awardEntry.status << QT_ENDL;
6366 if ((awardEntry.status == "1") || (awardEntry.status == "0") )
6367 {
6368 nameCol = rec.indexOf("dxcc");
6369 awardEntry.dxcc = (query.value(nameCol)).toString();
6370
6371 if ((awardEntry.dxcc).toInt()>0)
6372 {
6373 nameCol = rec.indexOf("bandid");
6374 awardEntry.band = (query.value(nameCol)).toString();
6375
6376 nameCol = rec.indexOf("modeid");
6377 awardEntry.mode = (query.value(nameCol)).toString();
6378
6379 nameCol = rec.indexOf("id");
6380 awardEntry.qsoID = (query.value(nameCol)).toString();
6381
6382 nameCol = rec.indexOf("lognumber");
6383 awardEntry.logNumber = (query.value(nameCol)).toString();
6384
6385 //qDebug() << "DataBase::updateAwardDXCCTable: Adding: " << awardEntry.dxcc <<"/" << awardEntry.band <<"/" << awardEntry.mode <<"/" << awardEntry.status <<"/" << awardEntry.logNumber <<"/" << awardEntry.qsoID << QT_ENDL;
6386 dxccStatusList.append(awardEntry);
6387 }
6388 } // END OF IF VALID
6389 }
6390 } // END OF WHILE
6391
6392 //qDebug() << "DataBase::updateAwardDXCCTable - END OF WHILE" << QT_ENDL;
6393
6394 query.finish();
6395
6396
6397 //qDebug() << "DataBase::updateAwardDXCCTable: Log analized... let's clean the table!" << QT_ENDL;
6398
6399 stringQuery = QString("DELETE FROM awarddxcc");
6400
6401 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6402 if (!sqlOK)
6403 {return false;}
6404 else
6405 {
6406 //qDebug() << "DataBase::updateAwardDXCCTable: awarddxcc table DELETED" << QT_ENDL;
6407 }
6408
6409 //qDebug() << "DataBase::updateAwardDXCCTable: Now we start writing the table!!" << QT_ENDL;
6410
6411 //int i = 0;
6412 _aux.clear();
6413
6414 int qsos = dxccStatusList.length();
6415 int step = util->getProgresStepForDialog(qsos);
6416
6417 QProgressDialog progress(QObject::tr("Updating DXCC award information..."), QObject::tr("Abort updating"), 0, qsos);
6418 progress.setMaximum(qsos);
6419 progress.setWindowModality(Qt::WindowModal);
6420
6421 //qDebug() << "DataBase::updateAwardDXCCTable: INSERTING: " << QString::number(qsos) << " QSOS..." << QT_ENDL;
6422
6423 for (int j=0;j<dxccStatusList.length();j++)
6424 {
6425 stringQuery = QString("INSERT INTO awarddxcc (dxcc, band, mode, confirmed, lognumber, qsoid) VALUES ('%1', '%2', '%3', '%4', '%5', '%6') ").arg(dxccStatusList.at(j).dxcc).arg(dxccStatusList.at(j).band).arg(dxccStatusList.at(j).mode).arg(dxccStatusList.at(j).status).arg(dxccStatusList.at(j).logNumber).arg(dxccStatusList.at(j).qsoID);
6426 //sqlOK = query.exec(Q_FUNC_INFO, stringQuery);
6427 sqlOK = query.exec(stringQuery);
6428 if (!sqlOK)
6429 {
6430 //qDebug() << "DataBase::updateAwardDXCCTable: Error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
6431 if (query.lastError().nativeErrorCode() == 19)
6432 { // DUPLICATED RECORD: Means that there is already a record in the award... so this set is worked. QSL can be Y or N in the award but inthe log may be other options
6433 // We should only take into account if N or Y
6434 if (dxccStatusList.at(j).status!="1")
6435 { // If tne new status is not confirmed, no change. DO NOTHING
6436 //qDebug() << "DataBase::updateAwardDXCCTable: Duplicated but DO NOTHING as new status is not Confirmed!!!" << QT_ENDL;
6437 }
6438 else
6439 {
6440 //qDebug() << "DataBase::updateAwardDXCCTable: Duplicated but NOW is confirmed!!!" << QT_ENDL;
6441 stringQuery = QString("SELECT confirmed, lognumber, qsoid FROM awarddxcc WHERE dxcc='%1' AND band='%2' AND mode='%3'").arg(dxccStatusList.at(j).dxcc).arg(dxccStatusList.at(j).band).arg(dxccStatusList.at(j).mode);
6442 QSqlQuery query2;//, query2;
6443
6444 sqlOK = query2.exec(stringQuery);
6445 QSqlRecord rec = query2.record();
6446 if (!sqlOK)
6447 {
6448 queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
6449 query2.finish();
6450 // emit debugLog(Q_FUNC_INFO, "3", 7);
6451 return false;
6452 }
6453 else
6454 {
6455 query2.next();
6456 if (query2.isValid())
6457 {
6458 nameCol = rec.indexOf("confirmed");
6459 stringQuery = (query2.value(nameCol)).toString();
6460 QString _qsoid = QString();
6461 nameCol = rec.indexOf("qsoid");
6462 _qsoid = (query2.value(nameCol)).toString();
6463
6464 if ((stringQuery == "0") && (dxccStatusList.at(j).status == "1"))
6465 {
6466 query2.finish();
6467 stringQuery = QString ("UPDATE awarddxcc SET confirmed = '1', qsoid = '%1' WHERE qsoid='%2'").arg(dxccStatusList.at(j).qsoID).arg(_qsoid);
6468 if (execQuery(Q_FUNC_INFO, stringQuery)) {
6469 }
6470 else
6471 {
6472 //qDebug() << "DataBase::updateAwardDXCCTable: Duplicated but UPDATE IS NOT DONE" << QT_ENDL;
6473 }
6474 }
6475 else
6476 {
6477 //qDebug() << "DataBase::updateAwardDXCCTable: Duplicated but UPDATE NOT NEEDED" << QT_ENDL;
6478 }
6479 }
6480 else
6481 {
6482 //qDebug() << "DataBase::updateAwardDXCCTable: Duplicated SELECT query is not Valid" << QT_ENDL;
6483 }
6484 }
6485 }
6486 //qDebug() << "DataBase::updateAwardDXCCTable: Duplicated!" << QT_ENDL;
6487 }
6488 else
6489 {
6490 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6491 query.finish();
6492 // emit debugLog(Q_FUNC_INFO, "4", 7);
6493 return false;
6494 }
6495 }
6496 else
6497 {
6498 //qDebug() << "DataBase::updateAwardDXCCTable: INSERT OK: " << QT_ENDL;
6499 }
6500
6501 query.finish();
6502 //qDebug() << "DataBase::updateAwardDXCCTable: Checking steps " << QT_ENDL;
6503 if (( (j % step )== 0) )
6504 { // To update the speed I will only show the progress once each X QSOs
6505 _aux = QObject::tr("Updating DXCC Award information...") + "\n" + QObject::tr("QSO: ") + QString::number(j) + "/" + QString::number(qsos);
6506 progress.setLabelText(_aux);
6507 progress.setValue(j);
6508 }
6509 if ( progress.wasCanceled() )
6510 {
6511 //qDebug() << "DataBase::updateAwardDXCCTable: progress canceled" << QT_ENDL;
6512 return true;
6513 }
6514 }
6515
6516 progress.setValue(qsos);
6517 //qDebug() << "DataBase::updateAwardDXCCTable: LAST END OK " << QT_ENDL;
6518
6519 return true;
6520 }
6521
updateAwardWAZTable()6522 bool DataBase::updateAwardWAZTable()
6523 {
6524 //qDebug() << "DataBase::updateAwardWAZTable" << QT_ENDL;
6525 QList<AwarddxccEntry> dxccStatusList;
6526 //QList<AwarddxccEntryCheck> dxccStatusListCheck;
6527 dxccStatusList.clear();
6528 //dxccStatusListCheck.clear();
6529
6530 AwarddxccEntry awardEntry;
6531 awardEntry.dxcc = QString();
6532 awardEntry.band = QString();
6533 awardEntry.status = QString();
6534 awardEntry.logNumber = QString();
6535 awardEntry.qsoID = QString();
6536
6537 QString stringQuery = QString("SELECT id, bandid, modeid, cqz, qsl_rcvd, lotw_qsl_rcvd, lognumber FROM log ORDER BY cqz");
6538 QSqlQuery query;//, query2;
6539
6540 bool sqlOK = query.exec(stringQuery);
6541 QSqlRecord rec = query.record();
6542 if (!sqlOK)
6543 {
6544 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6545 query.finish();
6546 // emit debugLog(Q_FUNC_INFO, "1", 7);
6547 return false;
6548 }
6549 else
6550 {
6551 //qDebug() << "DataBase::updateAwardWAZTable SELECT when OK" << QT_ENDL;
6552 }
6553 QStringList dxccStatus = QStringList(); //cqz, band, mode, confirmed, lognumber, qsoid (per award set)
6554 QStringList dxccStatusCheck = QStringList(); //cqz, band, mode, confirmed, lognumber (per award set) just to check
6555 int nameCol = -1;
6556
6557 QString _aux = QString();
6558
6559 //qDebug() << "DataBase::updateAwardWAZTable before the while" << QT_ENDL;
6560 while (query.next())
6561 {
6562 //qDebug() << "DataBase::updateAwardWAZTable IN the while" << QT_ENDL;
6563 if (query.isValid())
6564 {
6565 //qDebug() << "DataBase::updateAwardWAZTable VALID" << QT_ENDL;
6566 awardEntry.dxcc.clear();
6567 awardEntry.band.clear();
6568 awardEntry.status.clear();
6569 awardEntry.logNumber.clear();
6570 awardEntry.qsoID.clear();
6571
6572 //qDebug() << "DataBase::updateAwardWAZTable in the while" << QT_ENDL;
6573 nameCol = rec.indexOf("qsl_rcvd");
6574 bool qsl = false;
6575
6576 if ((query.value(nameCol)).toString() == "Y")
6577 {
6578 qsl = true;
6579 }
6580
6581 nameCol = rec.indexOf("lotw_qsl_rcvd");
6582 bool lotw = false;
6583 if ((query.value(nameCol)).toString() == "Y")
6584 {
6585 lotw = true;
6586 }
6587
6588 if (qsl || lotw )
6589 {
6590 awardEntry.status = "1";
6591 }
6592 else
6593 {
6594 awardEntry.status = "0";
6595 }
6596 //qDebug() << "DataBase::updateAwardWAZTable - status" << awardEntry.status << QT_ENDL;
6597 if ((awardEntry.status == "1") || (awardEntry.status == "0") )
6598 {
6599 nameCol = rec.indexOf("cqz");
6600 awardEntry.dxcc = (query.value(nameCol)).toString();
6601
6602 if ((awardEntry.dxcc).toInt()>0)
6603 {
6604 nameCol = rec.indexOf("bandid");
6605 awardEntry.band = (query.value(nameCol)).toString();
6606
6607 nameCol = rec.indexOf("modeid");
6608 awardEntry.mode = (query.value(nameCol)).toString();
6609
6610 nameCol = rec.indexOf("id");
6611 awardEntry.qsoID = (query.value(nameCol)).toString();
6612
6613 nameCol = rec.indexOf("lognumber");
6614 awardEntry.logNumber = (query.value(nameCol)).toString();
6615
6616 //qDebug() << "DataBase::updateAwardWAZTable: Adding: " << awardEntry.dxcc <<"/" << awardEntry.band <<"/" << awardEntry.mode <<"/" << awardEntry.status <<"/" << awardEntry.logNumber <<"/" << awardEntry.qsoID << QT_ENDL;
6617 dxccStatusList.append(awardEntry);
6618 }
6619 } // END OF IF VALID
6620 }
6621 } // END OF WHILE
6622
6623 //qDebug() << "DataBase::updateAwardWAZTable - END OF WHILE" << QT_ENDL;
6624
6625 query.finish();
6626
6627
6628 //qDebug() << "DataBase::updateAwardWAZTable: Log analized... let's clean the table!" << QT_ENDL;
6629
6630 stringQuery = QString("DELETE FROM awardwaz");
6631
6632 sqlOK = execQuery(Q_FUNC_INFO, stringQuery);
6633 if (!sqlOK)
6634 {return false;}
6635 else
6636 {
6637 //qDebug() << "DataBase::updateAwardWAZTable: awardwaz table DELETED" << QT_ENDL;
6638 }
6639
6640
6641 //qDebug() << "DataBase::updateAwardWAZTable: Now we start writing the table!!" << QT_ENDL;
6642
6643 //int i = 0;
6644 _aux.clear();
6645
6646 int qsos = dxccStatusList.length();
6647 int step = util->getProgresStepForDialog(qsos);
6648
6649 QProgressDialog progress(QObject::tr("Updating WAZ award information..."), QObject::tr("Abort updating"), 0, qsos);
6650 progress.setMaximum(qsos);
6651 progress.setWindowModality(Qt::WindowModal);
6652
6653 //qDebug() << "DataBase::updateAwardWAZTable: INSERTING: " << QString::number(qsos) << " QSOS..." << QT_ENDL;
6654
6655 for (int j=0;j<dxccStatusList.length();j++)
6656 {
6657 stringQuery = QString("INSERT INTO awardwaz (cqz, band, mode, confirmed, lognumber, qsoid) VALUES ('%1', '%2', '%3', '%4', '%5', '%6') ").arg(dxccStatusList.at(j).dxcc).arg(dxccStatusList.at(j).band).arg(dxccStatusList.at(j).mode).arg(dxccStatusList.at(j).status).arg(dxccStatusList.at(j).logNumber).arg(dxccStatusList.at(j).qsoID);
6658 //sqlOK = query.exec(Q_FUNC_INFO, stringQuery);
6659 sqlOK = query.exec(stringQuery);
6660 if (!sqlOK)
6661 {
6662 //qDebug() << "DataBase::updateAwardWAZTable: Error: " << QString::number(query.lastError().nativeErrorCode()) << QT_ENDL;
6663 if (query.lastError().nativeErrorCode() == 19)
6664 { // DUPLICATED RECORD: Means that there is already a record in the award... so this set is worked. QSL can be Y or N in the award but inthe log may be other options
6665 // We should only take into account if N or Y
6666 if (dxccStatusList.at(j).status!="1")
6667 { // If tne new status is not confirmed, no change. DO NOTHING
6668 //qDebug() << "DataBase::updateAwardWAZTable: Duplicated but DO NOTHING as new status is not Confirmed!!!" << QT_ENDL;
6669 }
6670 else
6671 {
6672 //qDebug() << "DataBase::updateAwardWAZTable: Duplicated but NOW is confirmed!!!" << QT_ENDL;
6673 stringQuery = QString("SELECT confirmed, lognumber, qsoid FROM awardwaz WHERE cqz='%1' AND band='%2' AND mode='%3'").arg(dxccStatusList.at(j).dxcc).arg(dxccStatusList.at(j).band).arg(dxccStatusList.at(j).mode);
6674 QSqlQuery query2;//, query2;
6675
6676 sqlOK = query2.exec(stringQuery);
6677 QSqlRecord rec = query2.record();
6678 if (!sqlOK)
6679 {
6680 queryErrorManagement(Q_FUNC_INFO, query2.lastError().databaseText(), query2.lastError().nativeErrorCode(), query2.lastQuery());
6681 query2.finish();
6682 // emit debugLog(Q_FUNC_INFO, "3", 7);
6683 return false;
6684 }
6685 else
6686 {
6687 query2.next();
6688 if (query2.isValid())
6689 {
6690 nameCol = rec.indexOf("confirmed");
6691 stringQuery = (query2.value(nameCol)).toString();
6692 QString _qsoid = QString();
6693 nameCol = rec.indexOf("qsoid");
6694 _qsoid = (query2.value(nameCol)).toString();
6695
6696 if ((stringQuery == "0") && (dxccStatusList.at(j).status == "1"))
6697 {
6698 query2.finish();
6699 stringQuery = QString ("UPDATE awardwaz SET confirmed = '1', qsoid = '%1' WHERE qsoid='%2'").arg(dxccStatusList.at(j).qsoID).arg(_qsoid);
6700 if (execQuery(Q_FUNC_INFO, stringQuery))
6701 {
6702 }
6703 else
6704 {
6705 //qDebug() << "DataBase::updateAwardWAZTable: Duplicated but UPDATE IS NOT DONE" << QT_ENDL;
6706 }
6707 }
6708 else
6709 {
6710 //qDebug() << "DataBase::updateAwardWAZTable: Duplicated but UPDATE NOT NEEDED" << QT_ENDL;
6711 }
6712 }
6713 else
6714 {
6715 //qDebug() << "DataBase::updateAwardWAZTable: Duplicated SELECT query is not Valid" << QT_ENDL;
6716 }
6717 }
6718 }
6719 //qDebug() << "DataBase::updateAwardWAZTable: Duplicated!" << QT_ENDL;
6720 }
6721 else
6722 {
6723 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6724 query.finish();
6725 // emit debugLog(Q_FUNC_INFO, "5", 7);
6726 return false;
6727 }
6728 }
6729 else
6730 {
6731 //qDebug() << "DataBase::updateAwardWAZTable: INSERT OK: " << QT_ENDL;
6732 }
6733
6734 query.finish();
6735 //qDebug() << "DataBase::updateAwardWAZTable: Checking steps " << QT_ENDL;
6736 if (( (j % step )== 0) )
6737 { // To update the speed I will only show the progress once each X QSOs
6738 _aux = QObject::tr("Updating WAZ Award information...") + "\n" + QObject::tr("QSO: ") + QString::number(j) + "/" + QString::number(qsos);
6739 progress.setLabelText(_aux);
6740 progress.setValue(j);
6741 }
6742 if ( progress.wasCanceled() )
6743 {
6744 //qDebug() << "DataBase::updateAwardWAZTable: progress canceled" << QT_ENDL;
6745 return true;
6746 }
6747 }
6748
6749 progress.setValue(qsos);
6750 //qDebug() << "DataBase::updateAwardWAZTable: LAST END OK " << QT_ENDL;
6751 return true;
6752 }
6753
6754
getNumberOfQsos(const int _logNumber)6755 int DataBase::getNumberOfQsos(const int _logNumber)
6756 {
6757 QString stringQuery = QString();
6758 if (_logNumber<1)
6759 {
6760 stringQuery = QString("SELECT COUNT (*) FROM log");
6761 }
6762 else
6763 {
6764 stringQuery = QString("SELECT COUNT (*) FROM log WHERE lognumber='%1'").arg(_logNumber);
6765 }
6766 QSqlQuery query;
6767 bool sqlOK = query.exec(stringQuery);
6768 int qsos = 0;
6769
6770 if (sqlOK)
6771 {
6772 //QSqlDatabase::database().commit();
6773 query.next();
6774 qsos = (query.value(0)).toInt();
6775 }
6776 else
6777 {
6778 queryErrorManagement(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6779 }
6780 query.finish();
6781 return qsos;
6782 }
6783
queryErrorManagement(const QString & _functionFailed,const QString & errorCodeS,const QString & _nativeError,const QString & _failedQuery)6784 void DataBase::queryErrorManagement(const QString &_functionFailed, const QString &errorCodeS, const QString &_nativeError, const QString &_failedQuery)
6785 {
6786 //qDebug() << "DataBase::queryErrorManagement: constrid - " << QString::number(constrid) << QT_ENDL;
6787 //qDebug() << "DataBase::queryErrorManagement: Function: " << functionFailed << QT_ENDL;
6788 //qDebug() << "DataBase::queryErrorManagement: Native: " << _nativeError << QT_ENDL;
6789 //qDebug() << "DataBase::queryErrorManagement: Error: " << functionFailed << errorCodeS << QT_ENDL;
6790 //qDebug() << "DataBase::queryErrorManagement: Query failed: " << failedQuery << QT_ENDL;
6791 }
6792
6793 /*
6794 bool DataBase::beginTransaction()
6795 {
6796 //qDebug() << "DataBase::beginTransaction: " << QT_ENDL;
6797 QSqlDatabase db = QSqlDatabase::database();
6798 db.setDatabaseName(dbName);
6799 return execQuery(Q_FUNC_INFO, "BEGIN IMMEDIATE TRANSACTION");
6800 }
6801
6802
6803 bool DataBase::commitTransaction()
6804 {
6805 //qDebug() << "DataBase::commitTransaction: " << QT_ENDL;
6806 return db.commit();
6807 }
6808
6809 */
6810
execQuery(const QString & function,const QString & stringQuery)6811 bool DataBase::execQuery(const QString &function, const QString &stringQuery)
6812 {
6813 //qDebug() << "DataBase::execQuery: " << function << " : " << stringQuery << QT_ENDL;
6814 QSqlQuery query;
6815
6816 if (query.exec(stringQuery))
6817 {
6818 while (query.isActive())
6819 {
6820 //qDebug() << "DataBase::execQuery: Still active... " << QT_ENDL;
6821 query.finish();
6822 }
6823 //qDebug() << "DataBase::execQuery: No longer active... " << QT_ENDL;
6824 return true;
6825 }
6826 else
6827 {
6828 queryErrorManagement(function, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
6829 query.finish();
6830 // emit debugLog(Q_FUNC_INFO, "1", 7);
6831 return false;
6832 }
6833 }
6834
6835