Log FT8 DXpedition mode dupe contacts

Not logging dupes seems to cuase  problems with QSL matching where the
Hound  fails  to   log  when  an  RR73  message   is  not  succesfully
received. By logging dupes a later retry  by a Hound to complete a QSO
will be recorded in the Fox's log.
This commit is contained in:
Bill Somerville 2019-11-18 16:45:16 +00:00
parent 58c901240b
commit 5e769f3e85
No known key found for this signature in database
GPG Key ID: D864B06D1E81618F
1 changed files with 46 additions and 10 deletions

View File

@ -47,6 +47,21 @@ public:
#include "FoxLog.moc"
namespace
{
QString const fox_log_ddl {
"CREATE %1 TABLE fox_log%2 ("
" id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
" \"when\" DATETIME NOT NULL,"
" call VARCHAR(20) NOT NULL,"
" grid VARCHAR(4),"
" report_sent VARCHAR(3),"
" report_rcvd VARCHAR(3),"
" band VARCHAR(6) NOT NULL"
")"
};
}
FoxLog::impl::impl (Configuration const * configuration)
: configuration_ {configuration}
{
@ -54,16 +69,37 @@ FoxLog::impl::impl (Configuration const * configuration)
{
QSqlQuery query;
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
"CREATE TABLE fox_log ("
" id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
" \"when\" DATETIME NOT NULL,"
" call VARCHAR(20) NOT NULL,"
" grid VARCHAR(4),"
" report_sent VARCHAR(3),"
" report_rcvd VARCHAR(3),"
" band VARCHAR(6) NOT NULL,"
" CONSTRAINT no_dupes UNIQUE (call, band)"
")");
fox_log_ddl.arg ("").arg (""));
}
else
{
QSqlQuery query;
// query to check if table has a unique constraint
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
"SELECT COUNT(*)"
" FROM sqlite_master"
" WHERE"
" type = 'index' AND tbl_name = 'fox_log'");
query.next ();
if (query.value (0).toInt ())
{
// update to new schema with no dupe disallowing unique
// constraint
database ().transaction ();
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
fox_log_ddl.arg ("TEMPORARY").arg ("_backup"));
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
"INSERT INTO fox_log_backup SELECT * from fox_log");
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
"DROP TABLE fox_log");
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
fox_log_ddl.arg ("").arg (""));
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
"INSERT INTO fox_log SELECT * from fox_log_backup");
SQL_error_check (query, static_cast<bool (QSqlQuery::*) (QString const&)> (&QSqlQuery::exec),
"DROP TABLE fox_log_backup");
database ().commit ();
}
}
SQL_error_check (dupe_query_, &QSqlQuery::prepare,