Moved code that writes to the ADIF log from logqso into logbook/adif

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3569 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Murray Curtis 2013-09-06 05:00:28 +00:00
parent 6f9d869baf
commit 2d696730b1
6 changed files with 120 additions and 83 deletions

View File

@ -2,6 +2,7 @@
#include <QFile> #include <QFile>
#include <QTextStream> #include <QTextStream>
#include <QDebug>
/* /*
<CALL:4>W1XT<BAND:3>20m<FREQ:6>14.076<GRIDSQUARE:4>DM33<MODE:4>JT65<RST_RCVD:3>-21<RST_SENT:3>-14<QSO_DATE:8>20110422<TIME_ON:4>0417<TIME_OFF:4>0424<TX_PWR:1>4<COMMENT:34>1st JT65A QSO. Him: mag loop 20W<STATION_CALLSIGN:6>VK3ACF<MY_GRIDSQUARE:6>qf22lb<eor> <CALL:4>W1XT<BAND:3>20m<FREQ:6>14.076<GRIDSQUARE:4>DM33<MODE:4>JT65<RST_RCVD:3>-21<RST_SENT:3>-14<QSO_DATE:8>20110422<TIME_ON:4>0417<TIME_OFF:4>0424<TX_PWR:1>4<COMMENT:34>1st JT65A QSO. Him: mag loop 20W<STATION_CALLSIGN:6>VK3ACF<MY_GRIDSQUARE:6>qf22lb<eor>
@ -73,14 +74,15 @@ void ADIF::load()
} }
void ADIF::add(const QString call) void ADIF::add(const QString call, const QString band, const QString mode, const QString date)
{ {
QSO q; QSO q;
q.call = call; q.call = call;
q.band = ""; //TODO q.band = band;
q.mode = "JT9"; //TODO q.mode = mode;
q.date = ""; //TODO q.date = date;
_data.insert(q.call,q); _data.insert(q.call,q);
//qDebug() << "Added as worked:" << call << band << mode << date;
} }
// return true if in the log same band and mode (where JT65 == JT9) // return true if in the log same band and mode (where JT65 == JT9)
@ -92,7 +94,7 @@ bool ADIF::match(const QString call, const QString band, const QString mode)
QSO q; QSO q;
foreach(q,qsos) foreach(q,qsos)
{ {
if ( (band.compare(q.band) == 0) if ( (band.compare(q.band,Qt::CaseInsensitive) == 0)
|| (band=="") || (band=="")
|| (q.band=="")) || (q.band==""))
{ {
@ -102,8 +104,9 @@ bool ADIF::match(const QString call, const QString band, const QString mode)
&& &&
((q.mode.compare("JT65",Qt::CaseInsensitive)==0) || (q.mode.compare("JT9",Qt::CaseInsensitive)==0)) ((q.mode.compare("JT65",Qt::CaseInsensitive)==0) || (q.mode.compare("JT9",Qt::CaseInsensitive)==0))
) )
|| (mode.compare(q.mode)==0) || (mode.compare(q.mode,Qt::CaseInsensitive)==0)
|| (mode=="") || (mode=="")
|| (q.mode=="")
) )
return true; return true;
} }
@ -129,3 +132,75 @@ int ADIF::getCount()
return _data.size(); return _data.size();
} }
// open ADIF file and append the QSO details. Return true on success
bool ADIF::addQSOToFile(const QString hisCall, const QString hisGrid, const QString mode, const QString rptSent, const QString rptRcvd, const QString date, const QString time, const QString band,
const QString comments, const QString name, const QString strDialFreq, const QString m_myCall, const QString m_myGrid, const QString m_txPower)
{
QFile f2(_filename);
if (!f2.open(QIODevice::Text | QIODevice::Append))
return false;
else
{
QTextStream out(&f2);
if (f2.size()==0)
out << "WSJT-X ADIF Export<eoh>" << endl; // new file
QString t;
t="<call:" + QString::number(hisCall.length()) + ">" + hisCall;
t+=" <gridsquare:" + QString::number(hisGrid.length()) + ">" + hisGrid;
t+=" <mode:" + QString::number(mode.length()) + ">" + mode;
t+=" <rst_sent:" + QString::number(rptSent.length()) + ">" + rptSent;
t+=" <rst_rcvd:" + QString::number(rptRcvd.length()) + ">" + rptRcvd;
t+=" <qso_date:8>" + date;
t+=" <time_on:4>" + time;
t+=" <band:" + QString::number(band.length()) + ">" + band;
t+=" <freq:" + QString::number(strDialFreq.length()) + ">" + strDialFreq;
t+=" <station_callsign:" + QString::number(m_myCall.length()) + ">" +
m_myCall;
t+=" <my_gridsquare:" + QString::number(m_myGrid.length()) + ">" +
m_myGrid;
if(m_txPower!="") t+= " <tx_pwr:" + QString::number(m_txPower.length()) +
">" + m_txPower;
if(comments!="") t+=" <comment:" + QString::number(comments.length()) +
">" + comments;
if(name!="") t+=" <name:" + QString::number(name.length()) +
">" + name;
t+=" <eor>";
out << t << endl;
f2.close();
}
return true;
}
QString ADIF::bandFromFrequency(double dialFreq)
{
QString band="";
if(dialFreq>0.135 and dialFreq<0.139) band="2200m";
else if(dialFreq>0.45 and dialFreq<0.55) band="630m";
else if(dialFreq>1.8 and dialFreq<2.0) band="160m";
else if(dialFreq>3.5 and dialFreq<4.0) band="80m";
else if(dialFreq>5.1 and dialFreq<5.45) band="60m";
else if(dialFreq>7.0 and dialFreq<7.3) band="40m";
else if(dialFreq>10.0 and dialFreq<10.15) band="30m";
else if(dialFreq>14.0 and dialFreq<14.35) band="20m";
else if(dialFreq>18.068 and dialFreq<18.168) band="17m";
else if(dialFreq>21.0 and dialFreq<21.45) band="15m";
else if(dialFreq>24.890 and dialFreq<24.990) band="12m";
else if(dialFreq>28.0 and dialFreq<29.7) band="10m";
else if(dialFreq>50.0 and dialFreq<54.0) band="6m";
else if(dialFreq>70.0 and dialFreq<71.0) band="4m";
else if(dialFreq>144.0 and dialFreq<148.0) band="2m";
else if(dialFreq>222.0 and dialFreq<225.0) band="1.25m";
else if(dialFreq>420.0 and dialFreq<450.0) band="70cm";
else if(dialFreq>902.0 and dialFreq<928.0) band="33cm";
else if(dialFreq>1240.0 and dialFreq<1300.0) band="23cm";
else if(dialFreq>2300.0 and dialFreq<2450.0) band="13cm";
else if(dialFreq>3300.0 and dialFreq<3500.0) band="9cm";
else if(dialFreq>5650.0 and dialFreq<5925.0) band="6cm";
else if(dialFreq>10000.0 and dialFreq<10500.0) band="3cm";
else if(dialFreq>24000.0 and dialFreq<24250.0) band="1.25cm";
else if(dialFreq>47000.0 and dialFreq<47200.0) band="6mm";
else if(dialFreq>75500.0 and dialFreq<81000.0) band="4mm";
return band;
}

View File

@ -22,11 +22,16 @@ class ADIF
public: public:
void init(QString filename); void init(QString filename);
void load(); void load();
void add(const QString call); void add(const QString call, const QString band, const QString mode, const QString date);
bool match(const QString call, const QString band, const QString mode); bool match(const QString call, const QString band, const QString mode);
QList<QString> getCallList(); QList<QString> getCallList();
int getCount(); int getCount();
// open ADIF file and append the QSO details. Return true on success
bool addQSOToFile(const QString hisCall, const QString hisGrid, const QString mode, const QString rptSent, const QString rptRcvd, const QString date, const QString time, const QString band,
const QString comments, const QString name, const QString strDialFreq, const QString m_myCall, const QString m_myGrid, const QString m_txPower);
static QString bandFromFrequency(double dialFreq);
private: private:
struct QSO struct QSO

View File

@ -70,10 +70,10 @@ void LogBook::match(/*in*/const QString call,
//qDebug() << "Logbook:" << call << ":" << countryName << "Cty B4:" << countryWorkedBefore << "call B4:" << callWorkedBefore; //qDebug() << "Logbook:" << call << ":" << countryName << "Cty B4:" << countryWorkedBefore << "call B4:" << callWorkedBefore;
} }
void LogBook::addAsWorked(const QString call) void LogBook::addAsWorked(const QString call, const QString band, const QString mode, const QString date)
{ {
//qDebug() << "adding " << call << " as worked"; //qDebug() << "adding " << call << " as worked";
_log.add(call); _log.add(call,band,mode,date);
QString countryName = _countries.find(call); QString countryName = _countries.find(call);
if (countryName.length() > 0) if (countryName.length() > 0)
_worked.setAsWorked(countryName); _worked.setAsWorked(countryName);

View File

@ -22,7 +22,7 @@ public:
/*out*/ QString &countryName, /*out*/ QString &countryName,
bool &callWorkedBefore, bool &callWorkedBefore,
bool &countryWorkedBefore); bool &countryWorkedBefore);
void addAsWorked(const QString call); void addAsWorked(const QString call, const QString band, const QString mode, const QString date);
private: private:
CountryDat _countries; CountryDat _countries;

View File

@ -1,5 +1,6 @@
#include "logqso.h" #include "logqso.h"
#include "ui_logqso.h" #include "ui_logqso.h"
#include "logbook/adif.h"
#include <QString> #include <QString>
#include <QDebug> #include <QDebug>
@ -70,33 +71,7 @@ void LogQSO::initLogQSO(QString hisCall, QString hisGrid, QString mode,
m_dialFreq=dialFreq; m_dialFreq=dialFreq;
m_myCall=myCall; m_myCall=myCall;
m_myGrid=myGrid; m_myGrid=myGrid;
QString band=""; QString band= ADIF::bandFromFrequency(dialFreq);
if(dialFreq>0.135 and dialFreq<0.139) band="2200m";
if(dialFreq>0.45 and dialFreq<0.55) band="630m";
if(dialFreq>1.8 and dialFreq<2.0) band="160m";
if(dialFreq>3.5 and dialFreq<4.0) band="80m";
if(dialFreq>5.1 and dialFreq<5.45) band="60m";
if(dialFreq>7.0 and dialFreq<7.3) band="40m";
if(dialFreq>10.0 and dialFreq<10.15) band="30m";
if(dialFreq>14.0 and dialFreq<14.35) band="20m";
if(dialFreq>18.068 and dialFreq<18.168) band="17m";
if(dialFreq>21.0 and dialFreq<21.45) band="15m";
if(dialFreq>24.890 and dialFreq<24.990) band="12m";
if(dialFreq>28.0 and dialFreq<29.7) band="10m";
if(dialFreq>50.0 and dialFreq<54.0) band="6m";
if(dialFreq>70.0 and dialFreq<71.0) band="4m";
if(dialFreq>144.0 and dialFreq<148.0) band="2m";
if(dialFreq>222.0 and dialFreq<225.0) band="1.25m";
if(dialFreq>420.0 and dialFreq<450.0) band="70cm";
if(dialFreq>902.0 and dialFreq<928.0) band="33cm";
if(dialFreq>1240.0 and dialFreq<1300.0) band="23cm";
if(dialFreq>2300.0 and dialFreq<2450.0) band="13cm";
if(dialFreq>3300.0 and dialFreq<3500.0) band="9cm";
if(dialFreq>5650.0 and dialFreq<5925.0) band="6cm";
if(dialFreq>10000.0 and dialFreq<10500.0) band="3cm";
if(dialFreq>24000.0 and dialFreq<24250.0) band="1.25cm";
if(dialFreq>47000.0 and dialFreq<47200.0) band="6mm";
if(dialFreq>75500.0 and dialFreq<81000.0) band="4mm";
ui->band->setText(band); ui->band->setText(band);
show (); show ();
@ -122,39 +97,15 @@ void LogQSO::accept()
m_comments=comments; m_comments=comments;
QString strDialFreq(QString::number(m_dialFreq,'f',6)); QString strDialFreq(QString::number(m_dialFreq,'f',6));
//Log this QSO to file "wsjtx_log.adi" //Log this QSO to ADIF file "wsjtx_log.adi"
QFile f2("wsjtx_log.adi"); QString filename = "wsjtx_log.adi"; // TODO allow user to set
if(!f2.open(QIODevice::Text | QIODevice::Append)) { ADIF adifile;
adifile.init(filename);
if (!adifile.addQSOToFile(hisCall,hisGrid,mode,rptSent,rptRcvd,date,time,band,comments,name,strDialFreq,m_myCall,m_myGrid,m_txPower))
{
QMessageBox m; QMessageBox m;
m.setText("Cannot open file \"wsjtx_log.adi\"."); m.setText("Cannot open file \"wsjtx_log.adi\".");
m.exec(); m.exec();
} else {
QTextStream out(&f2);
if(f2.size()==0) out << "WSJT-X ADIF Export<eoh>" << endl;
QString t;
t="<call:" + QString::number(hisCall.length()) + ">" + hisCall;
t+=" <gridsquare:" + QString::number(hisGrid.length()) + ">" + hisGrid;
t+=" <mode:" + QString::number(mode.length()) + ">" + mode;
t+=" <rst_sent:" + QString::number(rptSent.length()) + ">" + rptSent;
t+=" <rst_rcvd:" + QString::number(rptRcvd.length()) + ">" + rptRcvd;
t+=" <qso_date:8>" + date;
t+=" <time_on:4>" + time;
t+=" <band:" + QString::number(band.length()) + ">" + band;
t+=" <freq:" + QString::number(strDialFreq.length()) + ">" + strDialFreq;
t+=" <station_callsign:" + QString::number(m_myCall.length()) + ">" +
m_myCall;
t+=" <my_gridsquare:" + QString::number(m_myGrid.length()) + ">" +
m_myGrid;
if(m_txPower!="") t+= " <tx_pwr:" + QString::number(m_txPower.length()) +
">" + m_txPower;
if(comments!="") t+=" <comment:" + QString::number(comments.length()) +
">" + comments;
if(name!="") t+=" <name:" + QString::number(name.length()) +
">" + name;
t+=" <eor>";
out << t << endl;
f2.close();
} }
//Log this QSO to file "wsjtx.log" //Log this QSO to file "wsjtx.log"

View File

@ -2447,9 +2447,15 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button
void MainWindow::acceptQSO2(bool accepted) void MainWindow::acceptQSO2(bool accepted)
{ {
if(accepted) { if(accepted)
m_logBook.addAsWorked(m_hisCall); {
if(m_clearCallGrid) { QString band = ADIF::bandFromFrequency(m_dialFreq+m_txFreq/1.0e6);
QString date = m_dateTimeQSO.toString("yyyy-MM-dd");
date=date.mid(0,4) + date.mid(5,2) + date.mid(8,2);
m_logBook.addAsWorked(m_hisCall,band,m_modeTx,date);
if (m_clearCallGrid)
{
m_hisCall=""; m_hisCall="";
ui->dxCallEntry->setText(""); ui->dxCallEntry->setText("");
m_hisGrid=""; m_hisGrid="";