mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 05:38:46 -05:00
Fix some signoff issues with auto-sequencing
73 messages from other QSOs on frequency should now be ignored rather than being processed. Also some long overdue refactoring and tidying of non-idiomatic C++ code in the logbook directory. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8047 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
683e35fdec
commit
363c469b55
133
decodedtext.cpp
133
decodedtext.cpp
@ -7,48 +7,79 @@ extern "C" {
|
||||
bool stdmsg_(const char* msg, int len);
|
||||
}
|
||||
|
||||
QString DecodedText::CQersCall()
|
||||
DecodedText::DecodedText (QString const& the_string)
|
||||
: string_ {the_string}
|
||||
, padding_ {the_string.indexOf (" ") > 4 ? 2 : 0} // allow for
|
||||
// seconds
|
||||
, message_ {string_.mid (column_qsoText + padding_).trimmed ()}
|
||||
, is_standard_ {false}
|
||||
{
|
||||
QRegularExpression callsign_re {R"(\s(CQ|DE|QRZ)(\s?DX|\s([A-Z]{2}|\d{3}))?\s(?<callsign>[A-Z0-9/]{2,})(\s[A-R]{2}[0-9]{2})?)"};
|
||||
return callsign_re.match (_string).captured ("callsign");
|
||||
if (message_.length() >= 1)
|
||||
{
|
||||
message_ = message_.left (22).remove (QRegularExpression {"[<>]"});
|
||||
int i1 = message_.indexOf ('\r');
|
||||
if (i1 > 0)
|
||||
{
|
||||
message_ = message_.left (i1 - 1);
|
||||
}
|
||||
// stdmsg is a fortran routine that packs the text, unpacks it and compares the result
|
||||
is_standard_ = stdmsg_ ((message_ + " ").toLatin1 ().constData (),22);
|
||||
}
|
||||
};
|
||||
|
||||
void DecodedText::removeAddedInfo ()
|
||||
{
|
||||
if (string_.indexOf (" CQ ") > 0) {
|
||||
// TODO this magic 37 characters is also referenced in DisplayText::_appendDXCCWorkedB4()
|
||||
auto eom_pos = string_.indexOf (' ', 37);
|
||||
if (eom_pos < 37) eom_pos = string_.size () - 1; // we always want at least the characters
|
||||
// to position 37
|
||||
string_ = string_.left (eom_pos + 1); // remove DXCC entity and worked B4 status. TODO need a better way to do this
|
||||
}
|
||||
}
|
||||
|
||||
QString DecodedText::CQersCall() const
|
||||
{
|
||||
QRegularExpression callsign_re {R"(^(CQ|DE|QRZ)(\s?DX|\s([A-Z]{2}|\d{3}))?\s(?<callsign>[A-Z0-9/]{2,})(\s[A-R]{2}[0-9]{2})?)"};
|
||||
return callsign_re.match (message_).captured ("callsign");
|
||||
}
|
||||
|
||||
|
||||
bool DecodedText::isJT65()
|
||||
bool DecodedText::isJT65() const
|
||||
{
|
||||
return _string.indexOf("#") == column_mode + padding_;
|
||||
return string_.indexOf("#") == column_mode + padding_;
|
||||
}
|
||||
|
||||
bool DecodedText::isJT9()
|
||||
bool DecodedText::isJT9() const
|
||||
{
|
||||
return _string.indexOf("@") == column_mode + padding_;
|
||||
return string_.indexOf("@") == column_mode + padding_;
|
||||
}
|
||||
|
||||
bool DecodedText::isTX()
|
||||
bool DecodedText::isTX() const
|
||||
{
|
||||
int i = _string.indexOf("Tx");
|
||||
int i = string_.indexOf("Tx");
|
||||
return (i >= 0 && i < 15); // TODO guessing those numbers. Does Tx ever move?
|
||||
}
|
||||
|
||||
bool DecodedText::isLowConfidence ()
|
||||
bool DecodedText::isLowConfidence () const
|
||||
{
|
||||
return QChar {'?'} == _string.mid (padding_ + column_qsoText + 21, 1);
|
||||
return QChar {'?'} == string_.mid (padding_ + column_qsoText + 21, 1);
|
||||
}
|
||||
|
||||
int DecodedText::frequencyOffset()
|
||||
int DecodedText::frequencyOffset() const
|
||||
{
|
||||
return _string.mid(column_freq + padding_,4).toInt();
|
||||
return string_.mid(column_freq + padding_,4).toInt();
|
||||
}
|
||||
|
||||
int DecodedText::snr()
|
||||
int DecodedText::snr() const
|
||||
{
|
||||
int i1=_string.indexOf(" ")+1;
|
||||
return _string.mid(i1,3).toInt();
|
||||
int i1=string_.indexOf(" ")+1;
|
||||
return string_.mid(i1,3).toInt();
|
||||
}
|
||||
|
||||
float DecodedText::dt()
|
||||
float DecodedText::dt() const
|
||||
{
|
||||
return _string.mid(column_dt + padding_,5).toFloat();
|
||||
return string_.mid(column_dt + padding_,5).toFloat();
|
||||
}
|
||||
|
||||
/*
|
||||
@ -61,62 +92,56 @@ float DecodedText::dt()
|
||||
*/
|
||||
|
||||
// find and extract any report. Returns true if this is a standard message
|
||||
bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /*mod*/QString& report)
|
||||
bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, /*mod*/QString& report) const
|
||||
{
|
||||
QString msg=_string.mid(column_qsoText + padding_).trimmed();
|
||||
if(msg.length() < 1) return false;
|
||||
msg = msg.left (22).remove (QRegularExpression {"[<>]"});
|
||||
int i1=msg.indexOf('\r');
|
||||
if (i1>0)
|
||||
msg=msg.left (i1-1);
|
||||
bool b = stdmsg_ ((msg + " ").toLatin1().constData(),22); // stdmsg is a fortran routine that packs the text, unpacks it and compares the result
|
||||
if (message_.size () < 1) return false;
|
||||
|
||||
QStringList w=msg.split(" ",QString::SkipEmptyParts);
|
||||
if(w.size ()
|
||||
&& b && (w[0] == myBaseCall
|
||||
|| w[0].endsWith ("/" + myBaseCall)
|
||||
|| w[0].startsWith (myBaseCall + "/")
|
||||
|| (w.size () > 1 && !dxBaseCall.isEmpty ()
|
||||
&& (w[1] == dxBaseCall
|
||||
|| w[1].endsWith ("/" + dxBaseCall)
|
||||
|| w[1].startsWith (dxBaseCall + "/")))))
|
||||
QStringList const& w = message_.split(" ",QString::SkipEmptyParts);
|
||||
if (w.size ()
|
||||
&& is_standard_ && (w[0] == myBaseCall
|
||||
|| w[0].endsWith ("/" + myBaseCall)
|
||||
|| w[0].startsWith (myBaseCall + "/")
|
||||
|| (w.size () > 1 && !dxBaseCall.isEmpty ()
|
||||
&& (w[1] == dxBaseCall
|
||||
|| w[1].endsWith ("/" + dxBaseCall)
|
||||
|| w[1].startsWith (dxBaseCall + "/")))))
|
||||
{
|
||||
QString tt="";
|
||||
if(w.size() > 2) tt=w[2];
|
||||
bool ok;
|
||||
i1=tt.toInt(&ok);
|
||||
if (ok and i1>=-50 and i1<50)
|
||||
QString tt="";
|
||||
if(w.size() > 2) tt=w[2];
|
||||
bool ok;
|
||||
auto i1=tt.toInt(&ok);
|
||||
if (ok and i1>=-50 and i1<50)
|
||||
{
|
||||
report = tt;
|
||||
report = tt;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
if (tt.mid(0,1)=="R")
|
||||
if (tt.mid(0,1)=="R")
|
||||
{
|
||||
i1=tt.mid(1).toInt(&ok);
|
||||
if(ok and i1>=-50 and i1<50)
|
||||
i1=tt.mid(1).toInt(&ok);
|
||||
if(ok and i1>=-50 and i1<50)
|
||||
{
|
||||
report = tt.mid(1);
|
||||
report = tt.mid(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return b;
|
||||
return is_standard_;
|
||||
}
|
||||
|
||||
// get the first text word, usually the call
|
||||
QString DecodedText::call()
|
||||
QString DecodedText::call() const
|
||||
{
|
||||
auto call = _string;
|
||||
auto call = string_;
|
||||
call = call.replace (QRegularExpression {" CQ ([A-Z]{2,2}|[0-9]{3,3}) "}, " CQ_\\1 ").mid (column_qsoText + padding_);
|
||||
int i = call.indexOf(" ");
|
||||
return call.mid(0,i);
|
||||
}
|
||||
|
||||
// get the second word, most likely the de call and the third word, most likely grid
|
||||
void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid)
|
||||
void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid) const
|
||||
{
|
||||
auto msg = _string;
|
||||
auto msg = string_;
|
||||
if(msg.mid(4,1)!=" ") msg=msg.mid(0,4)+msg.mid(6,-1); //Remove seconds from UTC
|
||||
msg = msg.replace (QRegularExpression {" CQ ([A-Z]{2,2}|[0-9]{3,3}) "}, " CQ_\\1 ").mid (column_qsoText + padding_);
|
||||
int i1 = msg.indexOf (" ");
|
||||
@ -133,9 +158,9 @@ void DecodedText::deCallAndGrid(/*out*/QString& call, QString& grid)
|
||||
call = call.left (i2).replace (">", "");
|
||||
}
|
||||
|
||||
int DecodedText::timeInSeconds()
|
||||
int DecodedText::timeInSeconds() const
|
||||
{
|
||||
return 60*_string.mid(column_time,2).toInt() + _string.mid(2,2).toInt();
|
||||
return 60*string_.mid(column_time,2).toInt() + string_.mid(2,2).toInt();
|
||||
}
|
||||
|
||||
/*
|
||||
@ -147,7 +172,7 @@ int DecodedText::timeInSeconds()
|
||||
0605 Tx 1259 # CQ VK3ACF QF22
|
||||
*/
|
||||
|
||||
QString DecodedText::report() // returns a string of the SNR field with a leading + or - followed by two digits
|
||||
QString DecodedText::report() const // returns a string of the SNR field with a leading + or - followed by two digits
|
||||
{
|
||||
int sr = snr();
|
||||
if (sr<-50)
|
||||
|
@ -27,54 +27,41 @@
|
||||
class DecodedText
|
||||
{
|
||||
public:
|
||||
void operator=(const QString &rhs)
|
||||
{
|
||||
_string = rhs;
|
||||
padding_ = _string.indexOf (" ") > 4 ? 2 : 0; // allow for seconds
|
||||
};
|
||||
void operator=(const QByteArray &rhs)
|
||||
{
|
||||
_string = rhs;
|
||||
padding_ = _string.indexOf (" ") > 4 ? 2 : 0; // allow for seconds
|
||||
};
|
||||
explicit DecodedText (QString const&);
|
||||
|
||||
void operator+=(const QString &rhs)
|
||||
{
|
||||
_string += rhs;
|
||||
};
|
||||
QString string() const { return string_; };
|
||||
void removeAddedInfo ();
|
||||
int indexOf(QString s) const { return string_.indexOf(s); };
|
||||
int indexOf(QString s, int i) const { return string_.indexOf(s,i); };
|
||||
QString mid(int f, int t) const { return string_.mid(f,t); };
|
||||
QString left(int i) const { return string_.left(i); };
|
||||
|
||||
QString string() { return _string; };
|
||||
void clear() { string_.clear(); };
|
||||
|
||||
int indexOf(QString s) { return _string.indexOf(s); };
|
||||
int indexOf(QString s, int i) { return _string.indexOf(s,i); };
|
||||
QString mid(int f, int t) { return _string.mid(f,t); };
|
||||
QString left(int i) { return _string.left(i); };
|
||||
QString CQersCall() const;
|
||||
|
||||
void clear() { _string.clear(); };
|
||||
|
||||
QString CQersCall();
|
||||
|
||||
bool isJT65();
|
||||
bool isJT9();
|
||||
bool isTX();
|
||||
bool isLowConfidence ();
|
||||
int frequencyOffset(); // hertz offset from the tuned dial or rx frequency, aka audio frequency
|
||||
int snr();
|
||||
float dt();
|
||||
bool isJT65() const;
|
||||
bool isJT9() const;
|
||||
bool isTX() const;
|
||||
bool isStandardMessage () const {return is_standard_;}
|
||||
bool isLowConfidence () const;
|
||||
int frequencyOffset() const; // hertz offset from the tuned dial or rx frequency, aka audio frequency
|
||||
int snr() const;
|
||||
float dt() const;
|
||||
|
||||
// find and extract any report. Returns true if this is a standard message
|
||||
bool report(QString const& myBaseCall, QString const& dxBaseCall, /*mod*/QString& report);
|
||||
bool report(QString const& myBaseCall, QString const& dxBaseCall, /*mod*/QString& report) const;
|
||||
|
||||
// get the first message text word, usually the call
|
||||
QString call();
|
||||
QString call() const;
|
||||
|
||||
// get the second word, most likely the de call and the third word, most likely grid
|
||||
void deCallAndGrid(/*out*/QString& call, QString& grid);
|
||||
void deCallAndGrid(/*out*/QString& call, QString& grid) const;
|
||||
|
||||
int timeInSeconds();
|
||||
int timeInSeconds() const;
|
||||
|
||||
// returns a string of the SNR field with a leading + or - followed by two digits
|
||||
QString report();
|
||||
QString report() const;
|
||||
|
||||
private:
|
||||
// These define the columns in the decoded text where fields are to be found.
|
||||
@ -86,8 +73,10 @@ private:
|
||||
column_mode = 19,
|
||||
column_qsoText = 22 };
|
||||
|
||||
QString _string;
|
||||
QString string_;
|
||||
int padding_;
|
||||
QString message_;
|
||||
bool is_standard_;
|
||||
};
|
||||
|
||||
#endif // DECODEDTEXT_H
|
||||
|
@ -81,7 +81,7 @@ void DisplayText::appendText(QString const& text, QColor bg)
|
||||
|
||||
|
||||
QString DisplayText::appendDXCCWorkedB4(QString message, QString const& callsign, QColor * bg,
|
||||
LogBook logBook, QColor color_CQ,
|
||||
LogBook const& logBook, QColor color_CQ,
|
||||
QColor color_DXCC,
|
||||
QColor color_NewCall)
|
||||
{
|
||||
@ -158,8 +158,8 @@ QString DisplayText::appendDXCCWorkedB4(QString message, QString const& callsign
|
||||
return message;
|
||||
}
|
||||
|
||||
void DisplayText::displayDecodedText(DecodedText decodedText, QString myCall,
|
||||
bool displayDXCCEntity, LogBook logBook,
|
||||
void DisplayText::displayDecodedText(DecodedText const& decodedText, QString const& myCall,
|
||||
bool displayDXCCEntity, LogBook const& logBook,
|
||||
QColor color_CQ, QColor color_MyCall,
|
||||
QColor color_DXCC, QColor color_NewCall)
|
||||
{
|
||||
|
@ -17,8 +17,8 @@ public:
|
||||
|
||||
void setContentFont (QFont const&);
|
||||
void insertLineSpacer(QString const&);
|
||||
void displayDecodedText(DecodedText decodedText, QString myCall, bool displayDXCCEntity,
|
||||
LogBook logBook, QColor color_CQ, QColor color_MyCall,
|
||||
void displayDecodedText(DecodedText const& decodedText, QString const& myCall, bool displayDXCCEntity,
|
||||
LogBook const& logBook, QColor color_CQ, QColor color_MyCall,
|
||||
QColor color_DXCC, QColor color_NewCall);
|
||||
void displayTransmittedText(QString text, QString modeTx, qint32 txFreq,
|
||||
QColor color_TxMsg, bool bFastMode);
|
||||
@ -32,7 +32,7 @@ protected:
|
||||
void mouseDoubleClickEvent(QMouseEvent *e);
|
||||
|
||||
private:
|
||||
QString appendDXCCWorkedB4(QString message, QString const& callsign, QColor * bg, LogBook logBook,
|
||||
QString appendDXCCWorkedB4(QString message, QString const& callsign, QColor * bg, LogBook const& logBook,
|
||||
QColor color_CQ, QColor color_DXCC, QColor color_NewCall);
|
||||
|
||||
QFont char_font_;
|
||||
|
@ -18,7 +18,7 @@ void ADIF::init(QString const& filename)
|
||||
}
|
||||
|
||||
|
||||
QString ADIF::_extractField(QString const& line, QString const& fieldName)
|
||||
QString ADIF::_extractField(QString const& line, QString const& fieldName) const
|
||||
{
|
||||
int fieldNameIndex = line.indexOf(fieldName,0,Qt::CaseInsensitive);
|
||||
if (fieldNameIndex >=0)
|
||||
@ -87,7 +87,7 @@ void ADIF::add(QString const& call, QString const& band, QString const& mode, QS
|
||||
}
|
||||
|
||||
// return true if in the log same band and mode (where JT65 == JT9)
|
||||
bool ADIF::match(QString const& call, QString const& band, QString const& mode)
|
||||
bool ADIF::match(QString const& call, QString const& band, QString const& mode) const
|
||||
{
|
||||
QList<QSO> qsos = _data.values(call);
|
||||
if (qsos.size()>0)
|
||||
@ -120,7 +120,7 @@ bool ADIF::match(QString const& call, QString const& band, QString const& mode)
|
||||
return false;
|
||||
}
|
||||
|
||||
QList<QString> ADIF::getCallList()
|
||||
QList<QString> ADIF::getCallList() const
|
||||
{
|
||||
QList<QString> p;
|
||||
QMultiHash<QString,QSO>::const_iterator i = _data.constBegin();
|
||||
@ -132,7 +132,7 @@ QList<QString> ADIF::getCallList()
|
||||
return p;
|
||||
}
|
||||
|
||||
int ADIF::getCount()
|
||||
int ADIF::getCount() const
|
||||
{
|
||||
return _data.size();
|
||||
}
|
||||
|
@ -21,18 +21,18 @@ class QDateTime;
|
||||
class ADIF
|
||||
{
|
||||
public:
|
||||
void init(QString const& filename);
|
||||
void load();
|
||||
void add(QString const& call, QString const& band, QString const& mode, QString const& date);
|
||||
bool match(QString const& call, QString const& band, QString const& mode);
|
||||
QList<QString> getCallList();
|
||||
int getCount();
|
||||
void init(QString const& filename);
|
||||
void load();
|
||||
void add(QString const& call, QString const& band, QString const& mode, QString const& date);
|
||||
bool match(QString const& call, QString const& band, QString const& mode) const;
|
||||
QList<QString> getCallList() const;
|
||||
int getCount() const;
|
||||
|
||||
// open ADIF file and append the QSO details. Return true on success
|
||||
bool addQSOToFile(QString const& hisCall, QString const& hisGrid, QString const& mode, QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn, QDateTime const& dateTimeOff, QString const& band,
|
||||
QString const& comments, QString const& name, QString const& strDialFreq, QString const& m_myCall, QString const& m_myGrid, QString const& m_txPower);
|
||||
bool addQSOToFile(QString const& hisCall, QString const& hisGrid, QString const& mode, QString const& rptSent, QString const& rptRcvd, QDateTime const& dateTimeOn, QDateTime const& dateTimeOff, QString const& band,
|
||||
QString const& comments, QString const& name, QString const& strDialFreq, QString const& m_myCall, QString const& m_myGrid, QString const& m_txPower);
|
||||
|
||||
static QString bandFromFrequency(double dialFreq);
|
||||
static QString bandFromFrequency(double dialFreq);
|
||||
|
||||
private:
|
||||
struct QSO
|
||||
@ -43,7 +43,7 @@ class ADIF
|
||||
QMultiHash<QString, QSO> _data;
|
||||
QString _filename;
|
||||
|
||||
QString _extractField(QString const& line, QString const& fieldName);
|
||||
QString _extractField(QString const& line, QString const& fieldName) const;
|
||||
};
|
||||
|
||||
|
||||
|
@ -13,7 +13,7 @@ void CountriesWorked::setAsWorked(const QString countryName)
|
||||
_data.insert(countryName,true);
|
||||
}
|
||||
|
||||
bool CountriesWorked::getHasWorked(const QString countryName)
|
||||
bool CountriesWorked::getHasWorked(const QString countryName) const
|
||||
{
|
||||
if (_data.contains(countryName))
|
||||
return _data.value(countryName);
|
||||
@ -21,7 +21,7 @@ bool CountriesWorked::getHasWorked(const QString countryName)
|
||||
return false;
|
||||
}
|
||||
|
||||
int CountriesWorked::getWorkedCount()
|
||||
int CountriesWorked::getWorkedCount() const
|
||||
{
|
||||
int count = 0;
|
||||
foreach (bool value,_data)
|
||||
@ -30,7 +30,7 @@ int CountriesWorked::getWorkedCount()
|
||||
return count;
|
||||
}
|
||||
|
||||
int CountriesWorked::getSize()
|
||||
int CountriesWorked::getSize() const
|
||||
{
|
||||
return _data.count();
|
||||
}
|
||||
|
@ -14,15 +14,15 @@
|
||||
|
||||
class CountriesWorked
|
||||
{
|
||||
public:
|
||||
void init(const QStringList countryNames);
|
||||
void setAsWorked(const QString countryName);
|
||||
bool getHasWorked(const QString countryName);
|
||||
int getWorkedCount();
|
||||
int getSize();
|
||||
public:
|
||||
void init(const QStringList countryNames);
|
||||
void setAsWorked(const QString countryName);
|
||||
bool getHasWorked(const QString countryName) const;
|
||||
int getWorkedCount() const;
|
||||
int getSize() const;
|
||||
|
||||
private:
|
||||
QHash<QString, bool> _data;
|
||||
private:
|
||||
QHash<QString, bool> _data;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -26,7 +26,7 @@ void CountryDat::init(const QString filename)
|
||||
_data.clear();
|
||||
}
|
||||
|
||||
QString CountryDat::_extractName(const QString line)
|
||||
QString CountryDat::_extractName(const QString line) const
|
||||
{
|
||||
int s1 = line.indexOf(':');
|
||||
if (s1>=0)
|
||||
@ -37,7 +37,7 @@ QString CountryDat::_extractName(const QString line)
|
||||
return "";
|
||||
}
|
||||
|
||||
void CountryDat::_removeBrackets(QString &line, const QString a, const QString b)
|
||||
void CountryDat::_removeBrackets(QString &line, const QString a, const QString b) const
|
||||
{
|
||||
int s1 = line.indexOf(a);
|
||||
while (s1 >= 0)
|
||||
@ -48,7 +48,7 @@ void CountryDat::_removeBrackets(QString &line, const QString a, const QString b
|
||||
}
|
||||
}
|
||||
|
||||
QStringList CountryDat::_extractPrefix(QString &line, bool &more)
|
||||
QStringList CountryDat::_extractPrefix(QString &line, bool &more) const
|
||||
{
|
||||
line = line.remove(" \n");
|
||||
line = line.replace("=","");
|
||||
@ -117,7 +117,7 @@ void CountryDat::load()
|
||||
}
|
||||
|
||||
// return country name else ""
|
||||
QString CountryDat::find(QString prefix)
|
||||
QString CountryDat::find(QString prefix) const
|
||||
{
|
||||
prefix = prefix.toUpper ();
|
||||
auto pf = prefix;
|
||||
@ -143,6 +143,3 @@ QString CountryDat::find(QString prefix)
|
||||
}
|
||||
return QString {};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -19,13 +19,13 @@ class CountryDat
|
||||
public:
|
||||
void init(const QString filename);
|
||||
void load();
|
||||
QString find(QString prefix); // return country name or ""
|
||||
QStringList getCountryNames() { return _countryNames; };
|
||||
QString find(QString prefix) const; // return country name or ""
|
||||
QStringList getCountryNames() const { return _countryNames; };
|
||||
|
||||
private:
|
||||
QString _extractName(const QString line);
|
||||
void _removeBrackets(QString &line, const QString a, const QString b);
|
||||
QStringList _extractPrefix(QString &line, bool &more);
|
||||
QString _extractName(const QString line) const;
|
||||
void _removeBrackets(QString &line, const QString a, const QString b) const;
|
||||
QStringList _extractPrefix(QString &line, bool &more) const;
|
||||
|
||||
QString _filename;
|
||||
QStringList _countryNames;
|
||||
|
@ -67,7 +67,7 @@ void LogBook::_setAlreadyWorkedFromLog()
|
||||
void LogBook::match(/*in*/const QString call,
|
||||
/*out*/ QString &countryName,
|
||||
bool &callWorkedBefore,
|
||||
bool &countryWorkedBefore)
|
||||
bool &countryWorkedBefore) const
|
||||
{
|
||||
if (call.length() > 0)
|
||||
{
|
||||
|
@ -23,7 +23,7 @@ public:
|
||||
void match(/*in*/ const QString call,
|
||||
/*out*/ QString &countryName,
|
||||
bool &callWorkedBefore,
|
||||
bool &countryWorkedBefore);
|
||||
bool &countryWorkedBefore) const;
|
||||
void addAsWorked(const QString call, const QString band, const QString mode, const QString date);
|
||||
|
||||
private:
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "widegraph.h"
|
||||
#include "sleep.h"
|
||||
#include "logqso.h"
|
||||
#include "decodedtext.h"
|
||||
#include "Radio.hpp"
|
||||
#include "Bands.hpp"
|
||||
#include "TransceiverFactory.hpp"
|
||||
@ -690,7 +691,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
connect(m_wideGraph.data (), SIGNAL(setFreq3(int,int)),this,
|
||||
SLOT(setFreq4(int,int)));
|
||||
|
||||
m_QSOText.clear();
|
||||
decodeBusy(false);
|
||||
QString t1[28]={"1 uW","2 uW","5 uW","10 uW","20 uW","50 uW","100 uW","200 uW","500 uW",
|
||||
"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW",
|
||||
@ -1191,8 +1191,7 @@ void MainWindow::dataSink(qint64 frames)
|
||||
int ftol = ui->sbFtol->value ();
|
||||
freqcal_(&dec_data.d2[0],&k,&nkhz,&RxFreq,&ftol,&line[0],80);
|
||||
QString t=QString::fromLatin1(line);
|
||||
DecodedText decodedtext;
|
||||
decodedtext=t;
|
||||
DecodedText decodedtext {t};
|
||||
ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_config.DXCC(),
|
||||
m_logBook,m_config.color_CQ(),m_config.color_MyCall(),m_config.color_DXCC(),
|
||||
m_config.color_NewCall());
|
||||
@ -1426,10 +1425,8 @@ void MainWindow::fastSink(qint64 frames)
|
||||
m_fastGraph->plotSpec(m_diskData,m_UTCdisk);
|
||||
|
||||
if(bmsk144 and (line[0]!=0)) {
|
||||
DecodedText decodedtext;
|
||||
QString message;
|
||||
message=QString::fromLatin1(line);
|
||||
decodedtext=message.replace(QChar::LineFeed,"");
|
||||
QString message {QString::fromLatin1 (line)};
|
||||
DecodedText decodedtext {message.replace (QChar::LineFeed, "")};
|
||||
ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_config.DXCC(),
|
||||
m_logBook,m_config.color_CQ(),m_config.color_MyCall(),m_config.color_DXCC(),
|
||||
m_config.color_NewCall());
|
||||
@ -1439,7 +1436,7 @@ void MainWindow::fastSink(qint64 frames)
|
||||
writeAllTxt(message);
|
||||
bool stdMsg = decodedtext.report(m_baseCall,
|
||||
Radio::base_callsign(ui->dxCallEntry->text()),m_rptRcvd);
|
||||
decodedtext=message.mid(0,4) + message.mid(6,-1);
|
||||
decodedtext = DecodedText {message.left (4) + message.mid (6, -1)};
|
||||
if (stdMsg) pskPost (decodedtext);
|
||||
}
|
||||
|
||||
@ -2570,8 +2567,7 @@ void::MainWindow::fast_decode_done()
|
||||
if(narg[13]/8==narg[12]) message=message.trimmed().replace("<...>",m_calls);
|
||||
|
||||
//Left (Band activity) window
|
||||
DecodedText decodedtext;
|
||||
decodedtext=message.replace(QChar::LineFeed,"");
|
||||
DecodedText decodedtext {message.replace (QChar::LineFeed, "")};
|
||||
if(!m_bFastDone) {
|
||||
ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_config.DXCC(),
|
||||
m_logBook,m_config.color_CQ(),m_config.color_MyCall(),m_config.color_DXCC(),
|
||||
@ -2590,12 +2586,12 @@ void::MainWindow::fast_decode_done()
|
||||
if(m_mode=="JT9" or m_mode=="MSK144") {
|
||||
// find and extract any report for myCall
|
||||
QString msg=message.mid(0,4) + message.mid(6,-1);
|
||||
decodedtext=msg.replace(QChar::LineFeed,"");
|
||||
decodedtext = DecodedText {msg.replace (QChar::LineFeed, "")};
|
||||
bool stdMsg = decodedtext.report(m_baseCall,
|
||||
Radio::base_callsign(ui->dxCallEntry->text()), m_rptRcvd);
|
||||
Radio::base_callsign(ui->dxCallEntry->text()), m_rptRcvd);
|
||||
|
||||
// extract details and send to PSKreporter
|
||||
if (stdMsg) pskPost(decodedtext);
|
||||
if (stdMsg) pskPost (decodedtext);
|
||||
}
|
||||
}
|
||||
m_startAnother=m_loopall;
|
||||
@ -2707,21 +2703,20 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
.arg (f.fileName ()).arg (f.errorString ()));
|
||||
}
|
||||
|
||||
if (m_config.insert_blank () && m_blankLine)
|
||||
{
|
||||
QString band;
|
||||
if (QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged > 50)
|
||||
{
|
||||
band = ' ' + m_config.bands ()->find (m_freqNominal);
|
||||
}
|
||||
ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-'));
|
||||
m_blankLine = false;
|
||||
}
|
||||
if (m_config.insert_blank () && m_blankLine)
|
||||
{
|
||||
QString band;
|
||||
if (QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged > 50)
|
||||
{
|
||||
band = ' ' + m_config.bands ()->find (m_freqNominal);
|
||||
}
|
||||
ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-'));
|
||||
m_blankLine = false;
|
||||
}
|
||||
|
||||
DecodedText decodedtext;
|
||||
decodedtext = QString::fromUtf8 (t.constData ()).remove (QRegularExpression {"\r|\n"});
|
||||
DecodedText decodedtext {QString::fromUtf8 (t.constData ()).remove (QRegularExpression {"\r|\n"})};
|
||||
|
||||
//Left (Band activity) window
|
||||
//Left (Band activity) window
|
||||
if(!bAvgMsg) {
|
||||
ui->decodedTextBrowser->displayDecodedText(decodedtext,m_baseCall,m_config.DXCC(),
|
||||
m_logBook,m_config.color_CQ(),m_config.color_MyCall(),
|
||||
@ -2762,7 +2757,7 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
if(b65 and m_modeTx!="JT65") on_pbTxMode_clicked();
|
||||
if(!b65 and m_modeTx=="JT65") on_pbTxMode_clicked();
|
||||
}
|
||||
m_QSOText=decodedtext;
|
||||
m_QSOText = decodedtext.string ();
|
||||
}
|
||||
if(m_mode=="FT8" or m_mode=="QRA64") auto_sequence (decodedtext.string(), 25, 50);
|
||||
|
||||
@ -2836,7 +2831,7 @@ void MainWindow::auto_sequence (QString const& message, unsigned start_tolerance
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::pskPost (DecodedText decodedtext)
|
||||
void MainWindow::pskPost (DecodedText const& decodedtext)
|
||||
{
|
||||
if (m_diskData || !m_config.spot_to_psk_reporter() || decodedtext.isLowConfidence ()) return;
|
||||
|
||||
@ -3648,7 +3643,6 @@ void MainWindow::processMessage(QString const& messages, int position, bool ctrl
|
||||
{
|
||||
QString t1 = messages.left(position); //contents up to \n on selected line
|
||||
int i1=t1.lastIndexOf(QChar::LineFeed) + 1; //points to first char of line
|
||||
DecodedText decodedtext;
|
||||
QString t2 = messages.mid(i1,position-i1); //selected line
|
||||
|
||||
// basic mode sanity checks
|
||||
@ -3687,15 +3681,8 @@ void MainWindow::processMessage(QString const& messages, int position, bool ctrl
|
||||
}
|
||||
}
|
||||
}
|
||||
decodedtext = t2a;
|
||||
|
||||
if (decodedtext.indexOf(" CQ ") > 0) {
|
||||
// TODO this magic 37 characters is also referenced in DisplayText::_appendDXCCWorkedB4()
|
||||
auto eom_pos = decodedtext.string ().indexOf (' ', 37);
|
||||
if (eom_pos < 37) eom_pos = decodedtext.string ().size () - 1; // we always want at least the characters
|
||||
// to position 37
|
||||
decodedtext = decodedtext.string ().left (eom_pos + 1); // remove DXCC entity and worked B4 status. TODO need a better way to do this
|
||||
}
|
||||
DecodedText decodedtext {t2a};
|
||||
decodedtext.removeAddedInfo ();
|
||||
|
||||
auto t3 = decodedtext.string ();
|
||||
auto t4 = t3.replace (QRegularExpression {" CQ ([A-Z]{2,2}|[0-9]{3,3}) "}, " CQ_\\1 ").split (" ", QString::SkipEmptyParts);
|
||||
@ -3720,14 +3707,24 @@ void MainWindow::processMessage(QString const& messages, int position, bool ctrl
|
||||
QString hiscall;
|
||||
QString hisgrid;
|
||||
decodedtext.deCallAndGrid(/*out*/hiscall,hisgrid);
|
||||
auto acceptable_73 = m_QSOProgress >= ROGER_REPORT && message_is_73 (0, t4);
|
||||
if (!Radio::is_callsign (hiscall) // not interested if not from QSO partner
|
||||
&& !(t4.size () == 7 // unless it is of the form
|
||||
&& (t4.at (5) == m_baseCall // "<our-call> 73"
|
||||
|| t4.at (5).startsWith (m_baseCall + '/')
|
||||
|| t4.at (5).endsWith ('/' + m_baseCall))
|
||||
&& t4.at (6) == "73")
|
||||
&& !acceptable_73)
|
||||
bool is_73 = t4.filter (QRegularExpression {"73|RR73"}).size ();
|
||||
auto acceptable_73 =
|
||||
m_QSOProgress >= ROGER_REPORT
|
||||
&& is_73
|
||||
&& ((decodedtext.isStandardMessage ()
|
||||
&& (t4.contains (m_baseCall)
|
||||
|| t4.contains (m_config.my_callsign ())
|
||||
|| t4.contains (ui->dxCallEntry->text ())
|
||||
|| t4.contains (Radio::base_callsign (ui->dxCallEntry->text ()))
|
||||
|| t4.contains ("DE")))
|
||||
|| !decodedtext.isStandardMessage ());
|
||||
if ((is_73 && !acceptable_73)
|
||||
|| (!Radio::is_callsign (hiscall) // not interested if not from QSO partner
|
||||
&& !(t4.size () == 7 // unless it is of the form
|
||||
&& (t4.at (5) == m_baseCall // "<our-call> 73"
|
||||
|| t4.at (5).startsWith (m_baseCall + '/')
|
||||
|| t4.at (5).endsWith ('/' + m_baseCall))
|
||||
&& t4.at (6) == "73")))
|
||||
{
|
||||
qDebug () << "Not processing message - hiscall:" << hiscall << "hisgrid:" << hisgrid;
|
||||
return;
|
||||
@ -3934,17 +3931,17 @@ void MainWindow::processMessage(QString const& messages, int position, bool ctrl
|
||||
|
||||
// if we get here then we are reacting to the message
|
||||
if (m_bAutoReply) m_bCallingCQ = CALLING == m_QSOProgress;
|
||||
QString s1=m_QSOText.string().trimmed();
|
||||
QString s1 = m_QSOText.trimmed ();
|
||||
QString s2=t2.trimmed();
|
||||
if (s1!=s2 and !decodedtext.isTX()) {
|
||||
decodedtext=t2;
|
||||
decodedtext = DecodedText {t2};
|
||||
ui->decodedTextBrowser2->displayDecodedText(decodedtext, m_baseCall,
|
||||
false, m_logBook,m_config.color_CQ(), m_config.color_MyCall(),
|
||||
m_config.color_DXCC(),m_config.color_NewCall());
|
||||
m_QSOText=decodedtext;
|
||||
m_QSOText = decodedtext.string ();
|
||||
}
|
||||
|
||||
if (hiscall != "73" && !acceptable_73
|
||||
if (hiscall != "73"
|
||||
&& (base_call != qso_partner_base_call || base_call != hiscall))
|
||||
{
|
||||
if (qso_partner_base_call != base_call) {
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include "DisplayManual.hpp"
|
||||
#include "psk_reporter.h"
|
||||
#include "logbook/logbook.h"
|
||||
#include "decodedtext.h"
|
||||
#include "commons.h"
|
||||
#include "astro.h"
|
||||
#include "MessageBox.hpp"
|
||||
@ -82,6 +81,7 @@ class Detector;
|
||||
class SampleDownloader;
|
||||
class MultiSettings;
|
||||
class EqualizationToolsDialog;
|
||||
class DecodedText;
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
@ -541,7 +541,7 @@ private:
|
||||
|
||||
QSharedMemory *mem_jt9;
|
||||
LogBook m_logBook;
|
||||
DecodedText m_QSOText;
|
||||
QString m_QSOText;
|
||||
unsigned m_msAudioOutputBuffered;
|
||||
unsigned m_framesAudioInputBuffered;
|
||||
unsigned m_downSampleFactor;
|
||||
@ -588,7 +588,7 @@ private:
|
||||
void transmit (double snr = 99.);
|
||||
void rigFailure (QString const& reason);
|
||||
void pskSetLocal ();
|
||||
void pskPost(DecodedText decodedtext);
|
||||
void pskPost(DecodedText const& decodedtext);
|
||||
void displayDialFrequency ();
|
||||
void transmitDisplay (bool);
|
||||
void processMessage(QString const& messages, qint32 position, bool ctrl = false, bool alt = false);
|
||||
|
Loading…
Reference in New Issue
Block a user